C# winform 简单五子棋 200行代码实现双人对战

1、需求

基于C# winform用200行代码实现简易五子棋双人对战,支持悔棋,需要的知识有C# winform界面,C#,以及几张素材图片。

2、界面

界面设计如图1所示,背影图是用Graphics自己画的,但在生成棋子图片的时候,消失了,知道的同学告诉我一下谢谢,因此自己截图做背影,把图片导入项目得到背景图,设想是可以有双人,人机,联网三个模式,后续会加入。

C# winform 简单五子棋 200行代码实现双人对战_第1张图片

图1

3、算法描述

由于只是双人对战,因此算法就是简单判断是否赢棋,五子棋规则是横竖斜三个方向有一个方向能有连续五个棋子即赢棋,所以分别判断感人方向,这里采用递归判断,思想非常简单。

(1)遍历每个棋子

(2)斜方向找相同棋子,如果找到就继续找,找到五个即赢棋,游戏结束转(5)

(3)横方向找相同棋子,如果找到就继续找,找到五个即赢棋,游戏结束转(5)

(4)竖方向找相同棋子,如果找到就继续找,找到五个即赢棋,游戏结束转(5)

(5)点击确实重新初始化游戏数据

4、代码实现

2中提到使用Graphics画棋盘,但生成棋子后却不能消失了,因此使用的画好后的截图,给出的代码有画棋盘的(draw_chess_grid函数),但在程序中没有调用。检测棋盘赢局用的是递归,为了思路清楚,把每个方向分开写成一个函数,在代码中有注释。详细代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsAppAnimalRegonize
{
    public partial class FormChess : Form
    {
        class Pos
        {
            public int X { get; set; }
            public int Y { get; set; }
            public bool Have_chess { get; set; }
            public int Type { get; set; }
            public Pos(int X, int Y, bool Have_chess, int Type)
            {
                this.X = X;
                this.Y = Y;
                this.Have_chess = Have_chess;
                this.Type = Type;
            }
        }
        private List null_chess_pos_list;//棋子位置序列
        private Stack

你可能感兴趣的:(C#)