S.D救公主(mc·黑夜简便、恶搞版)

xuzihang 2020-06-16 22:42:34 37
#define HP 100
#define DEF 40
#define ATK 50
#include<stdlib.h>
#include<stdio.h>
#include<time.h> //suiji 
#include<string.h>
#include<windows.h> //SLEEP函数
struct Player //玩家结构体,并初始化player
{
char name[21];
int attack;
int defense;
int health;
long int max_health;
int level;
int exp;
int range_exp;
long int max_exp;
}player={"勇者",ATK,DEF,HP,HP,1,0,0,100};
struct Enemy //怪的结构体,并初始化各种怪
{
char name[20];
char wupin[12];
int attack;
int defense;
int health;
int money;
long int exp;
int wupin_sign;
int wupinpro;
int double_attack;
int miss;
}strongman={"超级滑稽","滑稽圣衣",40,50,350,200,100,1,2,1,0},
witch={"滑稽女巫","滑稽银甲",25,15,100,50,50,2,2,1,1},
xiyi={"滑稽蜥蜴","滑稽铁甲",18,10,50,30,35,3,3,2,2},
big_strongman={"超级滑稽王","滑稽之臂",40*5,50*5,350*5,200*5,100*5,4,4,2,0},
lion={"滑稽雄狮","滑稽好剑",60,30,280,200,100,5,2,1,0},
horse={"滑稽野马","碧血滑稽剑",28,12,90,50,50,6,2,1,1},
bee={"滑稽黄蜂","长滑稽剑",17,11,60,30,35,7,3,2,2},
shitu={"滑稽使徒","\0",60*8,30*8,280*8,200*8,100*8,9,1,1,0},
guai={"\0","\0",0,0,0,0,0,0,0,0,0};
struct Place
{
int bar,hotel,forest1,forest2,forest3,grass1,grass2,grass3;
}place={1,2,3,4,5,6,7,8};
int max_exp=0;
int choose_number=0,s=0,strongman_arm=0,battle=0,money=500,place_sign=9;
int cao=3,jijiubao=2,baiyao=2,superbaiyao=1,boom=3,dubiao=2,atom_boom=1;
int fang=0,fang1=10,fang1n=0,fang2=20,fang2n=0,fang3=40,fang3n=0,fang4=100,fang4n=0;
int gong=0,gong1=8,gong1n=0,gong2=15,gong2n=0,gong3=25,gong3n=0,gong4=60,gong4n=0;
char gongname[20]="无",fangname[20]="无";
char proof;
void AddWupin(int);
int AttackResult();
void BattleAct();
void ChooseWupin();
void DisplayState();
void OrdinaryAct(); 
int SuiJi();
int SuiJi100();
void WhetherLevelUp();
void SlowDisplay(char *); 
int main()
{
int i=0,j=0,k=0;
char player_name[21];
SlowDisplay("这是一个滑稽的世界! 超级无敌滑稽国的滑稽公主被滑稽人绑架了!\n\n 伟大的滑稽勇者啊~拿起你们的滑稽武器,营救滑稽公主!\n\n\n输入你的名字: (20个字符)\n\n\n");
// sndPlaySound("res\\F005.wav",SND_LOOP);
scanf("%s",player_name); 
strncpy(player.name,player_name,20);
if(strcmp(player.name,"EVA初号滑稽机")==0)
{
SlowDisplay("封印多年的 EVA初号滑稽机 啊!你终于可以重见天日了!\n\n\n EVA初号滑稽机 重新启动... 随即... 暴走!!!\n\n\n");
player.attack=999;
player.defense=999;
player.health=9999;
player.max_health=9999;
} 
getchar();
OrdinaryAct();
return 0;
}
int SuiJi()
{
srand((unsigned)time(NULL));
return rand()%10;
}
int SuiJi100()
{
srand((unsigned)time(NULL));
return rand()%100;
}
void ChooseWupin() //选择物品 并使用
{
printf("物品: 1,止血滑稽草%d个 2,急救滑稽包%d个 3,滑稽白药%d个 4,超级滑稽白药%d个 5,手雷%d个 6,毒标%d个 7,手抛式原子弹%d个 0,返回\n\n\n",cao,jijiubao,baiyao,superbaiyao,boom,dubiao,atom_boom);
switch(scanf("%d",&choose_number),choose_number)
{
case 1:
if(cao>0)
{
SlowDisplay("使用止血滑稽草,爱豆增加60\n\n\n");
cao--;
if(player.health+60>player.max_health)player.health=player.max_health;
else player.health+=60;
}
else SlowDisplay("没有止血滑稽草了\n\n\n");
break;
case 2:
if(jijiubao>0)
{
SlowDisplay("使用急救滑稽包,爱豆增加80\n\n\n");
jijiubao--;
if(player.health+80>player.max_health)player.health=player.max_health;
else player.health+=80;
}
else SlowDisplay("没有急救滑稽包了\n\n\n");
break;
case 3:
if(baiyao>0)
{
SlowDisplay("使用滑稽白药,爱豆增加120\n\n\n");
baiyao--;
if(player.health+120>player.max_health)player.health=player.max_health;
else player.health+=120;
}
else SlowDisplay("没有滑稽白药了\n\n\n");
break;
case 4:
if(superbaiyao>0)
{
SlowDisplay("使用超级滑稽白药,爱豆增加200\n\n\n");
superbaiyao--;
if(player.health+200>player.max_health)player.health=player.max_health;
else player.health+=200;
}
else SlowDisplay("没有超级滑稽白药了\n\n\n");
break;
case 5:
if(battle) //在战斗中(battle=1),否则(battle=0)不能使用攻击性物品
{
if(boom>0)
{
SlowDisplay("使用滑稽手雷,敌人爱豆减少100\n\n\n");
boom--;
guai.health-=100;
AttackResult();
}
}
else SlowDisplay("非战斗状态,不能使用滑稽手雷!\n\n\n");
break;
case 6:
if(battle) //在战斗中(battle=1),否则(battle=0)不能使用攻击性物品
{
if(dubiao>0)
{
SlowDisplay("使用滑稽毒标,敌人爱豆减少200\n\n\n");
dubiao--;
guai.health-=200;
AttackResult();
}
}
else SlowDisplay("非战斗状态,不能使用滑稽毒标!\n\n\n");
break;
case 7:
if(battle) //在战斗中(battle=1),否则(battle=0)不能使用攻击性物品
{
if(atom_boom>0)
{
SlowDisplay("使用手抛式滑稽原子弹,敌人爱豆减少500\n\n\n");
atom_boom--;
guai.health-=500;
AttackResult();
}
}
else SlowDisplay("非战斗状态,不能使用手抛式滑稽原子弹!\n\n\n");
break;
case 0:break;
default:printf("ChooseWupin error!\n\n\n");
}
}
int AttackResult() //攻击结果:判断是否获胜 是否获得物品 和 是否升级
{
if(guai.health<=0)
{
battle=0;
printf("滑稽胜利!获得滑稽币%d,经验%d\n\n\n",guai.money,guai.exp);
player.exp+=guai.exp;
player.range_exp+=guai.exp;
money+=guai.money;
s=SuiJi();
if(s<guai.wupinpro)
{
SlowDisplay("从滑稽敌人尸骸中发现");
printf("%s\n\n\n",guai.wupin);
AddWupin(guai.wupin_sign);
}
WhetherLevelUp();
if(strcmp(guai.name,"滑稽使徒")==0)
{
puts("战斗胜利,救出滑稽公主!!!");
getchar();
getchar();
exit(0);
}
return 1; //攻击有结果了返回1,否则返回0,用于判断是否继续做战斗行为
}
else
{
int s=SuiJi();
if((guai.attack+s-player.defense/3)<0)
{
player.health-=1;
printf("%s滑稽反击,你的爱豆减少了 1\n\n",guai.name);
}
else
{
player.health-=guai.attack+s-player.defense/3;
printf("%s反击,你的爱豆减少了%d\n\n",guai.name,guai.attack+s-player.defense/3);
}
if(player.health<0)
{
battle=0;
printf("%s战死!滑稽币掉落%d\n\n\n",player.name,player.level*500);
money-=player.level*500;
player.health=player.max_health/5;
OrdinaryAct();//////////
return 1;
}
}
return 0;
}
void AddWupin(int wupin_sign)
{
switch(wupin_sign)
{
case 1:fang4n++; break;
case 2:fang3n++; break;
case 3:fang2n++; break;
case 4:strongman_arm=1;break;
case 5:gong4n++; break;
case 6:gong3n++; break;
case 7:gong2n++; break;
default:printf("AddWupin error\n\n\n");
}
}
void WhetherLevelUp()
{
int i=0,j=0;
int l1=player.range_exp/100;
int l2=player.range_exp/300;
int l3=player.range_exp/600;
if(player.level<=15&&l1>0) //15级以下,经验足够 都满足则升级
{
if(l1==1)
{
printf("%s",player.name);
SlowDisplay(" 升级!\n\n\n杀人力+3, 防滑稽力+2, 爱豆上限+20\n\n\n");
player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100;
player.attack+=3;
player.defense+=2;
player.max_health+=20;
player.health=player.max_health;
player.level++;
player.range_exp=0;
player.exp=player.max_exp;
player.max_exp+=100;
}
else
{
printf("好牛逼!连升%d级!",l1);
printf("杀人力+%d, 防滑稽力+%d, 爱豆上限+%d\n\n\n",3*l1,2*l1,20*l1);
player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100;
player.attack+=3*l1;
player.defense+=2*l1;
player.max_health+=20*l1;
player.health=player.max_health;
player.level+=l1;
player.range_exp=0;
player.exp=player.max_exp;
player.max_exp+=100*l1;
}
}
else if(player.level<=40&&l2>0)
{
if(l2==1)
{
printf("%s",player.name);
SlowDisplay(" 升级!\n\n\n杀人力+3, 防滑稽力+2, 爱豆上限+20\n\n\n");
player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100;
player.attack+=3;
player.defense+=2;
player.max_health+=20;
player.health=player.max_health;
player.level++;
player.range_exp=0;
player.exp=player.max_exp;
player.max_exp+=300;
}
else
{
printf("好牛逼!连升%d级!",l1);
printf("杀人力+%d, 防滑稽力+%d, 爱豆上限+%d\n\n\n",3*l2,2*l2,20*l2);
player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100;
player.attack+=3*l2;
player.defense+=2*l2;
player.max_health+=20*l2;
player.health=player.max_health;
player.level+=l2;
player.range_exp=0;
player.exp=player.max_exp;
player.max_exp+=300*l2;
}
}
else if(l3>0)
{
if(l3==1)
{
printf("%s",player.name);
SlowDisplay(" 升级!\n\n\n杀人力+3, 防滑稽力+2, 爱豆上限+20\n\n\n");
player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100;
player.attack+=3;
player.defense+=2;
player.max_health+=20;
player.health=player.max_health;
player.level++;
player.range_exp=0;
player.exp=player.max_exp;
player.max_exp+=600;
}
else
{
printf("好牛逼!连升%d级!",l1);
printf("杀人力+%d, 防滑稽力+%d, 爱豆上限+%d\n\n\n",3*l3,2*l3,20*l3);
player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100;
player.attack+=3*l3;
player.defense+=2*l3;
player.max_health+=20*l3;
player.health=player.max_health;
player.level+=l3;
player.range_exp=0;
player.exp=player.max_exp;
player.max_exp+=600*l3;
}
}
}
void OrdinaryAct() //正常行为菜单(移动,物品,对话,查看状态,装备,退出游戏)
{
while(1)
{
// \(1000);
// system("cls");
puts("=============================================================================");
printf("要做什么?\n\n\n 1,冲呀 2,道具 3,说说 4,查看状态 5,装备 0,退出游戏\n\n\n");
puts("=============================================================================");
switch(scanf("%d",&choose_number),choose_number)
{
case 1: //显示移动菜单
SlowDisplay("要去哪里?\n\n\n");
printf("1,酒稽 2,旅稽 3,滑森林一层 4,滑森林二层 5,滑森林三层 6,滑草原一层 7,滑草原二层 8,滑草原三层\n\n\n");
switch(scanf("%d",&choose_number),choose_number)
{
case 1:place_sign=place.bar; //记录目前位置-酒吧
// OrdinaryAct();
break;
case 2:place_sign=place.hotel; //进入旅店
SlowDisplay("要住店吗? 200个爱豆 1,是 0,否\n\n\n");
choose_number=1;
switch(scanf("%d",&choose_number),choose_number)
{
case 1:if(money-200<0) //判断钱是否够
{
SlowDisplay("Sorry,你的爱豆不够~\n\n\n"); 
}
else
{
SlowDisplay("好好休息\n\tHP满\n\t\t第二天了\n\n");
money-=200; //花费200住店费
player.health=player.max_health; //体力满
}

break;
case 0:SlowDisplay("下次再来!\n\n\n");break;
default:printf("hotel talk error!\n\n\n");
}
place_sign=0;
break;
case 3:
place_sign=place.forest1;
s=SuiJi(); 
if(s<7)
{
battle=1;
guai=xiyi;
printf("%s冲了过来!\n\n\n",guai.name);
BattleAct();
}
else if(s<9)
{
battle=1;
guai=witch;
printf("%s飞了过来!\n\n\n",guai.name);
BattleAct();
}
else
{
SlowDisplay("这里十分安全\n\n\n");
//不用调用OAct函数,会自动执行OAct函数;
}
break;
case 4:
place_sign=place.forest2;
s=SuiJi(); 
if(s<7)
{
battle=1;
guai=witch;
printf("%s杀了过来!\n\n\n",guai.name);
BattleAct();
}
else if(s<9)
{
battle=1;
guai=strongman;
printf("%s跳了过来!\n\n\n",guai.name);
BattleAct();
}
else
{
SlowDisplay("这里十分安全\n\n\n");
}
break;
case 5:
place_sign=place.forest3;
s=SuiJi(); 
if(s<7)
{
battle=1;
guai=strongman;
printf("%s跑了过来!\n\n\n",guai.name);
BattleAct();
}
else if(s<9)
{
battle=1;
guai=big_strongman;
printf("%s走了过来!\n\n\n",guai.name);
BattleAct();
}
else
{
SlowDisplay("这里十分安全\n\n\n");
}
break;
case 6:
place_sign=place.grass1;
s=SuiJi(); 
if(s<7)
{
battle=1;
guai=bee;
printf("%s滑稽了过来!\n\n\n",guai.name);
BattleAct();
}
else if(s<9)
{
battle=1;
guai=horse;
printf("%s反正过来了!\n\n\n",guai.name);
BattleAct();
}
else
{
SlowDisplay("这里十分安全\n\n\n");
}
break;
case 7:
place_sign=place.grass2;
s=SuiJi(); 
if(s<7)
{
battle=1;
guai=horse;
printf("%s降了过来!\n\n\n",guai.name);
BattleAct();
}
else if(s<9)
{
battle=1;
guai=lion;
printf("%s游了过来!\n\n\n",guai.name);
BattleAct();
}
else
{
SlowDisplay("这里十分安全\n\n\n");
}
break;
case 8:
place_sign=place.grass3;
s=SuiJi(); 
if(s<7)
{
battle=1;
guai=lion;
printf("%s冒了过来!\n\n\n",guai.name);
BattleAct();
}
else if(s<9)
{
battle=1; 
if(strongman_arm)
{
SlowDisplay("滑稽老人:\n\n\n 哈哈,滑稽人,做的不错,不过...嘿嘿,你上当啦!滑稽之臂我要了,滑稽公主你也别想带走!\n\n\n");
guai=shitu;
printf("%s冒了过来!\n\n\n",guai.name);
BattleAct();
}
else SlowDisplay("滑稽老人:\n\n\n 滑稽人,你好啊.如果你有滑稽之臂,我可以告诉你滑稽公主的下落哦~\n\n\n");
}
else
{
SlowDisplay("这里十分安全\n\n\n");
}
break;
default:printf("choose map error!\n\n\n");
}
break;
case 2: ChooseWupin();break; //显示道具,并可以使用.
case 3: //对话选项
if(place_sign==place.bar)
{
SlowDisplay("要和谁说话?\n\n\n1,滑稽女郎 2,滑稽猎人 3,滑稽酒稽老板\n\n\n"); //显示对话人物
switch(scanf("%d",&choose_number),choose_number)
{
case 1:
SlowDisplay("滑稽女郎:\n\n\n 吧台边那个‘狗屎’好帅啊!(~脸滑稽红~)\n\n\n听说他经常外出打滑稽猎,外面的路他应该很熟悉的!\n\n\n");
break;
case 2:
if(fang1n<1&&gong1n<1)
{
SlowDisplay("滑稽猎人:\n\n\n 你要救滑稽公主啊!好胆量!\n\n\n 不过外面的滑稽丛林和滑稽草原很险恶,而且越深越危险,这是滑稽匕首和滑稽布衣,对你会有些帮助的,拿去吧!\n\n\n");
printf("%s心想:(哇,这位大叔人真好啊!\n\n\n)",player.name);
gong1n++;
fang1n++;
}
else SlowDisplay("滑稽猎人:\n\n\n 加油吧,滑稽人!\n\n\n 不要被外面滑稽丛林和滑稽草原所吓倒!\n\n\n");
break;
case 3:
printf("要喝点什么?\n\n\n 1,三锅头25滑稽币 爱豆+20 2,砸砸酒80滑稽币 爱豆+50 3,方便面150滑稽币 爱豆+100 0,返回\n\n\n");
choose_number=1;
while(choose_number)
{
switch(scanf("%d",&choose_number),choose_number)
{
case 1:if(money<25)
{
SlowDisplay("滑稽币不够!"); 
}
else
{
if(player.health+20<=player.max_health)
{
SlowDisplay("爱豆+20.");
money-=25;
player.health+=20;
}
else
{
SlowDisplay("爱豆满了"); 
player.health=player.max_health;
}
}
break;
case 2:if(money<80)
{
SlowDisplay("爱豆不够!"); 
}
else
{
if(player.health+50<=player.max_health)

{
SlowDisplay("爱豆+50.");
money-=80;
player.health+=50;
}
else
{
SlowDisplay("爱豆满了"); 
player.health=player.max_health;
}
}
break;
case 3:if(money<150)
{
SlowDisplay("滑稽币不够!"); 
}
else
{
if(player.health+100<=player.max_health)
{
SlowDisplay("爱豆+100.");
money-=150;
player.health+=100;
}
else
{
SlowDisplay("爱豆满了"); 
player.health=player.max_health;
}
}
break;
case 0:SlowDisplay("下次再来!\n");break;
default:SlowDisplay("输入错误\n\n\n");
}
}
}
}
else if(place_sign==place.hotel)
SlowDisplay("“滑稽娘!我...”\n\n\n“我忙着呢,没空理你~”\n\n\n");
else SlowDisplay("这里好像没人可以聊天\n\n\n");
break;
case 4: DisplayState(); break; //显示状态
case 5: //装备
printf("攻装: 1,滑稽匕首:%d个 2,长滑稽剑:%d个 3,碧血滑稽剑:%d个 4,滑稽好剑:%d个\n\n\n",gong1n,gong2n,gong3n,gong4n);
printf("防装: 5,滑稽布衣:%d个 6,滑稽铁甲:%d个 7,滑稽银甲:%d个 8,滑稽圣衣:%d个\t\t0,返回\n\n\n",fang1n,fang2n,fang3n,fang4n);
SlowDisplay("选择要装备的武器或防具:\n\n\n");
switch(scanf("%d",&choose_number),choose_number)
{
case 1:if(gong1n>=1)
{
SlowDisplay("拿起了滑稽匕首\n\n\n");
gong=gong1;
strcpy(gongname,"滑稽匕首");
}
else SlowDisplay("你没有滑稽匕首可以装备\n\n\n");
break;
case 2:if(gong2n>=1)
{
SlowDisplay("拿起了长滑稽剑\n\n\n");
gong=gong2;
strcpy(gongname,"长滑稽剑");
}
else SlowDisplay("你没有长滑稽剑可以装备\n\n\n");
break;
case 3:if(gong3n>=1)
{
SlowDisplay("拿起了碧血滑稽剑\n\n\n");
gong=gong3;
strcpy(gongname,"碧血滑稽剑");
}
else SlowDisplay("你没有碧血滑稽剑可以装备\n\n\n");
break;
case 4:if(gong4n>=1)
{
SlowDisplay("拿起了滑稽好剑\n\n\n");
gong=gong4;
strcpy(gongname,"绝世好剑");
}
else SlowDisplay("你没有滑稽好剑可以装备\n\n\n");
break;
case 5:if(fang1n>=1)
{
SlowDisplay("穿上了滑稽布衣\n\n\n");
fang=fang1;
strcpy(fangname,"滑稽布衣");
}
else SlowDisplay("你没有滑稽布衣可以装备\n\n\n");
break;
case 6:if(fang2>=1)
{
SlowDisplay("穿上了滑稽铁甲\n\n\n");
fang=fang2;
strcpy(fangname,"滑稽铁甲");
}
else SlowDisplay("你没有滑稽铁甲可以装备\n\n\n");
break;
case 7:if(fang3n>=1)
{
SlowDisplay("穿上了滑稽银甲\n\n\n");
fang=fang3;
strcpy(fangname,"滑稽银甲");
}
else SlowDisplay("你没有滑稽银甲可以装备\n\n\n");
break;
case 8:if(fang4n>=1)
{
SlowDisplay("穿上了滑稽圣衣\n\n\n");
fang=fang4;
strcpy(fangname,"滑稽圣衣");
}
else SlowDisplay("你没有滑稽圣衣可以装备\n\n\n");
break;
case 0:SlowDisplay("未更换滑稽装备\n\n\n");break;
default:printf("change error!");
}
break;
case 0:
SlowDisplay("确定退出游戏?(Y/N)\n\n\n");
getchar();
proof=getchar();
if(proof=='y'||proof=='Y')
{
SlowDisplay("滑稽存储中...");
//向文件中更新数据;
getchar();
SlowDisplay("按回车退出");
getchar();
return;
}
else if(proof=='n'||proof=='N')printf("继续滑稽游戏!\n\n\n");
else SlowDisplay("继续!\n\n\n");
break;
default:SlowDisplay("输入错误!\n\n\n");
}
}
}
void DisplayState()
{
printf("%s 杀人力:%d+%d=%d 防滑稽力:%d+%d=%d 爱豆:%d/%d \n\n\n",player.name,player.attack,gong,player.attack+gong,player.defense,fang,player.defense+fang,player.health,player.max_health);
printf("滑稽武器: %s 防滑稽具: %s \n\n\n",gongname,fangname);
printf("级别:%d 经验值:%d/%d 还需要%d经验升级 滑稽币:%d \n\n\n",player.level,player.exp,player.max_exp,player.max_exp-player.exp,money);
}
void BattleAct()
{
while(1)
{
puts("=============================================================================");
printf("要怎么办?\n\n\n 1,杀呀 2,滑稽物品 3,查看状态 4,滑稽逃跑\n\n\n");
switch(scanf("%d",&choose_number),choose_number)
{
case 1:
s=SuiJi();
printf("%s攻击! %s爱豆减少%d\n\n\n",player.name,guai.name,player.attack+s+gong-guai.defense/3);
guai.health-=player.attack+s+gong-guai.defense/3;
if(AttackResult())return; //如果攻击有结果(敌人或玩家战死)退出函数
else continue;
case 2: ChooseWupin();break; //选择物品,可以使用,战斗中允许使用攻击性物品
case 3:DisplayState();break; //显示状态
case 4:
s=SuiJi();
if(s<4) //40%的概率可以逃跑
{
printf("%s滑稽逃跑了~\n\n\n",player.name);
battle=0;
return;
}
else printf("%s滑稽逃跑失败!\n\n\n",player.name);
break;
default:SlowDisplay("输入错误,重新输入!\n\n\n");
}
}
}
void SlowDisplay(char *p)
{
while(1)
{
if(*p!=0)
printf("%c",*p++);
else
break;
Sleep(100);
}
} 
{{ vote && vote.total.up }}

共 5 条回复

caisen

这是抄袭的吧,之前我玩过,你就改了改名字

ykj110 贪吃蛇

。。。

chen_zhe 沙雕

这个游戏应该叫“滑稽救滑稽公主”

pikahuan 逗比

这个游戏有点智障啊

pikahuan 逗比

如何补给装备,装备越用越少