您的位置:首页 > 编程语言 > C语言/C++

【C语言】扫雷游戏基础

2017-07-11 22:45 232 查看
/*
* 扫雷游戏基础部分
* 方法:可以先将每个位置用数字表示,然后对这写数字进行处理
* 这种方法方便与将来的功能扩展,并且也使得思路更清晰
* 步骤:创建一个存放数据的数组(因为有行列,所以创建一个二维的:row行col列)->(数组里需要填字符o和x,x是随机的,使用数字更方便编写,比如0比较容易赋值给数组,但是字符不太好赋值)产生随机数,让随机数作为行列,还要考虑到是否位置会重合的问题->输出结果即可
*
* 功能扩展:要求在雷区周边填写数字,我们可以以地雷为中心,确定了周边的坐标,然后让这写坐标的值加1,这写坐标也可以用二维数组来存储,注意要排除了超出界限的即最左最右,最上最下,还要排除旁边是地雷的,地雷的坐标不能加1
*
* 注意考虑问题的方法
* */
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void exercise_1() {
int row = 0, col = 0, cnt = 0, num = 0;
int arr[10][10] = {0};
int delta[][2] = {-1, -1, -1, 0, -1, 1, 0, -1, 0, 1, 1, -1, 1, 0, 1, 1};

// * * *  因为数组是(0,0)(0,1)(0,2)
// * X *            (1,0)(1,1)(1,2)
// * * *            (2,0)(2,1)(2,2)所以关系如上
/*
* 对数组直接用字符填充也可以,但是后期拓展不方便,注意!!!!!!
* */
//    for(row = 0; row <= 9; row++) {
//      for(col = 0; col <= 9; col++) {
//        arr[row][col] = 79;
//  }

/******************************************************************************************
*                               产生地雷部分
* *****************************************************************************************/

// 对于无法确定终止条件的,可以尝试用while语句,对于至少产生一个的即至少运行一次的,可以尝试用do...while

srand(time(0));
do {
//获得一个随即位数
row = rand() % 9;
col = rand() % 9;
//判断是否重复和产生X
if(!arr[row][col]) {
arr[row][col] = -1;
cnt++;
}

}while(cnt < 10);
/*****************************************************************************
*                             地雷周边填充数字部分
* ****************************************************************************/
for(row = 0; row <= 9; row++) {
for(col = 0; col <= 9; col++) {
if(arr[row][col] != -1) {
//排除不是地雷的
continue;
}
// 剩下的就是地雷
for(num = 0 ;num <= 7; num++) {
//每次处理挨着地雷的一个格子
int tmp_row = row + delta[num][0]; // tmp_row是地雷周边的横坐标
int tmp_col = col + delta[num][1]; // tmp_col是地雷周边的列坐标
// 行不能超过9,即最下面,不能小于0,即最上面
if(tmp_row < 0 || tmp_row > 9) {
continue;
}
//列不能超过9,即最右边,不能小于0,即最左边
if(tmp_col < 0 || tmp_col > 9 ) {
continue;
}
//排除挨着的是地雷的,不能把地雷也加了
if( arr[tmp_row][tmp_col] == -1) {
continue;
}
arr[tmp_row][tmp_col]++;
}
}
}
/*******************************************************************************
*                                   显示部分
* ******************************************************************************/
for(row = 0; row <= 9; row++) {
for(col = 0; col <= 9; col++) {
if(!arr[row][col]) {
printf("O ");
}
else if(arr[row][col] == -1) {
printf("X ");
}
else {
printf("%d ", arr[row][col]);//arr数组原先非地雷区就是0,直接加就可以
}
}
printf("\n");
}
}

int main() {
exercise_1();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言