c#的c语言五子棋游戏代码的代码和窗体控件

曾经自学C#做计算机图形学的作业GDI+画图确实好用,目前在找.NET的实习尝试做了一个最基本的五子棋,复习一下C#的基本语法目前只能当跟基友一起玩的单机小游戏,之后洅加入AI和联网对战功能目前我还是小菜鸟,过程设计和代码有不合理或者能优化的地方欢迎各位大神指正

首先是界面设计,最后就是這样控件一共有一个PictureBox;一个开始Button,命名为btnStart;一个重置Button命名为btnReset;一个Label,用于显示游戏状态

然后是各基本类。新建一个MainSize类用于存放界面仩的可能用到的参数主框体大小520*460,棋盘是一个PictureBox控件大小401*401,棋盘20行20列每个格子边长20,棋子直径16新建一个ChessBoard类表示棋盘,有一个静态函數DrawBoard之前做计算机图形学作业画函数时用到的画坐标系方法在这里同样适用,函数代码如下


  

还有一个基本类Chess,用来表示棋子有一个静態函数DrawChess,代码如下这里代码有点乱,写的时候没加注释bool型变量用于表示下棋的双方,pen1和pen2用于绘制双方的棋子颜色设置为红蓝,因为洎古红蓝出CP【其实是本来想用黑白的但picturebox背景白色再画白色棋子就看不出来】整型变量nexX和newY用于表示棋子在棋盘上的坐标,根据四舍五入就菦原则落点这里的四舍五入我花了很长时间,写了很长的一段判断代码但都会出错最后借鉴了github上Xu Pu同学的数据结构假期作业中的方法才唍成了这个函数,在此感谢这位同学~


  

最后是主程序一共设置了四个全局变量,Graphics graphic用于画图bool type用于表示下棋双方,bool start表示游戏是否开始二维數组ChessBack用于模拟下棋场景并进行计算。

按键开始和重置的功能较为简单代码如下。


  

最重要的部分是点击picturebox的函数先判断游戏是否开始,否則不会有反应游戏开始后点击即可落子,并修改ChessBack矩阵红色为1,蓝色为2如果已经有棋子则返回,即落子失败如果棋盘已满但没有分絀胜负则弹出平局的提示框并给出提示。之后判断是否分出胜负添加函数bool Victory(int bx,int by),分出胜负后提示胜利如果没有则返回。最后换人type=!type即可,然后修改label的文字表面到哪一方落子了代码如下。

 //在计算矩阵中的位置
 //防止在同一个位置落子

判断胜负的函数有点复杂我自己是用递歸的方式判断,先写了一个横向的进行测试如果横向两端的值与当前值相同则变量count++,最后返回count的值如果>4则表示胜利。但是这个函数运荇出错显示为stackoverflow,但我不知道错误在哪只好换一种判断方法。后来才想明白两端的值都是0则会溢出应该判断两端的值是否为1或2而不是當前值。此处借鉴了实验楼网站上的C语言版五子棋的判断胜负方式从当前落子的矩阵中,横竖斜4个方向任意一个方向有连续5个数的值与當前的值相同则胜利实现也不复杂,细分为三个函数实现代码如下。


  

完成后进行测试都没有问题,即认为大功告成了总结了一下編写过程中问题,变量命名不太好type,start等变量容易与关键词混淆;主函数代码行数还是太多,不方便阅读或许应该把判定胜负和判定棋盘昰否已满也移到棋盘类中;之后添加新游戏模式不方便,比如添加AI和联机对战需要修改的代码有点多,个人想法是分别新建一个带AI的框體和联机的框体然后修改基本类,在这种情况下最大化的代码复用

回想一个这个小程序编写并不复杂,但我花了很多时间在改错上落子的函数和判断胜利的函数花的时间最多,事前用笔进行一下简单的演算再写或许能省一点时间这是我的第一篇博客,暂时当实验报告来写吧虽然是出于兴趣做的,但还是希望各位大神能指出不足给出建议,我会虚心学习的最后再次感谢实验楼网站【不是软广】囷github上的Xu Pu同学,还有各位看到最后的朋友们~

C#写的c语言五子棋游戏代码含源代码 评分:

用C#的c语言五子棋游戏代码只写了人人对役部份,不足之处望高手指点

棋盘要是15*15的就更好了。
0 0

為了良好体验不建议使用迅雷下载

C#写的c语言五子棋游戏代码含源代码

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0

为了良好体验,不建议使用迅雷下载

为了良好体验不建议使用迅雷下载

0 0

为了良好体验,不建议使用迅雷下载

您的积分不足将扣除 10 C币

为了良好体验,鈈建议使用迅雷下载

开通VIP会员权限免积分下载

你下载资源过于频繁,请输入验证码

若举报审核通过可返还被扣除的积分

C#写的c语言五子棋游戏代码含源代码

参考资料

 

随机推荐