#include<bits/stdc++.h>
#define MAX_NAME_LEN 20
#define INITIAL_HEALTH 100
#define INITIAL_HUNGER 50
#define INITIAL_THIRST 50
#define INITIAL_DAYS 1
typedef struct{
int hasShelter;
int hasFood;
int hasWater;
int hasDanger;
}Map;
typedef struct{
char name[MAX_NAME_LEN];
int health;
int hunger;
int thirst;
int days;
}Survivor;
void displayHelp(){
printf("你在荒岛上开始了荒岛求生100天生存,请尽力寻找资源保持生机并最终生还。\n");
printf("以下是每个命令的含义:\n");
printf("h - 帮助\n");
printf("s - 显示幸存者当前状态\n");
printf("m - 搜索周围的地图资源\n");
printf("r - 休息\n");
printf("j - 从现在睡觉到第二天\n");
printf("f - 查找食物\n");
printf("w - 查找水源\n");
printf("e - 进入避难所\n");
printf("c - 与其他幸存者合作\n");
printf("a - 与其他幸存者对抗\n");
printf("q - 退出游戏\n");
}
void printSurvivorStatus(Survivor* survivor) {
printf("名字:%s\n",survivor->name);
printf("健康值:%d\n",survivor->health);
printf("饥饿度:%d\n",survivor->hunger);
printf("口渴度:%d\n",survivor->thirst);
printf("已存活天数:%d\n",survivor->days);
}
void searchResources(Map* map,Survivor* survivor){
int randFind=rand()%7;
if(randFind==0) printf("很遗憾,你没有发现任何资源。\n");
else{
int randResource=rand()%3;
switch (randResource) {
case 0:
printf("你发现了一些果子,你的饥饿度下降了10!\n");
survivor->hunger -= 10;
map->hasFood = 1;
break;
case 1:
printf("你找到了一处小溪流,你的口渴度下降了10!\n");
survivor->thirst -= 10;
map->hasWater = 1;
break;
case 2:
printf("你发现了一个避难所,可能是躲避危险的好地方!\n");
map->hasShelter = 1;
break;
}
}
int randDanger=rand()%5;
if(randDanger==0) {
printf("很不幸,你碰到了危险!\n");
map->hasDanger = 1;
}
}
void findFood(Map* map,Survivor* survivor){
if(!map->hasFood){
printf("很遗憾,你没有找到任何食物。\n");
return;
}
printf("你找到了一些水果,你的饥饿度下降了20。\n");
survivor->hunger-=20;
map->hasFood=0;
}
void findWater(Map* map,Survivor* survivor){
if(!map->hasWater){
printf("很遗憾,你没有找到任何水源。\n");
return;
}
printf("你找到了一些清水,你的口渴度下降了20。\n");
survivor->thirst -= 20;
map->hasWater = 0;
}
void enterShelter(Map* map,Survivor* survivor){
if(!map->hasShelter){
printf("很遗憾,你还没有找到避难所。\n");
return;
}
printf("你找到了避难所,好好休息了一下!\n");
survivor->health+=40;
}
void avoidDanger(Map* map,Survivor* survivor){
if(!map->hasDanger){
printf("现在岛上很平静,没有什么可担心的。\n");
return;
}
int randEscape=rand()%2;
if(randEscape==0) {
printf("你被困住了,受到了伤害!\n");
survivor->health-=20;
}else{
printf("你成功逃脱了危险!\n");
}
}
void showSurvivorsEncountered(Survivor* player,Survivor* stranger){
printf("你遇到了一个幸存者:%s\n", stranger->name);
printf("他的状态是:\n");
printSurvivorStatus(stranger);
printf("是否与他合作?(y/n)");
char choice;
getchar();
scanf("%c",&choice);
if(choice=='y'){
int randCoop=rand()%6;
if(randCoop==0){
printf("很遗憾,你们一起搜索时没有找到任何资源。\n");
}else{
printf("你们成功找到了一些资源!\n");
int randResource=rand()%3;
switch(randResource){
case 0:
printf("你们找到了一些香蕉,你的饥饿度下降了10!\n");
player->hunger -= 10;
stranger->hunger -= 10;
break;
case 1:
printf("你们找到了一口井,你的口渴度下降了10!\n");
player->thirst -= 10;
stranger->thirst -= 10;
break;
case 2:
printf("你们发现了一处废弃宿舍,休息了一会儿,你的健康值增加了20。\n");
player->health += 20;
stranger->health += 20;
break;
}
}
}else{
int randVs=rand()%3;
if(randVs==0){
printf("很遗憾,你被幸存者%s打败了!\n", stranger->name);
player->health/=2;
}else{
printf("你成功击败了幸存者%s,但也受到了一些伤害。\n", stranger->name);
player->health -= 20;
}
}
}
int main(){
srand(time(NULL));
Survivor player={"玩家", INITIAL_HEALTH, INITIAL_HUNGER, INITIAL_THIRST};
Map map={0, 0, 0, 0};
printf("欢迎来到荒岛求生游戏!输入'h'查看帮助信息。\n");
while(1){
char choice;
scanf("%c",&choice);
switch(choice){
case 'h':
displayHelp();
break;
case 's':
printSurvivorStatus(&player);
break;
case 'm':
searchResources(&map, &player);
break;
case 'r':
printf("你摆开行囊好好休息了一下,健康值回复了20点。\n");
player.health += 20;
break;
case 'j':
printf("你已经睡到了第二天,健康值回复了40点。\n");
player.days+=1;
player.health+=40;
case 'f':
findFood(&map, &player);
break;
case 'w':
findWater(&map, &player);
break;
case 'e':
enterShelter(&map, &player);
break;
case 'c': {
Survivor stranger = {"陌生人", INITIAL_HEALTH, INITIAL_HUNGER, INITIAL_THIRST};
showSurvivorsEncountered(&player, &stranger);
break;
}
case 'a': {
Survivor enemy = {"敌人",INITIAL_HEALTH, INITIAL_HUNGER, INITIAL_THIRST};
showSurvivorsEncountered(&player,&enemy);
break;
}
case 'q':
char yon;
printf("你已经在这个世界上存活%d天,确定要退出么?(y/n) ",player.days);
scanf("%c",&yon);
if(yon=='y'){
printf("游戏结束,再见!");
return 0;
}else{
printf("请继续游戏。\n");
break;
}
default:
printf("无效的命令,请查看帮助信息。\n");
break;
}
if(player.health<=0){
printf("很遗憾,你已经死亡了。");
return 0;
}
if(player.days>=100){
printf("恭喜你,你已经挑战成功了。");
return 0;
}
}
return 0;
}