拼吾爱程序人生

首页 » .Net编程 » C# » c#写的五子棋程序
SystemPoster - 2007-8-9 9:11:00
程序使用了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.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%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 = 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%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;
  }
  }
  }

 您可能对 [C#] 的这些文章也感兴趣:

Visual C#2005中使用正则表达式
C#低级Windows API钩子拦截键盘输入
用C#实现基于TCP协议的网络通讯
防止winform假死新技术,visual studio 2005自带的控件
理解C# 3.0新特性之Extension方法浅议
关于C#中委托的学习
Visual C# .Net环境中编程实现浮动工具栏
C#中提供的VB不支持的新特性
C#2.0之partial
c#下的javascript写成有用的类
C# 网络资源
c#中动态装载dll
1
查看完整版本: c#写的五子棋程序
Modify by pin5i DZNT_ExpandPackage 2.1.3295 2007-2009 pin5i.com
 Total Unique Visitors: