#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <assert.h>
#include <ctype.h>
#include <time.h>
int main() {
char WORDS[10][20] = { "Apple","Banana","Cucumber","Dumpling","Eggplant","Fish","Garlic","Ham","Icecream","Jellies" };
//这里运用到了二维数组的知识,对题库进行一个存储。
int num;
printf("Enter the number of words to guess (<=10):");
scanf("%d", &num);
int count[20];
int i;
srand(time(NULL));
//srand函数是一个时间函数,这里相当于设置了一个随机时间的种子,目的是为了后面的随机选词,不会的话可以搜一下这个关键词
for (i = 0; i < num; i++)
{
count[i] = strlen(WORDS[i]);
printf("%s\n", WORDS[i]);
}
printf("\n");
//这里的count计算了每个单词的长度,而这一块是把前面的二维数组题库输出作为题目提示。
char again = 'y';
//设置一个循环条件,可以让玩家不断的玩
while (again == 'y') {
int x = rand() % (num);
int life = 5;
char guess[20];
printf(" +------------------+\n");
printf(" | |\n");
printf(" | |\n");
for (i = 0; i < 10; i++)
{
printf(" |\n");
}
printf("================================\n");
//画了一个绞刑架,个人感觉,简单的图形可以直接printf输出,for循环反而会使问题复杂化
printf("Word:");
char xiao[20];
for (i = 0; i < count[x]; i++)
{
xiao[i] = '_';
}
for (i = 0; i < count[x]; i++)
{
printf(" %c", xiao[i]);
}
printf("\n\n");
//根据单词长度画小杠杠
while (life > 0)
{
printf("Guess (%d lives): ", life);
scanf("%s", guess);
printf("\n");
if (strlen(guess) != 1)
//当玩家已经猜出单词的时候
{
if (strlen(guess) == strlen(WORDS[x]))
{
int judge = 0;
for (i = 0; i < count[x]; i++)
{
if (guess[i] != WORDS[x][i])
{
break;
}
judge++;
}
if (judge == count[x])
{
printf("Correct!\n");
printf("Do you want to play again (y/n)? ");
scanf(" %c", &again);
break;
}
}
printf("Word:");
for (i = 0; i < count[x]; i++)
{
printf(" %c", xiao[i]);
}
printf("\n\n");
life--;
}
else
//当玩家要一个一个猜的时候
{
printf("Word:");
if (strstr(WORDS[x], guess) != NULL)
//strstr函数会判断,后的字符串有没有与,前的字符串相同的部分,如果没有就会返回null
{
for (i = 0; i < count[x]; i++)
{
if (guess[0] == (char)WORDS[x][i])
{
xiao[i] = guess[0];
}
}
int correct = 0;
for (i = 0; i < count[x]; i++)
{
if (xiao[i] != '_')
{
correct++;
continue;
}
break;
}
for (i = 0; i < count[x]; i++)
{
printf(" %c", xiao[i]);
}
printf("\n\n");
if (correct == count[x]) {
printf("Correct!\n");
printf("Do you want to play again? ");
scanf("%c", &again);
break;
}
}
else
{
for (i = 0; i < count[x]; i++)
{
printf(" %c", xiao[i]);
}
printf("\n\n");
}
life--;
//下面是一步一步的画小人
if (life == 4)
{
printf(" +------------------+\n");
printf(" | |\n");
printf(" | |\n");
printf(" | O\n");
for (i = 0; i < 9; i++)
{
printf(" |\n");
}
printf("================================\n");
}
if (life == 3)
{
printf(" +------------------+\n");
printf(" | |\n");
printf(" | |\n");
printf(" | O\n");
printf(" | |\n");
for (i = 0; i < 8; i++)
{
printf(" |\n");
}
printf("================================\n");
}
if (life == 2)
{
printf(" +------------------+\n");
printf(" | |\n");
printf(" | |\n");
printf(" | O\n");
printf(" | /|\n");
for (i = 0; i < 8; i++)
{
printf(" |\n");
}
printf("================================\n");
}
if (life == 1)
{
printf(" +------------------+\n");
printf(" | |\n");
printf(" | |\n");
printf(" | O\n");
printf(" | /|\\ \n");
for (i = 0; i < 8; i++)
{
printf(" |\n");
}
printf("================================\n");
}
}
}
if (life == 0) {
printf(" +------------------+\n");
printf(" | |\n");
printf(" | |\n");
printf(" | O\n");
printf(" | /|\\ \n");
printf(" | / \\ \n");
for (i = 0; i < 7; i++)
{
printf(" |\n");
}
printf("================================\n");
}
printf("You have no more lives!\n");
printf("Do you want to play again (y/n)? ");
scanf(" %c", &again);
}
exit(1);
}
编辑了一个刽子手小游戏的c程序,但是好像运行有点问题,游戏没有办法胜利
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- zhenmu 2021-11-26 17:48关注
想知道 哪儿出问题
方法一、断点调试, linux gdb (编译时 -g 确保生成有调试信息)或者 windows vs
比如 gdb a.out
之后 先设断点位置 (比如90行 和 135行):
b 90
b 135
运行:
r
断点停下来后,可以用p 打印查看变量值
p life
n 是单步执行下一行, c是继续执行程序。方法二、就是每处 分支 或者关键点 输出调试文字,把变量什么打印出来 看 是什么流向。
你的问题 估计就是 if else 括号范围有点问题, 自己从逻辑上分段,2种玩法分支各自放一起, 失败的操作都放一起, 打印的放一起。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度