C#扫雷游戏-2(游戏部分)
来源:互联网 发布:福建师范大学网络 编辑:程序博客网 时间:2024/05/22 04:52
游戏部分包含:
1)砖块集合,这里我们用二维数组替代
2)砖块的行数和列数
3)地雷数
4)地雷位置
5)根据游戏的级别设置砖块行数和地雷数
6)创建随机地雷
7)标识有地雷的砖块
8)计算砖块周围的雷数
基本上是这些内容,下面我们就一项项讲解
1)砖块集合,这里我们用二维数组替代
2)砖块的行数和列数
3)地雷数
4)地雷位置
这些都是属性,重点讲解方法内容
5)根据游戏的级别设置砖块行数和地雷数
这里我们使用属性来设置,首先了解属性的作用:对字段的封装,通过属性的get和set可以对字段进行约束。
//设置级别
private void SetLevel(int level) {
switch(level) {
case 1:
rows = 9;
cols = 9;
mineCount = 10;
break;
case 2:
rows = 16;
cols = 16;
mineCount = 40;
break;
case 3:
rows = 16;
cols = 30;
mineCount = 99;
break;
}
}
6)创建随机地雷
很容易,不详述
7)标识有地雷的砖块
根据地雷的位置来标识地雷处在哪个砖块中
8)计算砖块周围的雷数
这个方法放在这里不符合逻辑,但是问题是砖块的设计我们采用了自定义控件,砖块和砖块是没有联系的,某一砖块并不知道周围砖块情况。怎么办呢?我们在只能在游戏加载时,先把每个砖块周围的情况都设置到砖块属性中。
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
- using System.Drawing;
- namespace MineSweeper {
- class Game {
- public static Brick[,] Bricks;
- Control ctrl;
- int rows;
- int cols;
- int mineCount;
- int[] mines;
- Random random = new Random();
- #region 初始化
- /// <summary>
- /// 初始化
- /// </summary>
- /// <param name="level"></param>
- public void Init(Control ctrl, int level) {
- this.ctrl = ctrl;
- SetLevel(level);
- CreateMines();
- CreateBricks();
- }
- //设置级别
- private void SetLevel(int level) {
- switch(level) {
- case 1:
- rows = 9;
- cols = 9;
- mineCount = 10;
- break;
- case 2:
- rows = 16;
- cols = 16;
- mineCount = 40;
- break;
- case 3:
- rows = 16;
- cols = 30;
- mineCount = 99;
- break;
- }
- }
- //创建随机地雷
- private void CreateMines() {
- mines = new int[mineCount];
- int count = 0;
- while(count < mineCount) {
- int rand = random.Next(rows * cols);
- //判断是否重复
- bool isRepeat = false;
- foreach(int mIndex in mines) {
- if(mIndex == rand) {
- isRepeat = true;
- break;
- }
- }
- if(!isRepeat) {
- mines[count++] = rand;
- }
- }
- }
- //创建砖块
- private void CreateBricks() {
- Bricks = new Brick[rows, cols];
- ctrl.Controls.Clear();
- for(int i = 0; i < rows; i++) {
- for(int j = 0; j < cols; j++) {
- Brick brick = new Brick();
- brick.X = i;
- brick.Y = j;
- brick.Left = j * brick.Width;
- brick.Top = i * brick.Height;
- Bricks[i, j] = brick;
- ctrl.Controls.Add(brick);
- }
- }
- //标识有地雷的砖块
- foreach(int mIndex in mines) {
- int x = mIndex / cols;
- int y = mIndex % cols;
- Console.Write("({0},{1})", x, y);
- Bricks[x, y].IsMine = true;
- }
- Console.WriteLine();
- for(int i = 0; i < rows; i++) {
- for(int j = 0; j < cols; j++) {
- GetArroundMineCount(i, j);
- }
- }
- ctrl.Parent.Width = Bricks[0, 0].Width * cols + 8;
- ctrl.Parent.Height = Bricks[0, 0].Height * rows + 33 + 24 + 50;
- }
- //获取四周的地雷数
- private void GetArroundMineCount(int x, int y) {
- int count = 0;
- for(int i = x - 1; i <= x + 1; i++) {
- for(int j = y - 1; j <= y + 1; j++) {
- if(i == x && j == y || i < 0 || j < 0 || i == rows || j == cols) continue;
- if(Bricks[i, j].IsMine) count++;
- }
- }
- Bricks[x, y].ArroundMines = count;
- }
- #endregion
- }
- }
- C#扫雷游戏-2(游戏部分)
- C#扫雷游戏-1(砖块部分)
- C#扫雷游戏-3(界面部分)
- C#版扫雷游戏
- 扫雷游戏 C#
- C#扫雷游戏
- C#写的扫雷游戏
- C#如何开发扫雷游戏
- C#控制台版扫雷游戏
- C#扫雷游戏详细介绍
- C#编写的扫雷游戏
- 扫雷游戏
- 扫雷游戏
- 扫雷游戏
- 扫雷游戏
- 扫雷游戏
- 扫雷游戏
- 扫雷游戏
- 位运算
- 写在著书10周年前的一些话
- C语言也能干大事
- 工作啦
- 使用Struts2开发Java Web应用程序(目录)
- C#扫雷游戏-2(游戏部分)
- 写简历
- C#扫雷游戏-3(界面部分)
- csdn真是强大
- 北大研究生--10年IT人生酸甜苦辣的经历!一个老程序员的心理
- 一个利用google文档快速解决docx向doc转换的问题
- java application与java applet的区别
- Java Stream流的概念【转】
- 经历就是财富 (9月25日)