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

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人尊貴會員無限使用任何功能認識好友、聊天,分享生活趣事
人妻mega 無無修航海王cosplayjulia無碼 meg
gunner hsone399李杰明 wコンビニ璩美鳳七海那美juq 883

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

[繁]刀劍神域外傳 Gun

[繁]七龍珠大魔04-

艾妃 胸部太大的困擾

[繁]海賊王 魚人島篇

[簡]重啟人生的千金小

[繁]被逐出隊伍的治癒
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 10670|回復: 3
打印上一主題下一主題

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

帖子
931
積分
1546 點
潛水值
7873 米
跳轉到指定樓層
樓主
發表於 2010-10-19 12:44 PM|只看該作者|倒序瀏覽
我製作一個井字遊戲

想用一個重新開始鈕

不知道要輸入哪些指令

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

使用道具檢舉

Azurekite 該用戶已被刪除
頭香
發表於 2010-10-31 12:11 AM|只看該作者
按鈕按下後,將所有的函數,歸回初始值!
並將原先使用過的空間(放●與×的地方)
通通清除!

類似有點重跑Load

使用道具檢舉

je42004 該用戶已被刪除
3
發表於 2012-2-27 11:49 AM|只看該作者
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。
本帖最後由 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


...
瀏覽完整內容,請先 註冊登入會員
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

  高級幼兒生(30/200)

大石秀一郎

Rank: 1

帖子
65
積分
84 點
潛水值
8399 米
4
發表於 2020-12-1 07:29 PM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
本帖最後由 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.         }
複製代碼


...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

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

Powered by Discuz!

© Comsenz Inc.

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