01 Aralık 2010

Basit C++ XOX oyunu.


#include <iostream>
using namespace std;
//field arrayimiz, XOX oyunundaki her 9 haneyi temsil ediyor. Her haneye bir numara verdik, oyuncu hareketlerini bu numaralara gore yapacak.
int field[9]={1,2,3,4,5,6,7,8,9};
//asagidaki arrayin amaci sadece sirasi gelen veya kazanan oyuncunun adini soylerken bize kolaylik saglamak.
char choice[2]={'O','X'};
//main'deki donguden cikmamizi saglayarak oyunumuzu bitiren boolean
bool gameOver=false;

void input(int step){
int move;
while(1){
//hamle sirasi tek ise X, cift ise O hamle yapar.
cout<<"Player "<<choice[step%2]<<", make your move:";
cin>>move;
//oyuncu onceden hamle yapilmis veya alakasiz bir yere giderse hata yazdirip dongunun basina aliyoruz ve butun girdi islemini tekrar yaptiriyoruz.
if(field[move-1]==0||field[move-1]==-1||move<1||move>9)
cout<<"You can't select that field!\n";
//oyuncu yanlis bir numara girmedi, donguden cikaralim.
else
break;
}
//integer olan field arrayinda X hamle yaptiysa hanenin degeri -1, O hamle yaptiysa da 0(sifir) oluyor.
field[move-1]=-1*(step%2);
}

//oyun kagidimizin goruntusunu cizdiriyoruz. 3 satir ve 3 sutun icin iki adet for dongusu kullandim.
void draw(){
int place=0;
for(int row=1; row<=3; row++){
for(int col=1; col<=3; col++){
//arraydaki bir hanenin degeri -1 ise X, 0 ise O, baska bir sey ise oldugu gibi yazdiriyoruz; zaten hane numaralarini en basta yazmistik.
if(field[place]==-1)
cout<<"X";
else if(field[place]==0)
cout<<"O";
else
cout<<field[place];
place++;
}
cout<<endl;
}
}

//bu fonksiyonla field arrayimizdaki 3 hanenin ayni olup olmadigini kontrol ediyoruz
bool check(int a, int b, int c){
if(field[a]==field[b]&&field[b]==field[c])
return true;
else
return false;
}

void checkTable(){
//once yatay satirlari kontrol ediyoruz
for(int i=0; i<=6; i+=3){
if(check(i,i+1,i+2)){
gameOver=true;
draw();
cout<<choice[field[i]*-1]<<" wins!\n";
break;
}
}
//sonra dikey sutunları kontrol ettiriyoruz
for(int i=0; i<=2; i++){
if(check(i,i+3,i+6)){
gameOver=true;
draw();
cout<<choice[field[i]*-1]<<" wins!\n";
break;
}
}
//en son da caprazlama kontrol ediyoruz
if(check(0,4,8)||check(2,4,6)){
gameOver=true;
draw();
cout<<choice[field[4]*-1]<<" wins!\n";
}
}

int main(){
//tablomuzda 9 hane oldugundan en fazla 9 adim atilabilir, dongude her adimdan once kazanan var mi diye kontrol ettiriyoruz. Eger kazanan varsa oyun bitiyor. Yoksa dongugen cikana kadar devam ediyor ve donguden kazanan olmadan cikarsak oyun berabere bitiyor.
for(int step=1; step<=9; step++){
checkTable();
if(gameOver)
return 0;
draw();
input(step);
}
draw();
cout<<"DRAW!\n";
return 0;
}

http://codetidy.com/319

Hiç yorum yok:

Yorum Gönder