ورود

View Full Version : سوال: مشکل در بازی دوز



cloner11
یک شنبه 06 بهمن 1392, 13:13 عصر
سلام
من برنامه زیر رو نوشتم ولی مشکلش اینه که فقط یه کاربر میتونه عدد وارد کنه




#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main ()
{

int i;

char a[3][3];
a[0][0]='1'; a[0][1]='2';a[0][2]='3';
a[1][0]='4'; a[1][1]='5';a[1][2]='6';
a[2][0]='7'; a[2][1]='8';a[2][2]='9';



while(1) //****halgheie koli******** (bayad hamishe dorost bashe pass ye adad gheyre sefr mesle yek ro jaye shart mizarim)
{


for (i=0; i<3 ; i++)
{
if (a[i][0]=='O' && a[i][1]=='O' && a[i][2]=='O')
{ printf("\n YOU WIN !");
getche();

}
}

for (i=0; i<3 ; i++)
{
if (a[0][i]=='O' && a[1][i]=='O' && a[2][i]=='O')

{ printf("\n YOU WIN !");
getche();
}
}

if ( (a[0][0]=='O' && a[1][1]=='O' && a[2][2]=='O') || (a[0][2]=='O' && a[1][1]=='O' && a[2][0]=='O') )

{ printf("\n YOU WIN !");
getche();

}

///////////////////////////////////////////////////
for (i=0; i<3 ; i++)
{
if (a[i][0]=='X' && a[i][1]=='X' && a[i][2]=='X')
{ printf("\n piayer 2 win!");
getche();

}
}

for (i=0; i<3 ; i++)
{
if (a[0][i]=='X' && a[1][i]=='X' && a[2][i]=='X')

{ printf("\n piayer 2 win!");
getche();
}
}

if ( (a[0][0]=='X' && a[1][1]=='X' && a[2][2]=='X') || (a[0][2]=='X' && a[1][1]=='X' && a[2][0]=='X') )

{ printf("\n piayer 2 win !");
getche();

}


//END GAME ================================================== ===================


clrscr();//choon halghe har bar dare tekrar mishe pass bayad safhe dar har bar pak beshe vagar na harbar yek jadvale jadid ijad mishe
printf ("\n\n") ;
textcolor(14); //textcolor baraye taghir range matn hast (addad 14 baraye range zard hast)
cprintf (" | | \r\n") ;; cprintf(" %c | %c | %c \r\n",a[0][0],a[0][1],a[0][2]) ;
cprintf (" | | \r\n") ;
cprintf (" ______|________|______ \r\n") ;
cprintf (" | | \r\n") ;
cprintf (" | | \r\n") ;
cprintf(" %c | %c | %c \r\n",a[1][0],a[1][1],a[1][2]) ;
cprintf (" | | \r\n") ;
cprintf (" ______|________|______ \r\n") ;
cprintf (" | | \r\n") ;
cprintf (" | | \r\n") ;
cprintf(" %c | %c | %c \r\n",a[2][0],a[2][1],a[2][2]) ;
cprintf (" | | \r\n") ;
if(1)
{
char k;
k=getche();
if ( a[0][0]!='1' && a[0][1]!='2' && a[0][2]!='3' && a[1][0]!='4' && a[1][1]!='5' && a[1][2]!='6' && a[2][0]!='7' && a[2][1]!='8' && a[2][2]!='9')
{

printf("\n no one wins !! \n ") ;


}


else if (k=='1' && a[0][0]!='O' && a[0][0]!='X' )
a[0][0]='X';

else if (k=='2' && a[0][1]!='O' && a[0][1]!='X' )
a[0][1]='X';

else if (k=='3' && a[0][2]!='O' && a[0][2]!='X' )
a[0][2]='X';

else if (k=='4' && a[1][0]!='O' && a[1][0]!='X' )
a[1][0]='X';

else if (k=='5' && a[1][1]!='O' && a[1][1]!='X' )
a[1][1]='X';

else if (k=='6' && a[1][2]!='O' && a[1][2]!='X' )
a[1][2]='X';

else if (k=='7' && a[2][0]!='O' && a[2][0]!='X' )
a[2][0]='X';

else if (k=='8' && a[2][1]!='O' && a[2][1]!='X' )
a[2][1]='X';

else if (k=='9' && a[2][2]!='O' && a[2][2]!='X' )
a[2][2]='X';

}




if (1)
{//shoro shodane vared kardane addad Tavasote karbar (if2)

char e;
e=getche();

////// agar tamame khaneha zad e shode boodand
if ( a[0][0]!='1' && a[0][1]!='2' && a[0][2]!='3' && a[1][0]!='4' && a[1][1]!='5' && a[1][2]!='6' && a[2][0]!='7' && a[2][1]!='8' && a[2][2]!='9')
{

printf("\n no one wins !! \n ") ;


}



//vared kardane shomare
else if (e=='1' && a[0][0]!='X' && a[0][0]!='O' )
a[0][0]='O';

else if (e=='2' && a[0][1]!='X' && a[0][1]!='O' )
a[0][1]='O';

else if (e=='3' && a[0][2]!='X' && a[0][2]!='O' )
a[0][2]='O';

else if (e=='4' && a[1][0]!='X' && a[1][0]!='O' )
a[1][0]='O';

else if (e=='5' && a[1][1]!='X' && a[1][1]!='O' )
a[1][1]='O';

else if (e=='6' && a[1][2]!='X' && a[1][2]!='O' )
a[1][2]='O';

else if (e=='7' && a[2][0]!='X' && a[2][0]!='O' )
a[2][0]='O';

else if (e=='8' && a[2][1]!='X' && a[2][1]!='O' )
a[2][1]='O';

else if (e=='9' && a[2][2]!='X' && a[2][2]!='O' )
a[2][2]='O';

}//end if 2
}//end While
}//end main

hamedlll
یک شنبه 06 بهمن 1392, 14:01 عصر
این یه نمونه که کارم میکنه:
#include <iostream>
#include <stdlib.h>
using namespace std;

int IsGameFinished(int matrix[3][3]) {
if (matrix[0][0] == matrix[0][1] && matrix[0][0] == matrix[0][2] && matrix[0][1] == matrix[0][2])
return matrix[0][0];

else if (matrix[1][0] == matrix[1][1] && matrix[1][0] == matrix[1][2] && matrix[1][1] == matrix[1][2])
return matrix[1][0];

else if (matrix[2][0] == matrix[2][1] && matrix[2][0] == matrix[2][2] && matrix[2][1] == matrix[2][2])
return matrix[2][0];

else if (matrix[0][0] == matrix[1][0] && matrix[0][0] == matrix[2][0] && matrix[1][0] == matrix[2][0])
return matrix[0][0];

else if (matrix[0][1] == matrix[1][1] && matrix[0][1] == matrix[2][1] && matrix[1][1] == matrix[2][1])
return matrix[0][1];

else if (matrix[0][2] == matrix[1][2] && matrix[0][0] == matrix[2][2] && matrix[1][2] == matrix[2][2])
return matrix[0][2];

else if (matrix[0][0] == matrix[1][1] && matrix[0][0] == matrix[2][2] && matrix[1][1] == matrix[2][2])
return matrix[0][0];

else if (matrix[2][0] == matrix[1][1] && matrix[2][0] == matrix[0][2] && matrix[1][1] == matrix[0][2])
return matrix[2][0];

else
return 2;
}

void printMatrix(int matrix[3][3]) {
int flag = 0;
cout << "\n\n\t";
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if ( matrix[i][j] == 0)
cout << "O ";
else if ( matrix[i][j] == 1)
cout << "X ";
else
cout << flag+1 << " ";
flag++;
}
cout << "\n\n\t";
}
}

int main(int argc, char const *argv[]) {
int result;
int X_O[3][3];
int q,s;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
X_O[i][j] = 9;

int choice;
int turn = 0;
printMatrix(X_O);
for (int m = 0; m < 9; ++m) {
if (turn == m) {
cout << "\nIt's X turn: ";
while (true) {
cin >> choice;
if (choice >= 1 && choice <= 9) {
q = choice/3;
s = choice%3;
if (X_O[q][s-1] == 9) {
X_O[q][s-1] = 1;
break;
}
else
cout << "\nit's have been chosen, Choose again:";
}
else
cout << "\nout of range choose again: ";
}
turn += 2;
}
else {
cout << "\nIt's O turn: ";
while (true) {
cin >> choice;
if (choice >= 1 && choice <= 9) {
q = choice/3;
s = choice%3;
if (X_O[q][s-1] == 9) {
X_O[q][s-1] = 0;
break;
}
else
cout << "\nit's have been chosen, Choose again: ";
}
else
cout << "\nout of range choose again: ";
}
}
system("cls");
printMatrix(X_O);
result = IsGameFinished(X_O);
if (result == 0) {
cout << "\nWinner is O ...";
break;
}
else if (result == 1) {
cout << "\nWinner is X ...";
break;
}
}
if (result == 2)
cout << "\nMosavi ...";
return 0;
}

cloner11
یک شنبه 06 بهمن 1392, 14:08 عصر
ممنون ولی من میخوام اشکال کد خودم رو بدونم

Behnam.B
سه شنبه 08 بهمن 1392, 10:48 صبح
ممنون ولی من میخوام اشکال کد خودم رو بدونم

این مشکل که فقط یک کاربر میتونه عدد وارد کنه به این خاطر پیش میاد که احتمالا شما یه عدد وارد میکنی و بعد enter رو میزنی... اینطوری کلید انتخابی برای کاربر دوم همون enter میشه که چون e هیچکدوم از کاراکتر های 1 تا 9 نیست، از همه else if ها خارج میشه...
اگه یه حلقه باشه که اگه کلید نامعتبر وارد کردیم، 2باره کلید رو بخونه این مشکل حل میشه ;)