谁能告诉我怎么用C#做五子棋啊,只要实现双人对战就可以了。尽量详细点,谢谢啦

解决方案 »

  1.   

    看这里http://www.webpc8.com/Article/vcnet/game/200604/Article_7450.html
      

  2.   

    前几天没事,写了一个小程序,可以用于学习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 description for Form1.
    /// 
    public class FiveForm : System.WinForms.Form
    {
    /// 
    /// Required designer variable.
    /// 
    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);
    }
    /// 
    /// Clean up any resources being used.
    /// 
    public override void Dispose()
    {
    base.Dispose();
    components.Dispose();
    }
    /// 
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// 
    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);
    }/// 
    /// The main entry point for the application.
    /// 
    public static int Main(string[] args) 
    {
    Application.Run(new FiveForm());
    return 0;
    }
    }
      

  3.   

    要实现双人联机对战还是比较麻烦的。去微软webCast下载<使用.NET Remoting 建立分布式应用程序>系列讲座,一共6讲,最后2将就是实现五子棋双人对战的思路和方法。
      

  4.   

    改了一下 zhangzengping(张增平) 的代码。:(
    不好意思。加了棋盘。改了一点棋子的坐标。只要在imagelist 里面加入两张图片就可以运行了。
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;namespace FiveChess
    {
    /// 
    /// Summary description for Form1.
    /// 
    public class FiveForm : System.Windows .Forms .Form 
    {
    private System.ComponentModel.IContainer components;
    private System.Windows .Forms .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(20,20);
    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(10+x*20,10+y*20);
    chessTable[i] = 0;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
    //you may paint
    Graphics g = e.Graphics;
    DrawTable(g);
    }
    protected override void OnMouseDown(System.Windows .Forms .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 DrawTable(Graphics g)
    {
    // |
    for(int i = 1;i<16;i++)
    {
    g.DrawLine(new Pen(new SolidBrush(Color.Red),1),i*20,20,i*20,300); } // --
    for(int j = 1;j<16;j++)
    {
    g.DrawLine(new Pen(new SolidBrush(Color.Red),1),20,j*20,300,j*20); }
    } 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");
    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");
    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");
    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");
    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.Draw(g,10+20*x,10+20*y,20,20,0); }
    private void DrawWhite(Graphics g,int nPos)
    {
    //draw White chess
    int x,y;
    x = nPos%15;
    y = nPos/15;
    imageListbw.Draw(g,10+20*x,10+20*y,20,20,1);
    }
    /// 
    /// Clean up any resources being used.
    /// 
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null) 
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    }
    /// 
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// 
    private void InitializeComponent()
    {
    this.components = new System.ComponentModel.Container();
    System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FiveForm));
    this.imageListbw = new System.Windows.Forms.ImageList(this.components);
    // 
    // imageListbw
    // 
    this.imageListbw.ImageSize = new System.Drawing.Size(20, 20);
    this.imageListbw.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListbw.ImageStream")));
    this.imageListbw.TransparentColor = System.Drawing.Color.Yellow;
    // 
    // FiveForm
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.ClientSize = new System.Drawing.Size(370, 357);
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
    this.MaximizeBox = false;
    this.Name = "FiveForm";
    this.Text = "FiveForm";
    this.TransparencyKey = System.Drawing.Color.White; } /// 
    /// The main entry point for the application.
    /// 
    public static int Main(string[] args) 
    {
    Application.Run(new FiveForm());
    return 0;
    } }