当前位置:
首页 > 编程开发 > Objective-C编程 >
-
c#写的五子棋程序
作者: xumei | ||
前几天没事,写了一个小程序,可以用于学习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 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*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; } } } |
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程