中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用C#實現一個五子棋游戲

發布時間:2021-01-11 14:11:01 來源:億速云 閱讀:189 作者:Leah 欄目:開發技術

使用C#實現一個五子棋游戲?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

private Image myImage;
 
/// <summary>
/// 初始化背景數組
/// int[x,y] x為行 y為列
/// </summary>
  private int[,] bgGround = new int[11, 11]; /*{
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0,0,0,0}
         };*/
  private int CurrentX;//當前bgGround的x行
 
  private int CurrentY;//當前bgGround的y列
 
  private bool IsWhite = false;//判斷白棋還是黑棋先
 
  private bool IsOver = false;//記錄游戲是否結束
 
  private void Form1_Load(object sender, EventArgs e)
  {
   myImage = new Bitmap(panel1.Width, panel1.Height);
  }
 
  protected override void OnPaint(PaintEventArgs e)
  {
   Draw();
   base.OnPaint(e);
  }
 
  /// <summary>
  /// 畫棋盤
  /// </summary>
  private void Draw()
  {
   Graphics g = Graphics.FromImage(myImage);
   g.Clear(this.BackColor);
   g.FillRectangle(Brushes.White,new Rectangle(new Point(10,10),new Size(400,400)));
   //循環次數應比背景bgGround行、列少1
   for (int i = 0; i < 10; i++)
   {
    for (int j = 0; j < 10; j++)
    {
     g.DrawRectangle(new Pen(Brushes.Black), i * 40 + 10, j * 40 + 10, 40, 40);
    }
   }
   
   Graphics gg = panel1.CreateGraphics();
   gg.DrawImage(myImage, 0, 0);
  }
 
  
 
  private void panel1_MouseClick(object sender, MouseEventArgs e)
  {
   if (IsOver)
   {
    return;
   }
   Graphics g = panel1.CreateGraphics();
   //設置當鼠標點擊坐標在某一落棋點坐標想x,y的+-10的范圍內即可落子
   int x = (e.X - 10) % 40;
   int y = (e.Y - 10) % 40;
   if (x > 30)
   {
    x = (e.X - 10) / 40 + 1;
   }
   else
   {
    x = (e.X - 10) / 40;
   }
   if (y > 30)
   {
    y = (e.Y - 10) / 40 + 1;
   }
   else
   {
    y = (e.Y - 10) / 40;
   }
   if (bgGround[x, y] == 0)
   {
    if (IsWhite)
    {
     DrawChess(g, x, y, new Pen(Brushes.White), Brushes.White, 1);
     IsWhite = false;
     JudgeResult(1);
    }
    else
    {
     DrawChess(g, x, y, new Pen(Brushes.Black), Brushes.Black, 2);
     IsWhite = true;
     JudgeResult(2);
    }
   }
  }
 
  /// <summary>
  /// 判斷輸贏
  /// </summary>
  /// <param name="flag">1為白棋 2為黑棋</param>
  private void JudgeResult(int flag)
  {
   int x = CurrentX;
   int y = CurrentY;
   int MinXNum = 0;
   int MaxXNum = 0;
   int count = 0;
   if (x > 4)
   {
    MinXNum = x - 4;
    if (x + 4 > 10)
    {
     MaxXNum = 10;
    }
    else
    {
     MaxXNum = x + 4;
    }
   }
   else
   {
    MaxXNum = x + 4;
   }
   int MinYNum = 0;
   int MaxYNum = 0;
   if (y > 4)
   {
    MinYNum = y - 4;
    if (y + 4 > 10)
    {
     MaxYNum = 10;
    }
    else
    {
     MaxYNum = y + 4;
    }
   }
   else
   {
    MaxYNum = y + 4;
   }
   #region //橫向
   for (int i = MinXNum; i < MaxXNum+1; i++)
   {
    if (bgGround[i, y] == flag)
    {
     count++;
     if (count > 4)
      goto Label;
    }
    else
    {
     count = 0;
     if (i > MaxXNum - 4)
      break;
    }
   }
   #endregion
   #region //豎向
   for (int i = MinYNum; i < MaxYNum+1; i++)
   {
    if (bgGround[x, i] == flag)
     count++;
    else
    {
     count = 0;
     if (i > MaxYNum - 4)
      break;
    }
    if (count > 4)
     goto Label;
   }
   #endregion
   //左斜
   for (int i = MinXNum; i < MaxXNum+1; i++)
   {
    if (CurrentX + CurrentY - i < 0)
     break;
    if (CurrentX + CurrentY - i <= 10)
    {
     if (bgGround[i, CurrentX + CurrentY - i] == flag)
     {
      count++;
     }
     else
     {
      count = 0;
      if (i > MaxYNum - 4)
       break;
     }
    }
    if (count > 4)
     goto Label;
   }
   //右斜
   for (int i = MinXNum; i < MaxXNum+1; i++)
   {
    if (i < CurrentX - CurrentY)
     break;
    if (i + CurrentY - CurrentX > 10)
     break;
    if (bgGround[i, i + CurrentY - CurrentX] == flag)
    {
     count++;
    }
    else
    {
     count = 0;
     if (i > MaxYNum - 4)
      break;
    }
    if (count > 4)
     goto Label;
   }
 
 
  Label:
   if (flag == 1 && count > 4)
   {
    IsOver = true;
    MessageBox.Show("白棋贏,游戲結束");
    return;
   }
   else if (flag == 2 && count > 4)
   {
    IsOver = true;
    MessageBox.Show("黑棋贏,游戲結束");
    return;
   }
   else
   {
    IsOver = false;
   }
  }
 
  /// <summary>
  /// 畫棋子
  /// </summary>
  /// <param name="g"></param>
  /// <param name="x">bgGround中x位置</param>
  /// <param name="y">bgGround中y位置</param>
  /// <param name="p">畫筆</param>
  /// <param name="brush">棋子顏色</param>
  /// <param name="flag">1為白棋 2為黑棋</param>
  private void DrawChess(Graphics g, int x, int y, Pen p, Brush brush, int flag)
  {
   CurrentX = x; CurrentY = y;
   bgGround[x, y] = flag;
   g.DrawEllipse(p, x * 40, y * 40, 20, 20);
   g.FillEllipse(brush, x * 40, y * 40, 20, 20);
 
  }
  ///btn_Chess_Click是黑棋先和白棋先按鈕的共同事件,設置白棋先button的tag值為1,黑棋先button的tag值為2
  /// <summary>
  /// 判斷哪個先下 設置button控件的tag值 
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btn_Chess_Click(object sender, EventArgs e)
  {
   Button btn = sender as Button;
   string tag = btn.Tag.ToString();
   if (tag.Equals("1"))//白棋先
   {
    IsWhite = true;
   }
   else//黑棋先 tag=2
   {
    IsWhite = false;
   }
  }
 
  /// <summary>
  /// 重置
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btn_reset_Click(object sender, EventArgs e)
  {
   IsOver = false;
   Draw();
   bgGround = new int[11, 11];
}

關于使用C#實現一個五子棋游戲問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肥乡县| 营口市| 禹州市| 永清县| 霸州市| 佛山市| 体育| 新昌县| 高雄县| 利川市| 普陀区| 望城县| 葫芦岛市| 儋州市| 青川县| 保山市| 清河县| 东阿县| 安图县| 前郭尔| 舒城县| 无棣县| 兴国县| 安远县| 吕梁市| 临邑县| 伊金霍洛旗| 鸡东县| 长葛市| 台前县| 林州市| 喀喇沁旗| 延安市| 团风县| 平乡县| 太康县| 永平县| 莱阳市| 乃东县| 伊春市| 婺源县|