c#写的五子棋程序

c#写的五子棋程序


Author: xumei  &;nbspFrom:Internet


                前几天没事,写了一个小程序,可以用于学习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;
      y = i/15;
      pointSquares.Size = size;
      pointSquares.Offset(9 x*20,6 y*20);
      chessTable = 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;
    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 = 0;
    }
    this.Invalidate();
    }
    private int GetRectID(Point p)
    {
    //get witch rectangle click
    for(int i = 0;i < 225;i  )
    {
      if(pointSquares.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;
      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;
    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;
    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;
          }
      }
  }
    (2005-7-14:02:22)
 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 警告:持续变种木马正在发起农历新年攻势!
 您可能对 [C#] 的这些文章也感兴趣:
C#实现所有经典排序算法
使用C#的BitmapData编程实例
用C#编写网络电话
C# 实现 RDLC 自定义报表
C#实现Web代理服务程序
简易C#入门教程
C#中的“Squiggles”特性
C#数字图像探索系列(1)--伪渐变效果原理及应用初级篇
C#数字图像探索系列(2)--渐变二
如何在MFC中调用C#编写的DLL
C# wm6通过udp协议和pc通讯
异步网络编程之图片批量抓取下载(C#)