VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#写的五子棋程序

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  程序使用了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;
 }
 }
 }



相关教程