C#做动物消消乐小游戏戏时,如何将随机生成的小动物图片与PictureBox对应的值匹配起来


· 超过114用户采纳过TA的回答
  1. 首先是堺面设计控件一共有4个,1个PictureBox1个开始按钮,命afe8名为btnStart;1个重置按钮命名为btnReset;1个文本框Label,用于显示游戏状态;

2. 新建一个MainSize类用于存放界面上的可能用到的参数主框体大小520*460,棋盘是一个PictureBox控件大小401*401,棋盘20行20列每个格子边长20,棋子直径16

4.  新建一个基本类Chess,用来表示棋子有一个静態函数DrawChess,代码如下:

//bool型变量用于表示下棋的双方

start表示游戏是否开始二维数组ChessBack用于模拟下棋场景并进行计算。 主程序的构造函数对主框体和PictureBox嘚大小进行初始化在Form1_Load函数中添加函数InitializeThis()对游戏进行初始化,包括将ChessBack数组全部置0type设为true,start设为false绘制棋盘,按键开始的Enabled属性设为true按键重置設为false。 按键开始和重置的功能较为简单代码如下:

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

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

8 .经过测试,没有问题大功告成

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的***。

邻近期末忙于刷题之余意识到期末大作业来不及了,匆匆赶下了作业虽说做的很是粗糙,但完全原创的

大体的做大约3天完成了:

第一天:确定了主题做消消乐网上找素材P图,确定布局

第二天:正式开做上午大约把整体绘制出来了,实现了基础的交换下午重点攻克了交换和下落的动画效果,这点確实感觉有点难

第三天:加了点花哨的技能积分金钱和音乐

时间真的有限草草的完成了作业,可能bug比较多发现可以联系我,不胜感激

在网上的素材中用ps扣出了方块,由于数量不够其中两个改了色相饱和度



由于习惯了acm的套路,代码基本都是面向过程写的几乎没面向對象,只写了一个方格的类

下面贴一下核心的cs代码

//获取与用户鼠标点击位置距离最近的棋盘交叉点的行号和列号 //返回行号和列号并返回true,表示该点击有效 //把行号和列号都设置为-1并返回false,表示无效点击 //遍历每个方格每个都向右向下搜索 //注意这里一定要先标记再同意消除,如果直接在上面消除会导致十字不可消 //交换的实质是两个颜色的互换 //技能1释放 随机消除一种颜色 //释放技能2 重新刷新所有方块 //释放技能4 隨机消除一个十字 else//如果已经点击过 //如果点击和标记位置相连,交换 else//不相邻就重新标记 //执行下落 及判断是否还可消 //搜索每一列把最下面的涳白慢慢换上来,类似冒泡排序 //空白的第一行随机生成 if (!clean())//判断是否还可消 如果不可消下落结束 //自定义光标,参考网上

参考资料

 

随机推荐