【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; }
相关文章推荐