找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
認識好友、聊天,分享生活趣事搞笑、娛樂、精彩的影片讓你看安全提問(回答) 和 永久尊貴會員 事宜
megamega無碼無修旬果高中按摩
堕ちるパ福爾むっち無fallen d鳳樓dv 1396千歲

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]嘆氣的亡靈想隱退

[繁]在地下城尋求邂逅

[繁]地。-關於地球的

[BD繁]名偵探柯南 劇

追狗狗結果從3樓摔落

[繁]嘆氣的亡靈想隱退
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 10836|回復: 3
打印上一主題下一主題

[討論]C# 井字遊戲[複製鏈接]

帖子
931
積分
1546 點
潛水值
7873 米
跳轉到指定樓層
樓主
發表於 2010-10-19 12:44 PM|只看該作者|正序瀏覽
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
我製作一個井字遊戲

想用一個重新開始鈕

不知道要輸入哪些指令

請各位大大幫幫忙~~
分享分享0收藏收藏0支持支持0

使用道具檢舉

  高級幼兒生(30/200)

大石秀一郎

Rank: 1

帖子
64
積分
84 點
潛水值
8409 米
4
發表於 2020-12-1 07:29 PM|只看該作者
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
本帖最後由 sango99001 於 2020-12-27 12:37 PM 編輯

這是我這陣子自己寫出來的井字遊戲,無ai,只有雙方玩家輪流下子,請高手多多指教
以下為我的程式碼
  1. //宣告物件陣列及變數
  2.         Label[,] lbl; int[] player = new int[2];
  3.         const int ranks = 3; //行列個數(依照物件數量更改)
  4.         const int line = 3; //連線子數(依需求更改)
  5.         //   最大需求子數        中間數  落子數
  6.         int need = line * 2 - 1, median, counter;
  7.         private void frmOOXX_Load(object sender, EventArgs e)
  8.         {
  9.             //中間數,Label物件陣列設定
  10.             median = need - line;
  11.             lbl = new Label[ranks, ranks]; player[0] = -1; counter = 1;
  12.             for (int x = 0; x < ranks; x++)
  13.             {
  14.                 for (int y = 0; y < ranks; y++)
  15.                 {
  16.                     lbl[x, y] = (Label)this.Controls.Find("label" + (x * ranks + y + 1).ToString(), true).FirstOrDefault();
  17.                 }
  18.             } button1_Click(sender, e);
  19.         }

  20.         private void label1_Click(object sender, EventArgs e)
  21.         {
  22.             //按下物件後的動作int row = -1, col = -1;
  23.             int row = -1, col = -1;
  24.             for (int x = 0; x < ranks; x++)
  25.             {
  26.                 for (int y = 0; y < ranks; y++)
  27.                 {
  28.                     if (lbl[x, y] == sender)
  29.                     {
  30.                         row = x; col = y;
  31.                         if (lbl[x, y].Text == "" && lblText.Text == "")
  32.                         {
  33.                             if (player[1] == 1) lbl[x, y].Text = "○";
  34.                             else lbl[x, y].Text = "●";

  35.                             counter = counter + 1; player[1] = player[1] * -1;
  36.                             c(row, col);
  37.                         }
  38.                     }
  39.                     if (row > -1 && col > -1) break;
  40.                 }
  41.                 if (row > -1 && col > -1) break;
  42.             }
  43.         }

  44.         private void button1_Click(object sender, EventArgs e)
  45.         {
  46.             //遊戲重置
  47.             if (counter > 0)
  48.             {
  49.                 player[0] = player[0] * -1; player[1] = player[0] * -1; counter = 0; lblText.Text = "";
  50.                 for (int x = 0; x < ranks; x++)
  51.                 {
  52.                     for (int y = 0; y < ranks; y++)
  53.                     {
  54.                         lbl[x, y].Text = "";
  55.                     }
  56.                 }
  57.             }
  58.         }

  59.         private void c(int row, int col)
  60.         {
  61.             //宣告變數
  62.             string[,] str = new string[4, need];
  63.             int x1 = line - 2, x2 = ranks - 1, x3 = x2 - x1;
  64.             bool[] t = new bool[4] { true, true, true, true };
  65.             
  66.             //進入判斷4角不足連子數的函式
  67.             for (int cols = 0; cols < x1; cols++)
  68.                 for (int rows = 0; rows == cols; rows++)
  69.                     for (int i = 0; i < 4; i++)
  70.                         b(row, col, rows, cols, i, x1, x2, x3, ref t[i]);

  71.             //依按下物件的行列編號,將對應的線段物件標記寫入陣列(判斷是否連線使用)
  72.             for (int c = 0; c < 4; c++)
  73.             {
  74.                 switch (c)
  75.                 {
  76.                     case 0: //橫線
  77.                         for (int i = 0; i < line; i++)
  78.                         {
  79.                             bool b1 = false, b2 = false;
  80.                             b1 = rc1(col, i);
  81.                             if (b1)
  82.                                 str[c, median - i] = lbl[row, col - i].Text;
  83.                             b2 = rc2(col, i);
  84.                             if (b2)
  85.                                 str[c, median + i] = lbl[row, col + i].Text;
  86.                         }
  87.                         break;
  88.                     case 1: //直線
  89.                         for (int i = 0; i < line; i++)
  90.                         {
  91.                             bool a1 = false, a2 = false;
  92.                             a1 = rc1(row, i);
  93.                             if (a1)
  94.                                 str[c, median - i] = lbl[row - i, col].Text;
  95.                             a2 = rc2(row, i);
  96.                             if (a2)
  97.                                 str[c, median + i] = lbl[row + i, col].Text;
  98.                         }
  99.                         break;
  100.                     case 2: //反斜線
  101.                         for (int i = 0; i < line; i++)
  102.                         {
  103.                             bool a1 = false, b1 = false, a2 = false, b2 = false;
  104.                             a1 = rc1(row, i); b1 = rc1(col, i);
  105.                             if (a1 && b1 && t[0])
  106.                                 str[c, median - i] = lbl[row - i, col - i].Text;
  107.                             a2 = rc2(row, i); b2 = rc2(col, i);
  108.                             if (a2 && b2 && t[1])
  109.                                 str[c, median + i] = lbl[row + i, col + i].Text;
  110.                         }
  111.                         break;
  112.                     case 3: //斜線
  113.                         for (int i = 0; i < line; i++)
  114.                         {
  115.                             bool a1 = false, b2 = false, a2 = false, b1 = false;
  116.                             a1 = rc1(row, i); b2 = rc2(col, i);
  117.                             if (a1 && b2 && t[2])
  118.                                 str[c, median - i] = lbl[row - i, col + i].Text;
  119.                             a2 = rc2(row, i); b1 = rc1(col, i);
  120.                             if (a2 && b1 && t[3])
  121.                                 str[c, median + i] = lbl[row + i, col - i].Text;
  122.                         }
  123.                         break;
  124.                 }
  125.                 result(ref str, c, str[c, median]); if (lblText.Text != "") break;
  126.             }

  127.         }

  128.         private void result(ref string[,] str, int s, string str1)
  129.         {
  130.             ////判斷是否連線或平手
  131.             for (int x = 0; x <= need - line; x++)
  132.             {
  133.                 int y = 0;
  134.                 for (int i = 0; i < line; i++) {
  135.                     if (str[s, i + x] != str1) continue;
  136.                     y++;
  137.                     if (y == line) lblText.Text = str1 + "勝";
  138.                 }
  139.             }
  140.             if (counter == Math.Pow(ranks, 2) && lblText.Text == "")
  141.                 lblText.Text = "平手";
  142.             if (lblText.Text == "")
  143.                 s++;
  144.         }
  145.         bool rc1(int c, int x)
  146.         {//遞減找所需的子
  147.             bool a = false;
  148.             if (c - x > -1) a = true;
  149.             return a;
  150.         }
  151.         bool rc2(int c, int x)
  152.         { //遞增找所需的子
  153.             bool a = false;
  154.             if (c + x < ranks) a = true;
  155.             return a;
  156.         }

  157.         void b(int row, int col, int rows, int cols, int i, int x1, int x2, int x3, ref bool t)
  158.         { //排除連子數不足的線段
  159.             bool[] a = new bool[4] { false, false, false, false };
  160.             switch (i)
  161.             {
  162.                 case 0:
  163.                     a = new bool[4] { rl(row, x1, rows), rl(col, x2, cols), rl(row, x2, rows), rl(col, x1, cols) };
  164.                     break;
  165.                 case 1:
  166.                     a = new bool[4] { lr(row, 0, rows), lr(col, x3, cols), lr(row, x3, rows), lr(col, 0, cols) };
  167.                     break;
  168.                 case 2:
  169.                     a = new bool[4] { rl(row, x1, rows), lr(col, 0, cols), rl(row, x2, rows), lr(col, x3, cols) };
  170.                     break;
  171.                 case 3:
  172.                     a = new bool[4] { lr(row, 0, rows), rl(col, x1, cols), lr(row, x3, rows), rl(col, x2, cols) };
  173.                     break;
  174.             }
  175.             if ((a[0] && a[1]) | (a[2] && a[3])) t = false;
  176.         }
  177.         
  178.         bool rl (int c, int x, int d)
  179.         { //遞減判斷左右上邊界
  180.             bool a = false;
  181.             if (c == x - d) a = true;
  182.             return a;
  183.         }
  184.         bool lr(int c, int x, int d)
  185.         { //遞增判斷右或下邊界
  186.             bool a = false;
  187.             if (c == x + d) a = true;
  188.             return a;
  189.         }
複製代碼


...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊

使用道具檢舉

je42004 該用戶已被刪除
3
發表於 2012-2-27 11:49 AM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
本帖最後由 arthurliuliu 於 2012-2-27 11:54 AM 編輯
  1. public static void flush(int[] Arr, int[] ArrSwap, int[] Defaultvalues)     
  2.         {
  3.             for (int i = 0; i < Defaultvalues[0]; i++)
  4.             {
  5.                 Arr[i] = 0;
  6.                 ArrSwap[i] = 0;
  7.             }
  8.             Defaultvalues[1] = 4;
  9.             Defaultvalues[2] = Defaultvalues[1];
  10.             Defaultvalues[3] = 1;
  11.             Arr[Defaultvalues[1]] = 1;
  12.         }
複製代碼
code沒包,板主代為編輯。
arthurliuliu


...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Azurekite 該用戶已被刪除
頭香
發表於 2010-10-31 12:11 AM|只看該作者
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
按鈕按下後,將所有的函數,歸回初始值!
並將原先使用過的空間(放●與×的地方)
通通清除!

類似有點重跑Load
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部