C´de basit bir labirent oyunu

Başlatan OnLive, 11 Ocak 2020 - 10:37:58

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

OnLive



Merhabalar. C´de 9x9 karelik bir matris üzerinde çalışan basit bir labirent oyunu yazdım. Program her turda Y, Z ve X oyuncularından bir sonraki hamlelerini girmesini bekliyor ve her turda yeni matris düzenini ekrana basıyor. Ekranda gitmek istenilen yön her bir turda w, a, s, d karakterleri girilerek belirleniyor. Ok işareti ile belirlenmiş bitiş çizgisine ilk ulaşan oyuncu kazanıyor ve kimin kazandığı ekrana bastırılıp program sonlandırılıyor.

Hem çok zaman ayıramadığım için, hem de yeni başlayanların gözünde fazla karmaşıklaşmaması için elimden geldiğince programı basit tutmaya çalıştım. İlgilenenler programda iyileştirmeler yapabilirler. Örneğin siyah blokların olduğu bölüme geçişi engelleyen kurallar yazabilirsiniz ya da her oyuncunun gerçekleştirdiği hareket sayısına göre oyun sonunda puan verilebilir. Bunlar ilk aklıma gelenler, gerisi keyfinize kalmış.

C´de iki boyutlu matrisler bastıran örneklerden bol bol çözün. Ne kadar çok örnek çözerseniz, döngü yazma ve algoritma kurma becerilerinizi geliştirmiş olursunuz. Çalışmak için kaynak arıyorsanız Türkçe düzgün anlatımlı kaynak olarak Şerafettin Arıkan´ın C Programlama Dili kitabını öneririm. Ancak içerdiği bol miktarda örnek soru ve çözümü nedeniyle Deitel´in C ile Programlama kitabını öneririm. İki kitapta şu an piyasada mevcut olmalı bildiğim kadarıyla. Eğer İngilizce biliyorsanız kaynaklar sonsuz zaten.




#include <stdio.h>

int main() {
int a, b, Ya = 1, Yb = 1, Za = 1, Zb = 9, Xa = 8, Xb = 1;
char Yc, Zc, Xc;
while(1) {
for(a=1; a<=9; a++) {
for(b=1; b<=9; b++) {
if((a==1 && b==4) || (a==2 && (b==7 || b==9)) || (a==3 && (b==2 || b==4 || b==7 || b==8)) || (a==4 && b==5) || (a==5 && (b==2 || b==7)) || (a==6 && (b==3 || b==5 || b==9)) || (a==7 && (b==1 || b==7 || b==8)) || (a==8 && (b==2 || b==4 || b==7)) || (a==9 && (b==4 || b==5))) {
printf("██");
}
else {
if(a==5 && b==9) {
printf("⮕");
}
else if(a==Ya && b==Yb) {
printf(" Y");
}
else if(a==Za && b==Zb) {
printf(" Z");
}
else if(a==Xa && b==Xb) {
printf(" X");
}
else {
printf("░░");
}
}
}
printf("\n");
}
if(Ya==5 && Yb==9) {
printf("Y oyuncusu kazandı.\n");
break;
}
else if(Za==5 && Zb==9) {
printf("Z oyunusu kazandı.\n");
break;
}
else if(Xa==5 && Xb==9) {
printf("X oyuncusu kazandı.\n");
break;
}
printf("Y oyuncusunun sırası:\n");
scanf(" %c", &Yc);
if(Yc=='w')
Ya--;
else if(Yc=='s')
Ya++;
else if(Yc=='d')
Yb++;
else if(Yc=='a')
Yb--;
printf("Z oyuncusunun sırası:\n");
scanf(" %c", &Zc);
if(Zc=='w')
Za--;
else if(Zc=='s')
Za++;
else if(Zc=='d')
Zb++;
else if(Zc=='a')
Zb--;
printf("X oyuncusunun sırası:\n");
scanf(" %c", &Xc);
if(Xc=='w')
Xa--;
else if(Xc=='s')
Xa++;
else if(Xc=='d')
Xb++;
else if(Xc=='a')
Xb--;
}
return 0;
}
// ██
// ░░
"People said I should accept the world. Bullshit! I don't accept the world." ― rms

Onur48

Çok güzel. :) Arada sayıları filan değiştirip mantıkları anlamaya çalışacam.

koulutyhma

Hocam keşke fonksiyon kullansaydınız bu şekilde yeni başlayanların anlaması daha kolay olurdu.Ama emeğe saygı tabiki uğraşmışsınız.