|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 yinda_peng 于 2023-8-11 20:02 编辑
起因是看到这个帖子:https://fishc.com.cn/forum.php?mod=viewthread&tid=230675
我想起来在我的一个计算机群里面有人分享过他做出来的一个跟这个类似的游戏,于是我找他要了源码
他的本意是做一个圆形的,但是由于时间问题最后仅仅是做出来一个直线的排列,但是原理是圆形,就是说点亮第一个,第二个和最后一个作为第一个的相邻(因为本意是圆形)会发生改变
一共有七盏灯,下面是源码:
- #include <stdio.h>
- #include <stdbool.h>
- #define NUM_LIGHTS 7
- // 翻转灯的状态
- void flip(bool lights[], int index) {
- lights[index] = !lights[index];
- }
- // 点亮一个灯并熄灭它相邻的两个灯
- void playFlipGame(bool lights[], int index) {
- flip(lights, index); // 点亮中间的灯
- // 熄灭左边的灯
- int left = (index + NUM_LIGHTS - 1) % NUM_LIGHTS;
- flip(lights, left);
- // 熄灭右边的灯
- int right = (index + 1) % NUM_LIGHTS;
- flip(lights, right);
- }
- // 检查所有灯是否都熄灭
- bool allLightsOff(bool lights[]) {
- for (int i = 0; i < NUM_LIGHTS; i++) {
- if (lights[i]) {
- return false;
- }
- }
- return true;
- }
- // 打印当前灯的状态
- void printLights(bool lights[]) {
- for (int i = 0; i < NUM_LIGHTS; i++) {
- printf("%c ", lights[i] ? '*' : 'O');
- }
- printf("\n");
- }
- // 游戏主循环
- void playFlipGameLoop() {
- bool lights[NUM_LIGHTS] = {true, true, true, true, true, true, true};
- int turns = 0;
- printf("===== Flipgame =====\n");
- printf("翻转灯的游戏开始!\n");
- while (!allLightsOff(lights)) {
- printf("\n回合 %d\n", turns + 1);
- printLights(lights);
- int choice;
- printf("请选择要翻转的灯 (1-%d): ", NUM_LIGHTS);
- scanf("%d", &choice);
- // 检查输入的合法性
- if (choice < 1 || choice > NUM_LIGHTS) {
- printf("无效的选择,请重新选择。\n");
- continue;
- }
- // 翻转灯的状态
- playFlipGame(lights, choice - 1);
- turns++;
- }
- printf("\n恭喜!你用了 %d 个回合,成功熄灭了所有的灯。\n", turns);
- }
- int main() {
- playFlipGameLoop();
- return 0;
- }
复制代码
代码运行:
相比于https://fishc.com.cn/forum.php?mod=viewthread&tid=230675 这个帖子,我觉得他的还是比较简陋的了(小声)
|
评分
-
查看全部评分
|