每日励志

现在我们回归正题,这次我们要做的是五子棋,所谓五子棋,也就是在一个棋盘内,分为白子和黑子,若有一方(且没有阻挡下)上下左右斜着歪着能凑到5个子,就算他赢了,效果图如下↓

在此,我先讲讲具体思路

1.先画一个10*10的格子(最正规的格子数量)

2.有了图之后,监测若鼠标按下,判断在哪个线交叉范围间,接着在那个线交叉的范围间画一个小圆圈(有艺术细胞的可以换成菱形等,这里将通用圆形)

3.判断上下左右斜着的棋子能不能凑到5个以上,并且中间不能有不同颜色的棋子隔着,赢的话就结束游戏

在此之前先导入包

using System.Windows.Forms;
using System.Threading;

接下来开始正式写代码

1.创建一个项目,把界面制作成这个样子的(上面菜单是menuStrip)

 设置大小为700, 618(十分吉利),颜色随便,我比较喜欢indianRed,文件方面下次再讲,先把基础功能完善

这时双击一下“开始游戏”选项,进入编辑阶段

2.在空间下添加全局共有变量

        public bool startgame { get; set; }//是否开始游戏public bool ones { get; set; }//true为白方,false为黑方string[] steps = new string[100];//棋盘列表

3.在开始游戏(如下图)下方添加代码

            ones = true;Pen sc = new Pen(Color.Brown, 2);Graphics g = this.CreateGraphics();g.Clear(Color.IndianRed);//清理棋盘g.DrawRectangle(sc, 40, 40, this.Width - 130, this.Height - 110);int start = ((this.Width - 100) % 11) / 2;int final = ((this.Height - 100) % 11) / 2;for (int i = 0; i < 10; i++)//竖着的线{g.DrawLine(sc, 60 + start + 40 * i, 40, 60 + start + 40 * i, this.Height - 70);//绘制棋盘,每条线之间格40个像素Thread.Sleep(10);}for (int i = 0; i < 10; i++)//横着的线{g.DrawLine(sc, 40, 60 + final + 40 * i, 438, 60 + final + 40 * i);Thread.Sleep(10);}//string[] steps = new string[100];for (int i = 0; i < 10; i++)//行{for (int j = 0; j < 10; j++)//列{steps[i * 10 + j] = "0";}}ones = true;startgame = true;

这里是将每一个格子以60个像素分开,最终可以得到一个10*10的棋盘,如图所示

 4.在加载方面添加代码如下

        private void Form1_Load(object sender, EventArgs e){startgame = false;this.MaximizeBox = false;this.MinimizeBox = false;this.MouseClick += Form1_MouseClick;}

这里先将开始游戏设置为false,再关闭放大或者缩小,并添加鼠标按下这一事件(刚添加时可能会报错,但后面把这个实例化之后就没有了)

5.添加判断选项

判断选项其实很简单,横着就是同一行下来,左看看又看看,竖着,斜着(有两种)都是如此,但是同时也要谨防列表超出,所以也要给它设置一个条件,让他在四个角落时不能判断。原理图如下

0   1   2   3   4   5   6   7   8   9

10 11 12 13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29

30 31 32 33 34 35 36 37 38 39

……………………………………

相信聪明的你早已发现规律,也就是判断上下左右的规律了,那么,把这盘数字作为下标放进列表里,在往这个列表里填内容再判断即可大功告成

代码如下(把这些代码放进去即可)

竖着判断

白方:

public bool white_judge_vertical(int i, int j)//白方竖着的判断{int num = 1;if (j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0){string c = steps[(j - k) * 10 + i];if (c != "1"){break;}else{num += 1;}}else{break;}}}if (j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[(j + k) * 10 + i];if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}

黑方:

public bool black_judge_vertical(int i, int j)//黑方竖着的判断{int num = 1;if (j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0){string c = steps[(j - k) * 10 + i];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[(j + k) * 10 + i];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}

横着判断:

白方:

public bool white_judge_transverse(int i, int j)//白方横着的判断{int num = 1;if (i != 0){for (int k = 1; k < 5; k++){if (i - k >= 0){string c = steps[j * 10 + i - k];//原来的行数保持不变,列数每个-1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (i != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[j * 10 + i + k];//原来的行数保持不变,列数每个+1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}

黑方:

public bool black_judge_transverse(int i, int j)//黑方横着的判断{int num = 1;if (i != 0){for (int k = 1; k < 5; k++){if (j - k >= 0){string c = steps[j * 10 + i - k];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (i != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[j * 10 + i + k];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}

斜着判断

白方:

public bool white_judge_oblique(int i, int j)//白方斜着的判断{int num = 1;//同加同减if (i != 0 && j != 0){for (int k = 1; k < 5; k++){if (i - k >= 0 && j - k >= 0){string c = steps[(j - k) * 10 + i - k];//行数-1,省下来的列数每个-1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (i != 9 && j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9 && i+k<=9){string c = steps[(j + k) * 10 + i + k];//行数+1,省下来的列数每个+1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;}//不同加不同减if (i != 0 && j != 9){for (int k = 1; k < 5; k++){if (i + k <= 9 && j - k >= 0){string c = steps[(j + k) * 10 + i - k];//行数+1,列数-1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (i != 9 || j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0 && i+k<=9){string c = steps[(j - k) * 10 + i + k];//行数-1,列数+1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;return false;}}

黑方:

public bool black_judge_oblique(int i,int j)//黑方斜着的判断{{int num = 1;//同加同减if (i != 0 && j != 0){for (int k = 1; k < 5; k++){if (i - k >= 0 && j - k >= 0){string c = steps[(j - k) * 10 + i - k];//行数-1,省下来的列数每个-1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (i != 9 && j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9 && i + k <= 9){string c = steps[(j + k) * 10 + i + k];//行数+1,省下来的列数每个+1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;}//不同加不同减if (i != 0 && j != 9){for (int k = 1; k < 5; k++){if (i + k <= 9 && j - k >= 0){string c = steps[(j + k) * 10 + i - k];//行数+1,列数-1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (i != 9 || j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0 && i + k <= 9){string c = steps[(j - k) * 10 + i + k];//行数-1,列数+1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;return false;}}}

这就三个判断了,接下来只需要写入鼠标按下的事件即可!

        private void Form1_MouseClick(object sender, MouseEventArgs e){if (startgame){string tiqv = string.Empty;//辅助,看过程更明白int num = 0;//连的个数Pen Wh = new Pen(Color.White, 20);Pen BL = new Pen(Color.Black, 20);Graphics g = this.CreateGraphics();Point formPoint = this.PointToClient(Control.MousePosition);int x = formPoint.X;int y = formPoint.Y;//i为列,j为行for (int i = 0; i < 10; i++){if (x < 75 + 40 * i && x > 55 + 40 * i)//判断是在那一列上{for (int j = 0; j < 10; j++){if (y < 70 + 40 * j && y > 50 + 40 * j)//判断是在那一行上{tiqv = steps[j * 10 + i];if (tiqv == "0"){if (ones){g.DrawEllipse(Wh, 59 + 40 * i, 54 + 40 * j, 10, 10);ones = false;steps[j * 10 + i] = "1";//设置为白,代表这里是白下过的//竖着有五个子的胜利判断bool win = white_judge_vertical(i, j);if (win){MessageBox.Show("白方赢了!");}else{win = white_judge_transverse(i, j);if (win){MessageBox.Show("白方赢了!");}else{win = white_judge_oblique(i, j);if (win){MessageBox.Show("白方赢了!");}}}}else{g.DrawEllipse(BL, 59 + 40 * i, 54 + 40 * j, 10, 10);ones = true;steps[j * 10 + i] = "2";//设置为黑,代表这里是黑下过的//竖着有五个子的胜利判断bool win = black_judge_vertical(i, j);if (win){MessageBox.Show("黑方赢了!");}else{win = black_judge_transverse(i, j);if (win){MessageBox.Show("黑方赢了!");}else{win = black_judge_oblique(i, j);if (win){MessageBox.Show("黑方赢了!");}}}}break;}else{MessageBox.Show("你不可以在别人或自己下过的地方在下一次!");}}}}}}}

这样一个五子棋便制作完成

所有代码总结如下

        private void Form1_Load(object sender, EventArgs e){startgame = false;this.MaximizeBox = false;this.MinimizeBox = false;this.MouseClick += Form1_MouseClick;}private void Form1_MouseClick(object sender, MouseEventArgs e){if (startgame){string tiqv = string.Empty;//辅助,看过程更明白int num = 0;//连的个数Pen Wh = new Pen(Color.White, 20);Pen BL = new Pen(Color.Black, 20);Graphics g = this.CreateGraphics();Point formPoint = this.PointToClient(Control.MousePosition);int x = formPoint.X;int y = formPoint.Y;//i为列,j为行for (int i = 0; i < 10; i++){if (x < 75 + 40 * i && x > 55 + 40 * i)//判断是在那一列上{for (int j = 0; j < 10; j++){if (y < 70 + 40 * j && y > 50 + 40 * j)//判断是在那一行上{tiqv = steps[j * 10 + i];if (tiqv == "0"){if (ones){g.DrawEllipse(Wh, 59 + 40 * i, 54 + 40 * j, 10, 10);ones = false;steps[j * 10 + i] = "1";//设置为白,代表这里是白下过的//竖着有五个子的胜利判断bool win = white_judge_vertical(i, j);if (win){MessageBox.Show("白方赢了!");}else{win = white_judge_transverse(i, j);if (win){MessageBox.Show("白方赢了!");}else{win = white_judge_oblique(i, j);if (win){MessageBox.Show("白方赢了!");}}}}else{g.DrawEllipse(BL, 59 + 40 * i, 54 + 40 * j, 10, 10);ones = true;steps[j * 10 + i] = "2";//设置为黑,代表这里是黑下过的//竖着有五个子的胜利判断bool win = black_judge_vertical(i, j);if (win){MessageBox.Show("黑方赢了!");}else{win = black_judge_transverse(i, j);if (win){MessageBox.Show("黑方赢了!");}else{win = black_judge_oblique(i, j);if (win){MessageBox.Show("黑方赢了!");}}}}break;}else{MessageBox.Show("你不可以在别人或自己下过的地方在下一次!");}}}}}}}//主程序变量值public bool startgame { get; set; }//是否开始游戏public bool ones { get; set; }//true为白方,false为黑方string[] steps = new string[100];//棋盘列表private void 开始游戏ToolStripMenuItem_Click(object sender, EventArgs e){ones = true;Pen sc = new Pen(Color.Brown, 2);Graphics g = this.CreateGraphics();g.Clear(Color.IndianRed);//清理棋盘g.DrawRectangle(sc, 40, 40, this.Width - 130, this.Height - 110);int start = ((this.Width - 100) % 11) / 2;int final = ((this.Height - 100) % 11) / 2;for (int i = 0; i < 10; i++)//竖着的线{g.DrawLine(sc, 60 + start + 40 * i, 40, 60 + start + 40 * i, this.Height - 70);//绘制棋盘,每条线之间格40个像素Thread.Sleep(10);}for (int i = 0; i < 10; i++)//横着的线{g.DrawLine(sc, 40, 60 + final + 40 * i, 438, 60 + final + 40 * i);Thread.Sleep(10);}//string[] steps = new string[100];for (int i = 0; i < 10; i++)//行{for (int j = 0; j < 10; j++)//列{steps[i * 10 + j] = "0";}}ones = true;startgame = true;}public bool white_judge_vertical(int i, int j)//白方竖着的判断{int num = 1;if (j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0){string c = steps[(j - k) * 10 + i];if (c != "1"){break;}else{num += 1;}}else{break;}}}if (j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[(j + k) * 10 + i];if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}public bool black_judge_vertical(int i, int j)//黑方竖着的判断{int num = 1;if (j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0){string c = steps[(j - k) * 10 + i];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[(j + k) * 10 + i];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}public bool white_judge_transverse(int i, int j)//白方横着的判断{int num = 1;if (i != 0){for (int k = 1; k < 5; k++){if (i - k >= 0){string c = steps[j * 10 + i - k];//原来的行数保持不变,列数每个-1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (i != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[j * 10 + i + k];//原来的行数保持不变,列数每个+1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}public bool black_judge_transverse(int i, int j)//黑方横着的判断{int num = 1;if (i != 0){for (int k = 1; k < 5; k++){if (j - k >= 0){string c = steps[j * 10 + i - k];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (i != 9){for (int k = 1; k < 5; k++){if (j + k <= 9){string c = steps[j * 10 + i + k];if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{return false;}}public bool white_judge_oblique(int i, int j)//白方斜着的判断{int num = 1;//同加同减if (i != 0 && j != 0){for (int k = 1; k < 5; k++){if (i - k >= 0 && j - k >= 0){string c = steps[(j - k) * 10 + i - k];//行数-1,省下来的列数每个-1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (i != 9 && j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9 && i+k<=9){string c = steps[(j + k) * 10 + i + k];//行数+1,省下来的列数每个+1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;}//不同加不同减if (i != 0 && j != 9){for (int k = 1; k < 5; k++){if (i + k <= 9 && j - k >= 0){string c = steps[(j + k) * 10 + i - k];//行数+1,列数-1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (i != 9 || j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0 && i+k<=9){string c = steps[(j - k) * 10 + i + k];//行数-1,列数+1if (c != "1"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;return false;}}public bool black_judge_oblique(int i,int j)//黑方斜着的判断{{int num = 1;//同加同减if (i != 0 && j != 0){for (int k = 1; k < 5; k++){if (i - k >= 0 && j - k >= 0){string c = steps[(j - k) * 10 + i - k];//行数-1,省下来的列数每个-1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (i != 9 && j != 9){for (int k = 1; k < 5; k++){if (j + k <= 9 && i + k <= 9){string c = steps[(j + k) * 10 + i + k];//行数+1,省下来的列数每个+1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;}//不同加不同减if (i != 0 && j != 9){for (int k = 1; k < 5; k++){if (i + k <= 9 && j - k >= 0){string c = steps[(j + k) * 10 + i - k];//行数+1,列数-1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (i != 9 || j != 0){for (int k = 1; k < 5; k++){if (j - k >= 0 && i + k <= 9){string c = steps[(j - k) * 10 + i + k];//行数-1,列数+1if (c != "2"){break;}else{num += 1;}}else{break;}}}if (num >= 5){startgame = false;return true;}else{num = 1;return false;}}}

这便是基础版所有过程!

若有什么建议或者问题欢迎在下方评论区留言

谢谢

c#winform——Gobang五子棋简易版双人对战制作(基本结构+代码)相关推荐

  1. 缺氧游戏 不给计算机加水,缺氧高压氧简易版 教你最简单的结构

    缺氧高压氧可以限定氢气于狭小空间,既可以保证氢气不外出,也可以轻松累计氢气发电,经过多次版本的更新,这种黑科技一直保留至今,可是高压氧毕竟属于黑科技,制作起来难度不低,接下来小编用图文来教会大家简易版 ...

  2. Java简易版的对战小游戏(主题是三国类游戏对战)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 提示:今天写一个简易版的Java对战小游戏(主题是三国类游戏对战): 需要先写一个Person类(代表人),然后写一个 ...

  3. matlab小游戏,MATLAB实现五子棋游戏(双人对战、可悔棋)

    本文实例为大家分享了MATLAB实现五子棋游戏的具体代码,供大家参考,具体内容如下 程序介绍: 1.此游戏只可用于双人对战. 2.棋盘颜色.棋盘格数.棋子颜色等参数均可自由设置 3.鼠标点击非棋盘区域 ...

  4. 五子棋双人c语言程序,tc 版双人对战的五子棋

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 map[i][j]=0; cleardevice(); setbkcolor(13); setcolor(1); setfillstyle(1,2); s ...

  5. c语言五子棋双人对战,tc 版双人对战的五子棋

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 map[i][j]=0; cleardevice(); setbkcolor(13); setcolor(1); setfillstyle(1,2); s ...

  6. Node.js联机游戏——gobang五子棋(客户端+服务端+websocket的双人游戏)

    Node.js联机游戏--gobang五子棋(客户端+服务端+websocket的双人游戏) 五子棋的基本结构 ~·基本画图 ~·判断机制 ~···横向/竖向判断 ~···斜向判断 搭建服务器阶段 ~ ...

  7. 每个人都能制作的简易版QQ音乐(HTML+CSS+JQuery)

    自制系列二它来了. 如果在制作过程中有如何问题你都可以私信我,我会答复你的. 今天中秋节,首先祝大家中秋节快乐! 因为没什么礼物送给大家,所以在这里给大家安利一份简易版QQ音乐的制作,过程很简单,每个 ...

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

    1.需求 基于C# winform用200行代码实现简易五子棋双人对战,支持悔棋,需要的知识有C# winform界面,C#,以及几张素材图片. 2.界面 界面设计如图1所示,背影图是用Graphic ...

  9. python棋类项目规划一——五子棋游戏简易版——项目一

    五子棋游戏简易版 目前只能人人对战 o 代表黑棋 x 代表白棋 . 代表无棋子 以下是代码: def nemBoard():'''初始化棋盘''' board = [[0 for i in range ...

  10. JAVA单机五子棋小游戏(双人对战版)

    此代码为简单双人对战五子棋程序,不涉及算法游戏策略. 具有轮流出手,判断输赢,判断输入是否合法功能. 运行效果如图: import java.io.*; public class Gobang {// ...

最新文章

  1. linux的三个时间
  2. SAP PM IW33里查看维护订单相关的维护计划
  3. poj - 3786 Repeater
  4. WCF RIA 服务 (三十二)-- 身份验证、角色、个性化 3
  5. c#foreach循环_C#| 使用foreach循环打印整数数组
  6. html-css练习题(天天生鲜静态网页制作)文末有完整版代码地址链接
  7. Django框架——查询集QuerySet
  8. python虚拟环境可以运行pyspark_pyspark使用自定义的python
  9. 并发运行linux,linux | 并发编程网 – ifeve.com
  10. LeaRun.Java表单快速开发工具
  11. Android wifi信号强度显示流程
  12. 快速非支配排序算法流程
  13. 文件对比工具 Beyond Compare 4.2.9中文破解版 附通用注册码
  14. FileZilla 服务器 报Warning: FTP over TLS is not enabled, users cannot securely log in.
  15. Mysql查询各科成绩前三名并分别排序
  16. git-cz git commit 定制提交规范
  17. Git修改以前某次历史提交注释
  18. 互联网晚报 | 10月7日 星期四 | 小米中东欧5G手机市占率排名第一;威马汽车将再获5亿美元融资;诺基亚首款平板T20发布...
  19. 使用A*算法求迷宫最短路径问题
  20. ERP : 需求管理

热门文章

  1. mysql 实现over函数_mysql 中如何实现over 方法(开窗函数)
  2. Internet security
  3. 部署听云服务器监测探针
  4. Python:实现pigeon sort鸽巢算法(附完整源码)
  5. ADB使用及日志分析
  6. Dashboard Design 4.0(Xcelsius)数据直接绑定功能:瑕瑜互见
  7. Appdata中local是文件,系统盘下的文件目录
  8. vm连接服务器桌面,Vmware之使用Windows自带的远程桌面连接
  9. Win10重复按键盘经常按不出?Win10关闭筛选键步骤
  10. 一个筛选键引起电脑键盘失灵的命案