C语言用二维数组实现开关灯泡游戏

本文介绍了一个有趣的开关灯泡游戏的实现过程,包括游戏规则、面板打印、灯泡状态改变以及循环判断是否游戏结束。通过定义二维数组模拟面板,并实现灯泡状态的动态变化,最终通过循环检查所有灯泡状态来判断游戏是否完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开关灯泡游戏

游戏规则:点击任意灯泡会触发周围的灯泡变亮或者熄灭

游戏目的:让所有的灯泡熄灭(即数组所有的值变为 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};

    //01随机赋值  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;

}



运行结果











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值