技术开发 频道

c#写的五子棋程序


【IT168技术文档】

  前几天没事,写了一个小程序,可以用于学习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); ReSetGame(); return; } } else { isFive.Clear(); } } } isFive.Clear(); //scan x=-y have five
0
相关文章