c#写的五子棋程序,供学习WinForms的鼠标事件和使用GD
点击次数:16 次 发布日期:2008-11-26 23:34:22 作者:源代码网
|
源代码网推荐 源代码网推荐 程序使用了VS.NET环境编译,你的机器只要安装了.NET Framework SDK就可以运行。 源代码网推荐 源代码网推荐 源码和执行文件可以下载 源代码网推荐 源代码网推荐 http://www.wh-adv.com/download/five.zip 源代码网推荐 源代码网推荐 你不想下载也可读一下源码(图片资源等需要下载)。 源代码网推荐 源代码网推荐 namespace Leimom.FiveChess 源代码网推荐 源代码网推荐 { 源代码网推荐 源代码网推荐 using System; 源代码网推荐 源代码网推荐 using System.Drawing; 源代码网推荐 源代码网推荐 using System.Collections; 源代码网推荐 源代码网推荐 using System.ComponentModel; 源代码网推荐 源代码网推荐 using System.WinForms; 源代码网推荐 源代码网推荐 using System.Data; 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 源代码网推荐 /// Summary des cription 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; 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网供稿. |
