- TEL:131 7970 3111
-
慧網(wǎng)微信
- 掃描二維碼
- 關(guān)注邳州在線
-
手機(jī)網(wǎng)站
- 手機(jī)掃描二維碼
- 進(jìn)入手機(jī)站
網(wǎng)站地圖
付款方式
前幾天沒(méi)事,寫了一個(gè)小程序,可以用于學(xué)習(xí)C#。
程序使用了VS.NET環(huán)境編譯,你的機(jī)器只要安裝了.NET Framework SDK可以運(yùn)行。 源碼和執(zhí)行文件可以下載 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 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*,6+y*); 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 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[i] = 0; } this.Invalidate(); } private int GetRectID(Point p) { //get witch rectangle click for(int i = 0;i < 225;i++) { if(pointSquares[i].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*,5+y*),new Size(,))); } } private void DrawBlack(Graphics g,int nPos) { //draw Black chess int x,y; x = nPos%15; y = nPos/15; imageListbw.DrawImage(g,8+*x,5+*y,,,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+*x,5+*y,,,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 (, ); 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; } } } |
來(lái)源:http://edu.chinaz.com |