c#寫的五子棋程式,供學習WinForms的滑鼠事件和使用GDI+,源碼下載。

來源:互聯網
上載者:User
程式|下載 前幾天沒事,寫了一個小程式,可以用於學習C#。
程式使用了VS.NET環境編譯,你的機器只要安裝了.NET Framework SDK就可以運行。
源碼和執行檔案可以下載
你不想下載也可讀一下源碼(圖片資源等需要下載)。
namespace Leimom.FiveChess
{
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.WinForms;
    using System.Data;
    /// <summary>
    ///    Summary description for Form1.
    /// </summary>
    public class FiveForm : System.WinForms.Form
    {
        /// <summary>
        ///    Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components;
  private System.WinForms.ImageList imageListbw;
  //define the hot Rectangle
  private Rectangle[] pointSquares;
  //chess information
  private int[] chessTable;
  private int nextTurn;
  private const int bTurn = 1;
  private const int wTurn = 2;
  private Stack chessIndex;
  public FiveForm()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
   chessIndex = new Stack();
   nextTurn = bTurn;
   chessTable = new int[225];
   pointSquares = new Rectangle[225];
   Size size = new Size(18,18);
   int x = 0;
   int y = 0;
   for(int i = 0;i < 225;i++)
   {
    x = i%15;
    y = i/15;
    pointSquares[i].Size = size;
    pointSquares[i].Offset(9+x*20,6+y*20);
    chessTable[i] = 0;
   }
  }

  protected override void OnPaint(PaintEventArgs e)
  {
   //you may paint
            Graphics g = e.Graphics;
  }
  protected override void OnMouseDown(System.WinForms.MouseEventArgs e)
  {
   switch( e.Button )
   {
    //take left button down
    case MouseButtons.Left:
     OnLButtonDown(new Point(e.X,e.Y));
     break;
    //take right button down
    case MouseButtons.Right:
     OnRButtonDown(new Point(e.X,e.Y));
     break;
   }
   base.OnMouseDown(e);
  }
  private void OnLButtonDown(Point p)
  {
   int nPos = GetRectID(p);
   //click hot Rectangle witch have no chess
   if(nPos != -1&&chessTable[nPos] == 0)
   {
    Graphics g = this.CreateGraphics();
    if(nextTurn==bTurn)
    {
     //draw white chess
     DrawBlack(g,nPos);
     chessTable[nPos] = bTurn;
     nextTurn = wTurn;
     chessIndex.Push(bTurn);
     chessIndex.Push(nPos);
    }
    else
    {
     //draw Black chess
     DrawWhite(g,nPos);
     chessTable[nPos] = wTurn;
     nextTurn = bTurn;
     chessIndex.Push(wTurn);
     chessIndex.Push(nPos);
    }
    g.Dispose();
    //witch win
    CheckGameResult(nPos,nextTurn);
   }  
  }
  private void CheckGameResult(int nPos,int nextTurn)
  {
   //witch win
   Stack isFive = new Stack();
   int thisTurn = (nextTurn == bTurn)?wTurn:bTurn;
   int x = nPos%15;
   int y = nPos/15;
   //scan x have five
   for(int i=0;i<15;i++)
   {
    if(chessTable[y*15+i] == thisTurn)
    {
     isFive.Push(y*15+i);
     if(isFive.Count == 5)
     {
      MessageBox.Show("Game Over","Notes",MessageBox.OK);
      ReSetGame();
      return;
     }
    }
    else
    {
     isFive.Clear();
    }
   }
   isFive.Clear();
   //scan y have five
   for(int i=0;i<15;i++)
   {
    if(chessTable[i*15+x] == thisTurn)
    {
     isFive.Push(i*15+x);
     if(isFive.Count == 5)
     {
      MessageBox.Show("Game Over","Notes",MessageBox.OK);
      ReSetGame();
      return;
     }
    }
    else
    {
     isFive.Clear();
    }
   }
   isFive.Clear();
   //scan x=y have five
   for(int i=-14;i<15;i++)
   {
    if(x+i<0||x+i>14||y-i<0||y-i>14)
    {
     continue;
    }
    else
    {
     if(chessTable[(y-i)*15+x+i] == thisTurn)
     {
      isFive.Push((y-i)*15+x+i);
      if(isFive.Count == 5)
      {
       MessageBox.Show("Game Over","Notes",MessageBox.OK);
       ReSetGame();
       return;
      }
     }
     else
     {
      isFive.Clear();
     }
    }
   }
   isFive.Clear();
   //scan x=-y have five
   for(int i=-14;i<15;i++)
   {
    if(x+i<0||x+i>14||y+i<0||y+i>14)
    {
     continue;
    }
    else
    {
     if(chessTable[(y+i)*15+x+i] == thisTurn)
     {
      isFive.Push((y+i)*15+x+i);
      if(isFive.Count == 5)
      {
       MessageBox.Show("Game Over","Notes",MessageBox.OK);
       ReSetGame();
       return;
      }
     }
     else
     {
      isFive.Clear();
     }
    }
   }
   isFive.Clear();
  }
  private void ReSetGame()
  {
   //reset game
   nextTurn = bTurn;
   for(int i=0;i<225;i++)
   {
    chessTable[i] = 0;
   }
   this.Invalidate();
  }
  private int GetRectID(Point p)
  {
   //get witch rectangle click
   for(int i = 0;i < 225;i++)
   {
    if(pointSquares[i].Contains( p ))
    {
     return i;
    }
   }
   return -1;
  }
  private void OnRButtonDown(Point p)
  {
   //regret chess
   int nPos,x,y;
   if(chessIndex.Count != 0)
   {
    nPos = (int)chessIndex.Pop();
    x = nPos%15;
    y = nPos/15;
    chessTable[nPos] = 0;
    nextTurn = (int)chessIndex.Pop();
    this.Invalidate(new Rectangle(new Point(8+x*20,5+y*20),new Size(20,20)));
   }
  }
  private void DrawBlack(Graphics g,int nPos)
  {
   //draw Black chess
   int x,y;
   x = nPos%15;
   y = nPos/15;
   imageListbw.DrawImage(g,8+20*x,5+20*y,20,20,0,0);
  }
  private void DrawWhite(Graphics g,int nPos)
  {
   //draw White chess
   int x,y;
   x = nPos%15;
   y = nPos/15;
   imageListbw.DrawImage(g,8+20*x,5+20*y,20,20,0,1);
  }
        /// <summary>
        ///    Clean up any resources being used.
        /// </summary>
        public override void Dispose()
        {
            base.Dispose();
            components.Dispose();
        }
        /// <summary>
        ///    Required method for Designer support - do not modify
        ///    the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
  {
   System.Resources.ResourceManager resources = new System.Resources.ResourceManager (typeof(FiveForm));
   this.components = new System.ComponentModel.Container ();
   this.imageListbw = new System.WinForms.ImageList ();
   //@this.TrayHeight = 90;
   //@this.TrayLargeIcon = false;
   //@this.TrayAutoArrange = true;
   //@imageListbw.SetLocation (new System.Drawing.Point (7, 7));
   imageListbw.ImageSize = new System.Drawing.Size (20, 20);
   imageListbw.ImageStream = (System.WinForms.ImageListStreamer) resources.GetObject ("imageListbw.ImageStream");
   imageListbw.ColorDepth = System.WinForms.ColorDepth.Depth8Bit;
   imageListbw.TransparentColor = System.Drawing.Color.Yellow;
   this.Text = "FiveForm";
   this.MaximizeBox = false;
   this.AutoScaleBaseSize = new System.Drawing.Size (6, 14);
   this.BorderStyle = System.WinForms.FormBorderStyle.FixedSingle;
   this.BackgroundImage = (System.Drawing.Image) resources.GetObject ("$this.BackgroundImage");
   this.TransparencyKey = System.Drawing.Color.White;
   this.ClientSize = new System.Drawing.Size (314, 311);
  }

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        public static int Main(string[] args)
        {
            Application.Run(new FiveForm());
   return 0;
        }
    }
}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.