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.
C:
#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;
}
// ██
// ░░
Not: Program Ubuntu GNU/Linux platformunda derlenmiştir ve denenmiştir. Eğer Windows kullanıyorsanız kodda değişiklik yapmanız gerekebilir. O değişiklikte kodun sonuna bir getch() fonksiyonu eklemeniz gerektiğidir. Çünkü DOS/Windows komut satırı ortamında bir program çalıştırıldıktan sonra kapanır. Kapanmasını engellemek için conio.h kütüphanesinde ki getch() fonksiyonunu, ya da getchar() fonksiyonunu kullanabilirsiniz.