然後今天打開看看,本來以為要寫完了,就遇到一個大問題:
先上code:
while(true)
{
Console.WriteLine("You are 'o'.\nEnter a coordinate position from [1,1] to [3,3] as a,b");
…
for(int p=0; p < 3; p++)
{
if (S[p, 0] == "o" && S[p, 1] == "o" && S[p, 2] == "o")
{
Console.WriteLine("You win.");
break;
}
else if (S[0, p] == "o" && S[1, p] == "o" && S[2, p] == "o")
{
Console.WriteLine("You win.");
break;
}
…
else if (S[0, 2] == "x" && S[1, 1] == "x" && S[2, 0] == "x")
{
Console.WriteLine("You loss.");
break;
}
...
}
}
大家可能會發現,我為了省力而在判斷輸贏的時候放了一個小迴圈,結果造成了一個問題:我判斷完條件會break不到外面,我只會break到我拿來省力的小迴圈...
現在有兩種解法:
一、乖乖把輸贏判斷的條件一個一個手打,就可以放到外面那層
二、嘗試調整一整支程式的架構,讓條件判斷的迴圈可以繼續用
嘗試了幾下,看來第一種是唯一解法了 (哭
後來我把幾種不用重打的搬出去,測試果然成功了
但要判斷是否全滿的地方一定要用迴圈,我目前還沒想到解決方法。
註:關於迴圈的部分,目前有一個假設
原本的迴圈: for (int p = 0; p < 3; p++)
若條件判斷時內層的break沒有用,可否改成p=4
跳出迴圈後加上
if(p=4)
{
break;
}
不過這麼做會需要global參數(在C#中好像叫public?),否則無法在迴圈外使用p
那麼for迴圈會需要回傳(return?)值出來嗎,還是只要初始值 public int p = 0 就可以解決了?
不過這樣要改的地方好多,目前有點沒時間弄,以後再來驗證這個假設好了。