这是一个用c控制台写的简易hangman小游戏
ide vs2019
// 2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include
#include
#define random(x) (rand()%x)//定义随机数范围
#define word_const_max 20//最大单词数量
#define zm_max 9 //最大字母数量
char word[word_const_max][zm_max] = //词库
{
"hangman",
"book",
"english",
"math",
"fox",
"goat",
"bear",
"girl",
"apple",
"body",
"colour",
"book",
"pink",
"purple",
"orange",
"brown",
"black",
"son",
"woman",
"haibara"
};
int word_const = 0; //第n个单词
int word_len; //单词长度
char buff[zm_max]; //单词缓存
char input[zm_max]; //输入正确的
char miss[7]; //输入错误的buff 最多7次
int zq_cishu = 0; //真确字母的数量
int erro_cishu = 0; //输入错误次数
char play = 0; //游戏模式
int word_to_buff(int a) //单词写进buff
{
//strlen
int b=0,c;
while (word[a][b]!=""[0])//''
{
buff[b] = word[a][b];
b += 1; //写入同时顺便记录单词长度
}
//strcpy(input, "");
for (c = 0; c < b; c++) //根据长度初始化输入buff
{
input[c] = " "[0]; //初始化给空格
}
return b; //返回单词长度
}
void draw_man(int a) //画人
{
switch (a)
{
case 0:
printf(" +---+n |n |n |n ===n");
break;
case 1:
printf(" +---+n 0 |n |n |n ===n");
break;
case 2:
printf(" +---+n 0 |n | |n |n ===n");
break;
case 3:
printf(" +---+n 0 |n/| |n |n ===n");
break;
case 4:
printf(" +---+n 0 |n/|\ |n |n ===n");
break;
case 5:
printf(" +---+n 0 |n/|\ |n/ |n ===n");
break;
case 6:
printf(" +---+n 0 |n/|\ |n/ \ |n ===n");
break;
default:
break;
}
}
void dis_word() //显示已输入正确的字母
{
int a;
printf("Word: ");
for (a = 0; a < word_len; a++)
{
if (input[a] != " "[0])
{
printf("%c ", input[a]);
}
else
{
printf("_ ");
}
}
printf("n");
}
char cma(char b) //数据处理
{
int a,c=0,d=0;
for (a = 0; a < word_len; a++) //检查这个字母是否输入过
{
if (b == input[a])
{
d = 1;
}
}
if (d == 0)
{
for (a = 0; a < word_len; a++)//对比buff有没有这个字母
{
if (b == buff[a]) //如果有
{
input[a] = b; //字母赋给input缓存的对应位置
zq_cishu += 1; //正确输入+1
c = 1; //正确输入标记
}
}
}
if ((c == 0)) //没一个字母对的上
{
erro_cishu += 1; //错误计数+1
}
if (zq_cishu >= word_len) //真确数等于单词长度就是胜利
{
return 1;
}
if (erro_cishu >= 6)
{
return 2; //错误次数大于最大次数失败
}
return 0;
}
int main()
{
char getword;
char jg;
printf("%snn",word[0]); //显示游戏名字
while (1)
{ //游戏初始化
srand((int)time(0)); //设置随机数种子
word_const = random(word_const_max); //使用第n个单词
erro_cishu = 0; //清空错误计数
zq_cishu = 0; //清空正确次数
word_len = word_to_buff(word_const); //读取单词长度并载入buff
//printf("%dn",word_len);
draw_man(erro_cishu); //画个人
dis_word(); //显示正确字符
play = 1; //游戏开始
while (play)
{
//fflush
do
{
getword = getchar();
}while(getword==10); //输入字符并把结束符去掉
//scanf_s("%c",getword);
jg = cma(getword); //获取数据处理结果
draw_man(erro_cishu); //显示
dis_word();
if (jg==1)
{
printf("answer:%sn",buff);
printf("win!n one more? Y/N");
do
{
getword = getchar();
} while (getword == 10);
if (getword == "N"[0] || getword == "n"[0])
{
return 0;
}
play = 0;
}
if (jg == 2)
{
printf("answer:%sn", buff);
printf("lost!n one more? Y/Nn");
do
{
getword = getchar();
} while (getword == 10);
if (getword == "N"[0] || getword == "n"[0])
{
return 0;
}
play = 0;
}
//return 0;
}
}
//std::cout << "Hello World!n";
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
//strcpy
//strcat
//strcmp
//strlen
//strlwr
//strupr