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

程序|下载

前几天没事,写了一个小程序,可以用于学习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;
        }
    }
}

时间: 2025-01-19 10:08:04

c#写的五子棋程序,供学习WinForms的鼠标事件和使用GDI+,源码下载。的相关文章

blog程序新版本V2.0 Beta完成,提供V1.0全部源码下载_实用技巧

旧版本:v1.0 基本用vs2003和asp.net的Web控件完成,配合access数据库可实现web2.0的blog功能 现提供下载,注意事项: 1.源程序用于学习和研究asp.net之用,请不要用于商业. 2.本blog不提供v1.0版的技术支持!交流请email:iceok&163.com(&换@)给我 3.新版本现不提供源码,请不要索取! 4.谢谢大家的支持! 点击此处下载v1.0 新版本v2.0 改进v1.0版本,采用MS-Sql2000为数据库配合存储过程,当然access数

去年用c#写的五子棋程序

c#写的五子棋程序,供学习WinForms的鼠标事件和使用GDI+前几天没事(是去年的事了),写了一个小程序,可以用于学习C#.程序使用了VS.NET环境编译,你的机器只要安装了.NET Framework SDK就可以运行.源码和执行文件可以下载http://www.wh-adv.com/download/five.zip你不想下载也可读一下源码(图片资源等需要下载).namespace Leimom.FiveChess{using System;using System.Drawing;us

DotNet4应用程序打包工具-&gt;升级版【三】宿主程序分析+全部源码下载

索引 DotNet4应用程序打包工具->升级版[三]宿主程序分析+全部源码下载 DotNet4应用程序打包工具->升级版[二]安装工具分析 DotNet4应用程序打包工具(把DotNet4安装程序打包进你的应用程序:WINAPI开发,无dotNet环境也可顺利执行)[一]整体思路   废话少说 入口函数 入口函数是所有逻辑的集合体 int WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdSho

同志门好好学习C++吧,。Net的大部分源码是C++写的(大家可以下载来看看)

问题描述 同志门好好学习C++吧,.Net的大部分源码是C++写的(大家可以下载来看看) 解决方案 解决方案二:补充:这里下http://www.microsoft.com/downloads/thankyou.aspx?familyId=8c09fd61-3f26-4555-ae17-3121b4f51d4d&displayLang=en解决方案三:大家都学01吧,归根到底都是01解决方案四:jf解决方案五:能吃饭用筷子,叉子都一样....用手拿也所谓.....解决方案六:说出这些话只能说明l

动手写一个Remoting接口测试工具(附源码下载)

      基于.NET开发分布式系统,经常用到Remoting技术.在测试驱动开发流行的今天,如果针对分布式系统中的每个Remoting接口的每个方法都要写详细的测试脚本,无疑非常浪费时间.所以,我想写一个能自动测试remoting接口的小工具InterfaceTester.而且,当分布式系统中的某个remoting接口出现bug时,该小工具可以提交需要模拟的数据,以便在调试remoting服务的环境中,快速定位和解决bug. InterfaceTester运行起来后的效果如下图:      

Android实现软件列表的点击启动另外一个程序功能【附demo源码下载】_Android

本文实例讲述了Android实现软件列表的点击启动另外一个程序功能.分享给大家供大家参考,具体如下: 目前面世的许多软件中有这么一个功能:设备中安装了哪些软件,他们会以一个软件列表清单的形式向用户展示出来. 今天我们就来实现这一功能: 运行环境: motorola defy+ 系统2.3.6 主要 API : PackageInfo,PackageManager,LayoutInflater,ApplicationInfo PackageManger类,它的主要职责是管理应用程序包. 通过它,我

Android程序自动更新功能模块的实现方法【附完整demo源码下载】_Android

本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更新模块检测服务器上存放的版本号跟当前程序的版本号如果大于当前版本号,弹出更新对话框,如果用户选择更新,则显示当前更新状态,然后替换当前程序. 程序调用版本更新检测: private UpdateManager updateMan; private ProgressDialog updateProgr

Java集合学习(十六) HashSet详细介绍(源码解析)和使用示例

这一章,我们对HashSet进行学习. 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet. 第1部分 HashSet介绍 HashSet 简介 HashSet 是一个没有重复元素的集合. 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素. HashSet是非同步的.如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步.这通常是通过对自然封装该 set 的对象执行同步

Java集合学习(十二) TreeMap详细介绍(源码解析)和使用示例

这一章,我们对TreeMap进行学习. 第1部分 TreeMap介绍 TreeMap 简介 TreeMap 是一个有序的key-value集合,它是通过红黑树实现的. TreeMap继承于AbstractMap,所以它是一个Map,即一个key-value集合. TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法.比如返回有序的key集合. TreeMap 实现了Cloneable接口,意味着它能被克隆. TreeMap 实现了java.io.Serializabl