开关灯泡游戏
游戏规则:点击任意灯泡会触发周围的灯泡变亮或者熄灭
游戏目的:让所有的灯泡熄灭(即数组所有的值变为 0 )
用0代表灯泡处于熄灭状态
用1代表灯泡亮着的状态
实现步骤分析:
重点:
1.判断输入灯泡位置的上下左右是否越界
2.灯泡的移动:
灯泡的上下边分别为:行 -1和 +1 列不变
灯泡的左右边分别是: 列- 1 和 +1 行不变
一.打印面板,提示输入
通过定义一个二维数组 , 赋值随机值 0 和 1实现面板的打印;
二.灯泡状态的改变
判断输入的值是否和当前值相同
1).如果相同不改变周围其他灯泡的值
2).如果不同改变周围灯泡的值
1.判断灯泡的上下左右是否越界(灯泡的上和下面分别为:行+1和 —1
灯泡的左右分别是:列+1和 -1
如果越界不改变其他的值
如果不越界则将 1-->0 , 将 0-->1;
三.打印改变后的面板 并判断是否游戏
代码的实现:
#import <Foundation/Foundation.h>
// 定义一个打印界面的方法
void print(int row ,int col ,int array[row][col]){
for (int i = 0; i < row; i++) {
for (int j =0; j < col; j++) {
printf("%d " , array[i][j]);
}
printf("\n");
}
}
//定义一个改变灯泡状态的方法
void cg(int row ,int col ,int array[row][col] ,int a ,int b) {
if(array[a][b] == 0)
array[a][b] = 1;
else
array[a][b] = 0;
}
int main(int argc,constchar * argv[]) {
//定义一个数组存储灯泡
int a[5][5] = {0};
//0和1随机赋值 0代表不亮 1代表亮着
for (int i = 0; i < 5; i++) {
for (int j =0; j < 5; j++) {
a[i][j] =arc4random() % (1 - 0 + 1) + 0;
}
}
// 打印灯泡
print(5,5,a);
while (1) {
// 定义变量来接受输入的位置和要修改的值从第0行和0列开始
int x = 0 , y = 0;
int s = 0;
printf("请输入行列值和要修改的值(中间用空格隔开):\n");
scanf("%d %d %d" , &x , &y , &s);
//2.改变灯泡当前状态
if (s != a[x][y]) {
a[x][y] = s;
// 如果上边的那个数不越界 修改值
if (x-1 >= 0) {
//如果是 0-->1 , 1-->0
cg(5, 5, a, x - 1, y);
}
// 如果下边的那个数不越界 修改值
if(x + 1 < 5){
//如果是 0-->1 , 1-->0
cg(5, 5, a, x + 1, y);
}
// 如果左边的那个数不越界 修改值
if (y - 1 >= 0) {
//如果是 0-->1 , 1-->0
cg(5, 5, a, x, y - 1);
}
//如果右边的那个数不越界修改值
if (y + 1 < 5) {
//如果是 0-->1 , 1-->0
cg(5, 5, a, x, y + 1);
}
}
// 循环结束计数器
int count = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (a[i][j] == 0) {
count++;
}
}
}
//如果等于25说明所有元素都为0 , 游戏结束;
if (count == 25) {
printf("\nCongratulations!\n再来一把输入y,退出按其它键:");
char c = 0;
scanf("%c", &c);
if (c == 'y') {
continue;
}else {
break;
}
}
printf("******************\n");
// 打印改变后的值
print(5,5,a);
}
return 0;
}
运行结果