iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

突然冒出的自學計畫系列 第 24

#Day24 做OOXX遊戲-2

  • 分享至 

  • xImage
  •  

然後今天打開看看,本來以為要寫完了,就遇到一個大問題:

  1. 我break不到外面ㄟ

先上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到我拿來省力的小迴圈...

現在有兩種解法:
一、乖乖把輸贏判斷的條件一個一個手打,就可以放到外面那層
二、嘗試調整一整支程式的架構,讓條件判斷的迴圈可以繼續用

嘗試了幾下,看來第一種是唯一解法了 (哭
後來我把幾種不用重打的搬出去,測試果然成功了
https://ithelp.ithome.com.tw/upload/images/20231008/20111174DPlLJIDlWK.png

但要判斷是否全滿的地方一定要用迴圈,我目前還沒想到解決方法。

註:關於迴圈的部分,目前有一個假設
原本的迴圈: for (int p = 0; p < 3; p++)
若條件判斷時內層的break沒有用,可否改成p=4
跳出迴圈後加上
if(p=4)
{
break;
}
不過這麼做會需要global參數(在C#中好像叫public?),否則無法在迴圈外使用p
那麼for迴圈會需要回傳(return?)值出來嗎,還是只要初始值 public int p = 0 就可以解決了?

不過這樣要改的地方好多,目前有點沒時間弄,以後再來驗證這個假設好了。


上一篇
#Day23 做OOXX遊戲-1
下一篇
#Day25 做OOXX遊戲-3
系列文
突然冒出的自學計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言