一个Flip-game(C语言)【搬运】
本帖最后由 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 = !lights;
}
// 点亮一个灯并熄灭它相邻的两个灯
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) {
return false;
}
}
return true;
}
// 打印当前灯的状态
void printLights(bool lights[]) {
for (int i = 0; i < NUM_LIGHTS; i++) {
printf("%c ", lights ? '*' : 'O');
}
printf("\n");
}
// 游戏主循环
void playFlipGameLoop() {
bool 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 这个帖子,我觉得他的还是比较简陋的了(小声){:10_307:}
@liuhongrun2022 @夏季的春秋 {:10_256:} liuhongrun2022 发表于 2023-7-11 10:19
在我的强烈要求下他加上了注释hh yinda_peng 发表于 2023-7-11 10:20
在我的强烈要求下他加上了注释hh
看不懂C语言,我是把几个相邻的位置用列表存起来了 gezhe 歌者文明清理员 发表于 2023-7-11 10:33
gezhe
是的,Ubuntu 厉害哦{:5_106:} 厉害{:10_254:} {:5_108:} {:5_106:} 康康
{:9_241:} {:9_241:} {:10_254:} {:10_279:}{:10_279:}{:10_279:}{:10_279:} {:5_108:}
页:
[1]