c#写的五子棋程序 供学习WinForms的鼠标事件和使用GDI+

2016-01-29 13:50 14 1 收藏

c#写的五子棋程序 供学习WinForms的鼠标事件和使用GDI+,c#写的五子棋程序,供学习WinForms的鼠标事件和使用GDI+ ,五子棋

【 tulaoshi.com - ASP.NET 】

前几天没事,写了一个小程序,可以用于学习C#。

程序使用了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 description for Form1.

///

public class FiveForm : System.WinForms.Form

{

///<summary

/// Required designer variable.

///

private System.ComponentModel.Container components;

private System.WinForms.ImageList imageListbw;

//define the hot Rectangle

private Rectangle[] pointSquares;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

//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();

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

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+i14||y-i<0||y-i14)

{

continue;

}

else

{

if(chessTable[(y-i)*15+x+i] ==

来源:http://www.tulaoshi.com/n/20160129/1491711.html

延伸阅读
标签: 机械迷城
《机械迷城》五子棋七步解决电脑 *号为电脑先走的地方。无论他第一步走在哪里,只要按照下面数字顺序走即可:   3   12   4   2 11 ...
怎么用ios9备忘录玩五子棋   首先来看看ios9备忘录新功能有哪些: 用内建相机或从照片图库将照片来添加到备忘录中 创建实用的核对清单,轻点一下即可勾选已完成的项目 仅用单指速绘,即可记下闪现的想法 利用其它应用中的共享菜单直接将感兴趣的项目存储到备忘录中。 这里我们运用到的是 单指速绘  功...
在.net Framework的框架中有很多操作各种图形的函数,包括:点,线,面等等,构成的各种各样的丰富的图象。 在这里我主要是介绍在.Net Framework中GDI+下的TEXT(文本)的操作。首先以一个小小的程序开始: 建立一个Windows应用程序 在窗体上添加一个Button控件 和 一个PictureBox控件. 在Button控件的事件中添加,如下代码: SizeF textSize...
在程序运行中,产生事件的主体有很多,其中尤其以键盘和鼠标为最多。本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。 一.本文介绍的程序设计和运行的软件环境: (1).微软公司视窗2000服务器版 (2)..Net FrameWork SDK Beta 2 二.C#中处理鼠标相关的事件: 鼠标相关的事件大致有六种,分别是 ...
Common.cs: 代码如下: using System; using System.Collections.Generic; using System.Text; namespace DelegateAndEvent.App_Code { public class Common { //定义全局变量. public static string txt = ""; #region 定义方法 public string HelloCSharp(string name) { txt += "hello " + name;//这样做是为了看到委托可以执...

经验教程

644

收藏

77
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部