● TicTacToe - 3*3 XO Game
بازی دو نفره X-O
❶ این بازی به صورت دو نفره صورت می گیرد که یک نفر از حرف X و دیگری از حرف O استفاده می کند.
❷ در این بازی از یک جدول 3*3 استفاده می شود.
❸ بازی با حرف O آغاز می شود.
❹ در هر نوبت هرکدام از بازیکن ها تنها یک بار می توانند حرف مربوط به خود را در جدول بگذارند.
❺ بازیکن ها باید سعی کنند حداقل یک ردیف، ستون و یا قطر از جدول را با حرف مربوط به خود پر کنند و برنده کسی است که اوّلین بار یکی از این حالت ها را ایجاد کند.
11
+---+---+---+ | O | | | +---+---+---+ | | | | +---+---+---+ | | | | +---+---+---+
ورودی:
تا موقعی که بازی تمام نشده، در هر مرحله هر یک از دو بازیکن یک عدد دورقمی به برنامه می دهد که نشان دهنده ی مختصات خانه ای از جدول (X,Y) است. مثلاً 12 یعنی X=1 و Y=2 که اگر این خانه قبلاً در جدول پر نشده باشد، حرف آن بازیکن در این خانه قرار خواهد گرفت و هر دفعه نوبت عوض می شود مگر آنکه حرکتی اشتباه صورت بگیرد.
خروجی:
در هر مرحله تا موقعی که بازی تمام نشده باشد جدولی دقیقاً مثل شکل مثال بالا چاپ می شود و بازی وقتی تمام می شود که یکی از عبارات زیر را چاپ کنید:
❶ "O is winner"
❷ "X is winner"
❸ "No winner"
این تضمین شده است که در ورودی اعداد مختصات خارج از جدول مثلا 4, 4 مشاهده نخواهد شد.
// A Drop of the Programming Sea - adops.blog.ir #include <iostream> using namespace std; bool win(char**); void print(char**); int main() { char** ch = new char*[3]; for(int i=0; i<3; i++) ch[i] = new char[3]; for(int i=0; i<3; i++) for(int j=0; j<3; j++) ch[i][j]=' '; int PorNashod=9,place,turn=2; while(PorNashod) { cin >> place; int y=place%10-1; int x=place/10-1; if(turn==2) { if(ch[y][x]==' ') { ch[y][x]='O'; PorNashod--; } else turn--; } else if(turn==1) if(ch[y][x]==' ') { ch[y][x]='X'; PorNashod--; } else turn++; print(ch); if(win(ch)&&PorNashod<=4) { char out = (turn==2)? 'O' : 'X'; cout << out << " is winner\n"; return 0; } turn = (turn==2)? 1 : 2; } cout << "No winner\n"; return 0; } bool win(char** ch) { if(ch[0][0]==ch[1][1]&&ch[1][1]==ch[2][2]) return true; else if(ch[0][2]==ch[1][1]&&ch[1][1]==ch[2][0]) return true; for(int i=0; i<3; i++) { if(ch[i][0]==ch[i][1]&&ch[i][1]==ch[i][2]) return true; else if(ch[0][i]==ch[1][i]&&ch[1][i]==ch[2][i]) return true; } return false; } void print(char** ch) { char array[7][13]; for(int y=0; y<7; y++) for(int x=0; x<13; x++) array[y][x]=' '; for(int y=1,i=0; y<=5||i<7; y+=2,i++) for(int x=2,j=0; x<=10||j<13; x+=4,j++) { if(j%4&&!(i%2)) array[i][j]='-'; else if(!(j%4)&&i%2) array[i][j]='|'; if(x<=10&&y<=5) { array[y-1][x+2]='+'; array[y+1][x+2]='+'; array[y+1][x-2]='+'; array[y-1][x-2]='+'; } if(i<3&&j<3) array[y][x] = ch[i][j]; } for(int y=0; y<7; y++) { for(int x=0; x<13; x++) cout << array[y][x]; cout << endl; } return; }