当前位置:编程学习 > C#/ASP.NET >>

c#写的五子棋程序,供学习WinForms的鼠标事件和使用GDI+,源码下载。

答案:前几天没事,写了一个小程序,可以用于学习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)

上一个:WebGain and HP Collaborate to Bridge Java and .NET Environments
下一个:《A Programmers Introduction to C#》 by Eric Gunnerson

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,