首页 LMVE论坛 资讯 插画 时光机 我的社区 用户 搜索

[C/C++]简易hangman小游戏

无闻风
发表于 2019-09-26 18:47:37
0
55

这是一个用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

最后修改 2019-09-26 18:47:37
0
55
用户评论
一起折腾