基于C#程序设计的扫雷冲关游戏开发 毕业论文(3)

2019-03-15 18:23

4.3随机布雷功能

随机布雷功能是通过伪随机来实现的。伪随机获取到两个在雷区范围内的数字,分别赋值给Button[x,y]控件,,如果该控件已经有雷则次数加一重新随机,否则该位置布上雷并且修改属性youlei=1。主要代码如下所示:

private void Bulei() {

Random rand = new Random();

for (int i = 0; i < leishu; i++) {

int position_x = rand.Next(hang); int position_y = rand.Next(lie);

if (button[position_x, position_y].Youlei == 0) {

button[position_x, position_y].Youlei = 1;

} else

i = i - 1; }

}

4.4鼠标单击事件功能

鼠标单击事件功能是通过获取按下的是左键还是右键来实现功能的。首先判断游戏是否结束,结束则不做操作,否则就判定是否是左键按下,如果左键按下就需要再次判断是否是雷,是雷的话显示所有雷并结束游戏,不是就遍历周围显示周围雷数再禁用该按钮,如果显示为0则要调用递归扫雷;当右键按下时还需判断原先是否有标记,没有则标记,有的话就取消原来标记并且剩余雷数加1.不管左键还是右键按下,之后都要判断剩余雷数,如果为0就结束游戏显示酷脸。主要代码如下所示: private void bt_MouseUp(object sender, MouseEventArgs e) {

if (!over) {

int x, y;

LeiButton b = (LeiButton)sender; x = b.X; y = b.Y;

switch (e.Button)

9

{ //鼠标左键触发事件

case MouseButtons.Left:

if (button[x, y].Youlei == 0) {

button[x, y].Enabled = false;

button[x, y].Text = Getdilei(x, y).ToString(); Saolei(x, y); if (Win()) {

//Showlei();

timer1.Enabled = false; over = true; }

} else {

button[x, y].BackgroundImage = Image.FromFile(zhakai);

timer1.Enabled = false; button1.BackgroundImage = Image.FromFile(kulian);

xianshi(); over = true; ci = 1; fuli(); }

break;

//鼠标右键触发事件

case MouseButtons.Right:

button[x, y].BackgroundImage = Image.FromFile(flag); if (Convert.ToInt16(button[x, y].Tag) == 1) {

button[x, y].Tag = 0; restlie++;

button[x, y].BackgroundImage = null;

} else {

button[x, y].Tag = 1;

//button[x, y].Enabled = false; restlie--; }

10

lei.Text = restlie.ToString() + \颗?\; if (Win()) {

button1.BackgroundImage = Image.FromFile(cheng); timer1.Enabled = false; over = true; ci++; fuli(); }

break;

} } else

return;

}

4.5递归扫雷功能

递归扫雷功能是通过先进行计算点开点周围雷数,如果为0则按照顺序依次遍历周围雷区,如此递归,最后成功的实现了当点到0时向周围八个发散递归查找功能。原理其实也比较容易,比如当我点下坐标button[5, 5]时,如果该点显示周围没有雷,那么就首先禁用周围按钮并计算和显示雷数,然后从button[4, 4]点调用本函数,也就是以(4,4)为中点,后面按照同样的原理进行运行。主要代码如下所示:

//判断点开的这个按钮周围个中有几个地雷

private int Getdilei(int row, int col)//x代表行,y代表列 {

int i, j;

int around = 0;

int minRow = (row == 0) ? 0 : row - 1; int maxRow = row + 2;

int minCol = (col == 0) ? 0 : col - 1; int maxCol = col + 2;

for (i = minRow; i < maxRow; i++) {

for (j = minCol; j < maxCol; j++) {

if (!(i >= 0 && i = 0 && j < hang))//判断是否在扫雷¤?区域,有无越界

continue;

if (button[i, j].Youlei == 1) around++;

11

} }

return around; }

//以下递归扫雷,向周围八个发散的递归查找 private void Saolei(int row, int col) {

int minrow1 = (row == 0) ? 0 : row - 1; int mincol1 = (col == 0) ? 0 : col - 1; int maxrow1 = row + 2; int maxcol1 = col + 2;

int leishuliang = Getdilei(row, col); if (leishuliang == 0) {

button[row, col].Enabled = false;

for (int m = minrow1; m < maxrow1; m++) {

for (int n = mincol1; n < maxcol1; n++) {

if (!(m >= 0 && m < hang && n >= 0 && n < lie)) continue;

if (!(m == row && n == col) && button[m, n].Enabled == true)

Saolei(m, n);

button[m, n].Enabled = false;

button[m, n].Text = Getdilei(m, n).ToString(); if (button[m, n].Text == \)

button[m, n].Text = string.Empty; }

} }

}

4.6复原功能

用户管理功能是通对当前控件和字段进行初始化或重置来完成的。当玩家点击切换难度或者点击中间笑脸时,触发复原函数,复原函数会删除对button控件的修改,会重新计时,会重新布雷,把显示的数据也改成一开始时候的状态。最后在将中间的笑脸

12

图案按钮背景图片重新换成笑脸。就完成了复原功能。主要代码如下所示:

//每次按开始按钮时,所有方块复原

public void Fuyuan() {

for (int i = 0; i < hang; i++) {

for (int j = 0; j < lie; j++) {

button[i, j].Tag = 0;

button[i, j].Enabled = true;

button[i, j].Text = string.Empty; button[i, j].BackgroundImage = null; if (button[i, j].Youlei == 1) button[i, j].Youlei = 0; }

}

Bulei(); yongshi = 0; over = false; restlie = leishu; timer1.Start();

label4.Text = \秒?\;

lei.Text = restlie.ToString() + \颗?\;

button1.BackgroundImage = Image.FromFile(xiaolian); }

4.6 闯关功能

闯关功能是通过一个简单的累加来呈现的,对于扫雷游戏来说,如果闯关模式设计成以雷的数量怎么或者限定时间来增加难度的话,就不会起到预期的作用,因为扫雷游戏本身就不适合,所以我另辟蹊径,以连胜来增加难度系数,初级难度因为很容易,所以需要玩家连胜10次才能获得惊喜大礼包,中级难度虽然不容易但也不难,连胜5次是个比较适中的次数,而高级难度由于其本身难度就很大,所以玩家很难连胜,2次真的已经够了。如图5所示:

13


基于C#程序设计的扫雷冲关游戏开发 毕业论文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:城郊政法系统“发扬传统”主题教育活动总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: