C语言小游戏-寻宝猎人

1.游戏简介
(1)背景
有一天,主角偶然获得了一张藏宝图。看清了藏宝图上的坐标位置以后,主角决定去寻宝。
(2)坐标
坐标为全局变量。本游戏采用1维坐标。当主角的当前坐标大于藏宝坐标之后,就算寻宝成功。
(3)HP
HP为全局变量,HP就是生命值。当主角的HP低于0时,判定主角死亡,游戏结束。
(4)食物
fd[M]为全局数组,数据类型为结构体
struct food //定义食物结构体类型
{
char name[20]; //食物名字
int count; //食物数量
int effect; //食物效果,就是每吃一个加多少生命值
};
吃了某种食物后,增加HP。
(5)玩法
在主界面可以选择前进或者休息,随机遇到不同的事件,可能增减主角的当前坐标,也可能增减主角的HP。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>

#define M 7
#define ARRLEN 30//数组长度 也就是宝藏坐标 
struct food //定义食物结构体类型 
{
	char name[20]; //食物名字 
	int count;  //食物数量 
	int effect;  //食物效果,就是每吃一个加多少生命值 
}fd[M];
int fdnum=0;
int player;//玩家坐标
int finish=ARRLEN;//宝藏坐标
int HP=100;
int menu()
{
	int choice;
	system("cls");
	printf("寻 宝 猎 人\n");
	printf("1:开始游戏\n");
	printf("2:帮助手册\n");
	printf("0:退出\n");
	printf("请输入选择:");
	scanf("%d",&choice);
	return choice;
}

void help()
{	
	system("cls");
	printf("寻 宝 猎 人\n");
	printf("有一天,玩家偶然获得了一张藏宝图。看清了藏宝图上的坐标位置以后,玩家决定去寻宝。\n");
	printf("当玩家的当前坐标大于藏宝坐标之后,就算寻宝成功。\n");
	printf("休息有一定概率恢复HP,当玩家的HP低于0时,判定玩家死亡,游戏结束。\n");
	printf("吃某种食物必然恢复HP。\n");
	system("pause");
}

void init()
{
	int i;
	char name[M][20]={"止血草","金疮药","大补丸","续命丸","龙肝","凤髓","熊胆"};
	srand(time(NULL));
	fdnum=0;
	player=0;
	HP=100;
	for(i=0;i<M;i++)
	{
		strcpy(fd[i].name,name[i]);
		fd[i].count=0;
		fd[i].effect=i+1;
	}
}

void qianjin()
{
	int k=rand()%4;
	int n=rand()%6+1;
	int m=rand()%M;
	switch(k)
	{
	case 0:
		printf("你顺利前进了%d步。\n",n);
		player+=n;
		break;
	case 1:
		printf("你顺利前进了%d步,并拾取到了物品%s\n",n,fd[m].name);
		fd[m].count++;
		player+=n;
		break;
	case 2:
		printf("你遭遇狂风,倒退%d步。\n",n);
		player-=n;
		if(player<0)player=0;
		break;
	case 3:
		printf("你遭遇一只小怪兽,战斗后,生命-10,没能前进。\n");
		HP-=10;
		break;
	}
	system("pause");
}

void xiuxi()
{
	int k=rand()%5;
	if(k>3)
	{
		printf("你原地休息,生命增加10。\n");
		HP+=10;
		if(HP>100)HP=100;
	}
	else
	{
		printf("你原地休息,感觉神清气爽。\n");
	}
	system("pause");
}

void lookfd()
{
	int i;
	for(i=0;i<M;i++)
	{
		printf("%d: %s%d个 吃了之后能增加HP%d\n",i,fd[i].name,fd[i].count,fd[i].effect);
	}
	printf("选择你要吃的食物编号(-1取消):");
	scanf("%d",&i);
	if(i>=0&&i<M)
	{
		if(fd[i].count>0)
		{
			printf("你吃了一个%s,HP增加了%d\n",fd[i].name,fd[i].effect);
			HP+=fd[i].effect;
			fd[i].count--;
			if(HP>100)HP=100;
		}
		else
		{
			printf("没有就别吃!\n");
		}
	}
	else
	{
		return;
	}
	system("pause");
}

void start()
{
	init();
	int choice;
	do
	{
		system("cls");
		printf("坐标:%d 生命值:%d 藏宝位置:%d\n",player,HP,finish);
		printf("1:前进 2:休息 3:查看食物\n");
		scanf("%d",&choice);
		switch(choice)
		{
		case 1:
			qianjin();
			break;
		case 2:
			xiuxi();
			break;
		case 3:
			lookfd();
			break;
		}
		if(HP<=0)
		{
			printf("痛失生命!游戏结束!\n");
			system("pause");
			return;
		}
	}while(player<finish);
	system("cls");
	printf("你终于获得了宝藏!\n");
	system("pause");
}

int main()
{
	int choice;
	do
	{
		choice=menu();
		switch(choice)
		{
		case 1:
			start();
			break;
		case 2:
			help();
			break;
		}
	}while(choice!=0);
	return 0;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值