我被困在編碼tic tac toe遊戲中。我需要你的幫助。基本上我的問題是爲什麼我的do-while循環在我的C++代碼中不起作用。我正在使用VS C++ 2015.do-while循環內部不是wokirng
背後的基本邏輯是:
- 創建3 3陣列並將1-9作爲字符。
- 設置一個for循環,如果語句讓玩家輸入X或O.如果我是0,或者甚至是玩家1輪到X.如果奇數,玩家2將O作爲字符。
- 在do-while循環中,我想檢查玩家是否選擇了已經選擇的單元格。但是do-while循環似乎根本不起作用。
- 通過if語句檢查一行中是否有3個X或Os。
請讓我知道什麼是解決這個問題的關鍵......非常感謝!
#include <iostream>
#include "tic_tac_toe.h"
using namespace std;
int tic_tac_toe() {
cout << "You chose tic tac toe game!:) \n";
char t[] = { '1', '2' ,'3' , '4', '5', '6', '7', '8', '9' };
cout << "_" << t[0] << "_|_" << t[1] << "_|_" << t[2] << "_\n";
cout << "_" << t[3] << "_|_" << t[4] << "_|_" << t[5] << "_\n";
cout << " " << t[6] << " | " << t[7] << " | " << t[8] << " \n";
for (int i = 0; i < 9; i++) {
if (i == 0 || i % 2 == 0) {
cout << "Player 1, your trun. Please choose a number to put X. \n";
int n1;
cin >> n1;
do {
cout << "You cannot overwrite on X or O. Please in put again. \n";
cin >> n1;
} while (t[n1 - 1] == 'X' || t[n1 - 1] == 'O');
t[n1 - 1] = 'X';
}
else {
cout << "Player 2, your trun. Please choose a number to put O. \n";
int n2;
cin >> n2;
do {
cout << "You cannot overwrite on X or O. Please in put again. \n";
cin >> n2;
} while (t[n2 - 1] == 'X' || t[n2 - 1] == 'O');
t[n2 - 1] = 'O';
}
cout << "_" << t[0] << "_|_" << t[1] << "_|_" << t[2] << "_\n";
cout << "_" << t[3] << "_|_" << t[4] << "_|_" << t[5] << "_\n";
cout << " " << t[6] << " | " << t[7] << " | " << t[8] << " \n";
if (t[0] == 'X' && t[1] == 'X' && t[2] == 'X' ||
t[3] == 'X' && t[4] == 'X' && t[5] == 'X' ||
t[6] == 'X' && t[7] == 'X' && t[8] == 'X' ||
t[0] == 'X' && t[3] == 'X' && t[6] == 'X' ||
t[1] == 'X' && t[4] == 'X' && t[7] == 'X' ||
t[2] == 'X' && t[5] == 'X' && t[8] == 'X' ||
t[0] == 'X' && t[4] == 'X' && t[7] == 'X' ||
t[2] == 'X' && t[4] == 'X' && t[6] == 'X') {
cout << "Player 1, you won! \n";
break;
}
else if(t[0] == 'O' && t[1] == 'O' && t[2] == 'O' ||
t[3] == 'O' && t[4] == 'O' && t[5] == 'O' ||
t[6] == 'O' && t[7] == 'O' && t[8] == 'O' ||
t[0] == 'O' && t[3] == 'O' && t[6] == 'O' ||
t[1] == 'O' && t[4] == 'O' && t[7] == 'O' ||
t[2] == 'O' && t[5] == 'O' && t[8] == 'O' ||
t[0] == 'O' && t[4] == 'O' && t[7] == 'O' ||
t[2] == 'O' && t[4] == 'O' && t[6] == 'O')
{
cout << "Player 2, you won! \n";
break;
}
}
return 0;
}
這聽起來就像你可能需要學習如何使用調試器來遍歷代碼一樣。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
「它不工作」不是真的有關你期望什麼和實際發生的信息。給這些信息會大大增加你獲得幫助的機會。例如,我希望用'while'循環代替'do-while',因爲您在第一次選擇之後寫出「您不能覆蓋X或O.請重新輸入」,無論它是什麼選擇。但是,我不能將它作爲答案發布,因爲我不知道這是否是您的實際問題 –
您是否知道「while」和「do-while」循環之間的區別? 「do-while」循環的整個主體至少執行一次,因爲條件在最後被檢查。這意味着你顯示了要求輸入的信息,然後你用'cin'讀入輸入,然後你進入'do'循環,你立即告訴玩家選擇錯誤(根本沒有檢查過!),你問他輸入一個新的值,最後你檢查它。這顯然是錯誤的。提示:如果你使用'while'循環,會發生什麼? –