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;
}