我一直在做一个简单的C语言的刽子手游戏,我遇到了几个问题,我正在努力解决。游戏似乎有用户输入和获胜条件的问题,我面临的问题是,当用户输入不在单词和扣除的机会,我想限制用户输入一个字符的时间在这里是我写的
#include <stdio.h>
#include <time.h>
#include "./random.h"
#include <stdbool.h>
#include <windows.h>
#define ARRAY_SIZE sizeof(words) / sizeof(words[0])
//------------------------------------------------------------
int main()
{
srand(time(NULL));
char *words[] = {
"hello",
"superman"};
char *random_word = random(ARRAY_SIZE, words);
char userinput;
bool gameover = false;
int length = 0;
int index;
int chances = 5;
char *empty_list = (char *)malloc(sizeof(char) * 100);
char letter;
//-----------------------------------------------------------
while (random_word[length] != '\0')
{
length++;
}
for (index = 0; index < length; index++)
{
empty_list[index] = '_';
}
empty_list[length] = '\0';
printf("\n%s\n", empty_list);
while (!gameover)
{
printf("Guess the word: ");
scanf("%c*c", &userinput);
for (index = 0; index < length; index++)
{
letter = random_word[index];
if (letter == userinput)
{
empty_list[index] = letter;
printf("\n%s\n", empty_list);
Beep(720, 300);
}
if (userinput != random_word[index])
{
chances = chances - 1;
printf("\nYou have %d chances left", chances);
}
if (empty_list[index] == '_' || chances == 0)
{
gameover = false;
}
else
{
gameover = true;
}
}
}
if (gameover)
printf("YOU WON ");
}
字符串
1条答案
按热度按时间ubbxdtey1#
尝试你的代码,基本上在“for”循环测试中有一些问题,当减少机会计数器并确定游戏是否结束时。在终端中测试它提供了以下结果。
字符串
如图所示,计数器被允许变为负数,程序将允许输入字母,直到找到该单词,然后,该人被确定为获胜。
两个主要的问题是,计数器可以递减每次字符猜测是错误的,“游戏结束”标志被设置为“假”,直到所有正确的字母被猜测。
型
下面是你的代码的重构版本。
型
我很抱歉包含了完整的代码,因为重构后的代码分散在整个程序中。
在这些重构之后,我们对程序进行了几次测试运行。
型
仅供参考,对于测试,程序只是打印单词“哔”,因为我没有访问该库和函数。
从中得到的启示是,要认识到可用于处理“string. h”字符数组的功能,并小心测试逻辑,特别是“and”or“or”logic(“&&”“||您可能希望深入研究一些额外的“C”文献,因为它与字符数组和布尔函数有关。