1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<time.h> //suiji 4 #include<string.h> 5 #include<windows.h> //SLEEP函数 6 struct Player //玩家结构体,并初始化player 7 { 8 char name[21]; 9 int attack; 10 int defense; 11 int health; 12 long int max_health; 13 int level; 14 int exp; 15 int range_exp; 16 long int max_exp; 17 }player={"勇者",50,40,100,100,1,0,0,100}; 18 struct Enemy //怪的结构体,并初始化各类怪 19 { 20 char name[20]; 21 char wupin[12]; 22 int attack; 23 int defense; 24 int health; 25 int money; 26 long int exp; 27 int wupin_sign; 28 int wupinpro; 29 int double_attack; 30 int miss; 31 }strongman={"森林巨人","黄金圣衣",40,50,350,200,100,1,2,1,0}, 32 witch={"森林女巫","银甲",25,15,100,50,50,2,2,1,1}, 33 xiyi={"森林蜥蜴","铁甲",18,10,50,30,35,3,3,2,2}, 34 big_strongman={"森林巨人王","巨人之臂",40*5,50*5,350*5,200*5,100*5,4,4,2,0}, 35 lion={"草原雄狮","绝世好剑",60,30,280,200,100,5,2,1,0}, 36 horse={"草原野马","碧血剑",28,12,90,50,50,6,2,1,1}, 37 bee={"草原黄蜂","长剑",17,11,60,30,35,7,3,2,2}, 38 shitu={"使徒","\0",60*8,30*8,280*8,200*8,100*8,9,1,1,0}, 39 guai={"\0","\0",0,0,0,0,0,0,0,0,0}; 40 struct Place 41 { 42 int bar,hotel,forest1,forest2,forest3,grass1,grass2,grass3; 43 }place={1,2,3,4,5,6,7,8}; 44 45 int max_exp=0; 46 int choose_number=0,s=0,strongman_arm=0,battle=0,money=500,place_sign=9; 47 int cao=3,jijiubao=2,baiyao=2,superbaiyao=1,boom=3,dubiao=2,atom_boom=1; 48 int fang=0,fang1=10,fang1n=0,fang2=20,fang2n=0,fang3=40,fang3n=0,fang4=100,fang4n=0; 49 int gong=0,gong1=8,gong1n=0,gong2=15,gong2n=0,gong3=25,gong3n=0,gong4=60,gong4n=0; 50 char gongname[20]="无",fangname[20]="无"; 51 char proof; 52 53 void AddWupin(int); 54 int AttackResult(); 55 void BattleAct(); 56 void ChooseWupin(); 57 void DisplayState(); 58 void OrdinaryAct(); 59 int SuiJi(); 60 int SuiJi100(); 61 void WhetherLevelUp(); 62 void SlowDisplay(char *); 63 64 int main() 65 { 66 67 68 int i=0,j=0,k=0; 69 char player_name[21]; 70 71 SlowDisplay("这是一个勇者的世界! 雅莉萨斯国的罗茜公主被陌生人绑架了!\n\n 伟大的勇者啊~拿起大家的武器,营救公主!\n\n\n输入你的名字: (20个字符)\n\n\n"); 72 73 // sndPlaySound("res\\F005.wav",SND_LOOP); 74 scanf("%s",player_name); 75 strncpy(player.name,player_name,20); 76 if(strcmp(player.name,"Semora勇敢战士")==0) 77 { 78 SlowDisplay("\n 隐身多年的 Semora勇敢战士 啊! 你终于出来了!雅莉萨斯国正须要你的帮助,快去吧!\n\n\n\n\n\n\n 这时,一道白光射出,射到了Semora勇敢战士的身上\n\n\n\n\n\n\n ......\n\n\n\n\n\n\n Semora勇敢战士 吸取能量ing... 随即... 能力觉醒!!!\n\n\n\n\n\n\n"); 79 player.attack=100000; 80 player.defense=100000; 81 player.health=100000; 82 player.max_health=100000; 83 } 84 else 85 { 86 SlowDisplay("\n雅莉萨斯国国王:\n\n\n 勇者,欢迎你来到个人王国!可是,因为个人女儿被抢走了,烦请勇士帮咱们一下吧!会有丰厚的报酬哦~~\n\n\n"); 87 printf("%s",player.name); 88 SlowDisplay(" :\n\n\n 您放心好了,我必定帮您把公主救出来!\n\n\n\n 国王大手一挥,你落到了这个世界,开始了拯救公主的征程。\n\n\n\n\n\n\n"); 89 } 90 getchar(); 91 92 OrdinaryAct(); 93 return 0; 94 } 95 96 int SuiJi() 97 { 98 srand((unsigned)time(NULL)); 99 return rand()%10; 100 } 101 102 103 int SuiJi100() 104 { 105 srand((unsigned)time(NULL)); 106 return rand()%100; 107 } 108 109 110 void ChooseWupin() //选择物品 并使用 111 { 112 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); 113 switch(scanf("%d",&choose_number),choose_number) 114 { 115 case 1: 116 if(cao>0) 117 { 118 SlowDisplay("使用止血草,HP增长60\n\n\n"); 119 cao--; 120 if(player.health+60>player.max_health)player.health=player.max_health; 121 else player.health+=60; 122 } 123 else SlowDisplay("没有止血草了\n\n\n"); 124 break; 125 case 2: 126 if(jijiubao>0) 127 { 128 SlowDisplay("使用急救包,HP增长80\n\n\n"); 129 jijiubao--; 130 if(player.health+80>player.max_health)player.health=player.max_health; 131 else player.health+=80; 132 } 133 else SlowDisplay("没有急救包了\n\n\n"); 134 break; 135 case 3: 136 if(baiyao>0) 137 { 138 SlowDisplay("使用云南白药,HP增长120\n\n\n"); 139 baiyao--; 140 if(player.health+120>player.max_health)player.health=player.max_health; 141 else player.health+=120; 142 } 143 else SlowDisplay("没有云南白药了\n\n\n"); 144 break; 145 case 4: 146 if(superbaiyao>0) 147 { 148 SlowDisplay("使用超级云南白药,HP增长200\n\n\n"); 149 superbaiyao--; 150 if(player.health+200>player.max_health)player.health=player.max_health; 151 else player.health+=200; 152 } 153 else SlowDisplay("没有超级云南白药了\n\n\n"); 154 break; 155 case 5: 156 if(battle) //在战斗中(battle=1),不然(battle=0)不能使用攻击性物品 157 { 158 if(boom>0) 159 { 160 SlowDisplay("使用手雷,敌人HP减小100\n\n\n"); 161 boom--; 162 guai.health-=100; 163 AttackResult(); 164 } 165 } 166 else SlowDisplay("非战斗状态,不能使用手雷!\n\n\n"); 167 break; 168 case 6: 169 if(battle) //在战斗中(battle=1),不然(battle=0)不能使用攻击性物品 170 { 171 if(dubiao>0) 172 { 173 SlowDisplay("使用毒标,敌人HP减小200\n\n\n"); 174 dubiao--; 175 guai.health-=200; 176 AttackResult(); 177 } 178 } 179 else SlowDisplay("非战斗状态,不能使用毒标!\n\n\n"); 180 break; 181 case 7: 182 if(battle) //在战斗中(battle=1),不然(battle=0)不能使用攻击性物品 183 { 184 if(atom_boom>0) 185 { 186 SlowDisplay("使用手抛式原子弹,敌人HP减小500\n\n\n"); 187 atom_boom--; 188 guai.health-=500; 189 AttackResult(); 190 } 191 } 192 else SlowDisplay("非战斗状态,不能使用手抛式原子弹!\n\n\n"); 193 break; 194 case 0:break; 195 default:printf("ChooseWupin error!\n\n\n"); 196 } 197 } 198 int AttackResult() //攻击结果:判断是否获胜 是否得到物品 和 是否升级 199 { 200 if(guai.health<=0) 201 { 202 battle=0; 203 printf("战斗胜利!得到金币%d,经验%d\n\n\n",guai.money,guai.exp); 204 player.exp+=guai.exp; 205 player.range_exp+=guai.exp; 206 money+=guai.money; 207 s=SuiJi(); 208 if(s<guai.wupinpro) 209 { 210 SlowDisplay("从敌人尸骸中发现"); 211 printf("%s\n\n\n",guai.wupin); 212 AddWupin(guai.wupin_sign); 213 } 214 WhetherLevelUp(); 215 if(strcmp(guai.name,"使徒")==0) 216 { 217 SlowDisplay("神秘老人(神色大变):\n\n\n 什么?你居然战胜了个人使徒?你究竟是谁?怎么会这么厉害?\n\n\n"); 218 printf("%s",player.name); 219 SlowDisplay(" : \n\n\n 嘿嘿,反正你也快死了,我就告诉你一条消息吧。我就是传说中的勇者!你想战胜我?没门!基于你的“良好”表现,我决定:杀了你,以绝后患!\n\n\n\n\n\n 这时,"); 220 printf("%s",player.name); 221 SlowDisplay("的手里发出一道白光,那白光直直的击中了老人,神秘老人和他手中的巨人之臂双双飞出,不过巨人之臂掉到了 "); 222 printf("%s",player.name); 223 SlowDisplay(" 的脚下,而神秘老人狠狠的撞到了岩石上,一口鲜血喷出......\n\n\n\n\n\n ......\n\n\n\n\n\n "); 224 printf("%s",player.name); 225 SlowDisplay("缓缓的走到神秘老人的面前,说:\n\n\n 如今,用你的生命来偿还吧!\n\n\n\n\n 老人惊恐的瞪着"); 226 printf("%s",player.name); 227 SlowDisplay(",而后化做一道白光,逃走了......\n\n\n\n\n 这时,一个铁笼出如今"); 228 printf("%s",player.name); 229 SlowDisplay("的面前,里面正关着泪流满面的公主。\n\n\n\n公主:\n\n\n 勇士,快来救我!\n\n\n"); 230 printf("%s",player.name); 231 SlowDisplay(" (皱眉头):\n\n\n 我该怎么救你呢?\n\n\n公主:\n\n\n 你把巨人之臂给我就好了。\n\n\n\n\n "); 232 printf("%s",player.name); 233 SlowDisplay("把巨人之臂经过铁笼的缝隙给了公主,公主用巨人之臂把锁的背面捅了两下,锁便开了,公主缓缓的走了出来,跟着你回到了皇宫^_^\n\n\n\n\n"); 234 puts("你完成了救出公主的任务,国王重赏了你!!!"); 235 getchar(); 236 getchar(); 237 exit(0); 238 } 239 return 1; //攻击有结果了返回1,不然返回0,用于判断是否继续作战斗行为 240 } 241 else 242 { 243 int s=SuiJi(); 244 245 246 if((guai.attack+s-player.defense/3)<0) 247 { 248 player.health-=1; 249 printf("%s反击,你的HP减小了 1\n\n",guai.name); 250 } 251 else 252 { 253 player.health-=guai.attack+s-player.defense/3; 254 printf("%s反击,你的HP减小了%d\n\n",guai.name,guai.attack+s-player.defense/3); 255 } 256 if(player.health<0) 257 { 258 if(strcmp(guai.name,"使徒")==0) 259 { 260 SlowDisplay("神秘老人(奸笑着):\n\n\n 嘿嘿,小子,想对付个人使徒你还嫩了点,如今,我要你的鲜血做为代价......哈哈哈哈哈哈...... \n\n\n"); 261 SlowDisplay("老人手一挥,使徒拿着钢刀冲过来......将刀对准了"); 262 printf("%s",player.name); 263 SlowDisplay("的脖子......而后......刀砍了下来......鲜血四溅......\n\n\n"); 264 battle=0; 265 printf("%s战死!金币掉落%d\n\n\n",player.name,player.level*500); 266 money-=player.level*500; 267 player.health=player.max_health/5; 268 SlowDisplay("\n\n\n\n\n\n\n 头好沉啊......怎么回事......我这是在哪里......\n 不对!我不是被使徒杀了吗?怎么复活了?不过把使徒杀了是个人任务!\n\n"); 269 SlowDisplay(" 你获得了国王的庇护,复活了!如今请从新开始任务吧!\n\n"); 270 } 271 else 272 { 273 battle=0; 274 printf("%s战死!金币掉落%d\n\n\n",player.name,player.level*500); 275 money-=player.level*500; 276 player.health=player.max_health/5; 277 } 278 OrdinaryAct();////////// 279 return 1; 280 } 281 } 282 return 0; 283 } 284 void AddWupin(int wupin_sign) 285 { 286 287 switch(wupin_sign) 288 { 289 case 1:fang4n++; break; 290 case 2:fang3n++; break; 291 case 3:fang2n++; break; 292 case 4:strongman_arm=1;break; 293 case 5:gong4n++; break; 294 case 6:gong3n++; break; 295 case 7:gong2n++; break; 296 default:printf("AddWupin error\n\n\n"); 297 } 298 299 } 300 void WhetherLevelUp() 301 { 302 int i=0,j=0; 303 int l1=player.range_exp/100; 304 int l2=player.range_exp/300; 305 int l3=player.range_exp/600; 306 if(player.level<=15&&l1>0) //15级如下,经验足够 都知足则升级 307 { 308 if(l1==1) 309 { 310 printf("%s",player.name); 311 SlowDisplay(" 升级!\n\n\n攻击力+3, 防护力+2, HP上限+20\n\n\n"); 312 player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; 313 player.attack+=3; 314 player.defense+=2; 315 player.max_health+=20; 316 player.health=player.max_health; 317 player.level++; 318 player.range_exp=0; 319 player.exp=player.max_exp; 320 player.max_exp+=100; 321 } 322 else 323 { 324 printf("好厉害!连升%d级!",l1); 325 printf("攻击力+%d, 防护力+%d, HP上限+%d\n\n\n",3*l1,2*l1,20*l1); 326 player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; 327 player.attack+=3*l1; 328 player.defense+=2*l1; 329 player.max_health+=20*l1; 330 player.health=player.max_health; 331 player.level+=l1; 332 player.range_exp=0; 333 player.exp=player.max_exp; 334 player.max_exp+=100*l1; 335 } 336 } 337 else if(player.level<=40&&l2>0) 338 { 339 if(l2==1) 340 { 341 printf("%s",player.name); 342 SlowDisplay(" 升级!\n\n\n攻击力+3, 防护力+2, HP上限+20\n\n\n"); 343 player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; 344 player.attack+=3; 345 player.defense+=2; 346 player.max_health+=20; 347 player.health=player.max_health; 348 player.level++; 349 player.range_exp=0; 350 player.exp=player.max_exp; 351 player.max_exp+=300; 352 } 353 else 354 { 355 printf("好厉害!连升%d级!",l1); 356 printf("攻击力+%d, 防护力+%d, HP上限+%d\n\n\n",3*l2,2*l2,20*l2); 357 player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; 358 player.attack+=3*l2; 359 player.defense+=2*l2; 360 player.max_health+=20*l2; 361 player.health=player.max_health; 362 player.level+=l2; 363 player.range_exp=0; 364 player.exp=player.max_exp; 365 player.max_exp+=300*l2; 366 } 367 } 368 else if(l3>0) 369 { 370 if(l3==1) 371 { 372 printf("%s",player.name); 373 SlowDisplay(" 升级!\n\n\n攻击力+3, 防护力+2, HP上限+20\n\n\n"); 374 player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; 375 player.attack+=3; 376 player.defense+=2; 377 player.max_health+=20; 378 player.health=player.max_health; 379 player.level++; 380 player.range_exp=0; 381 player.exp=player.max_exp; 382 player.max_exp+=600; 383 } 384 else 385 { 386 printf("好厉害!连升%d级!",l1); 387 printf("攻击力+%d, 防护力+%d, HP上限+%d\n\n\n",3*l3,2*l3,20*l3); 388 player.exp=player.exp+guai.exp-(player.exp+guai.exp)%100; 389 player.attack+=3*l3; 390 player.defense+=2*l3; 391 player.max_health+=20*l3; 392 player.health=player.max_health; 393 player.level+=l3; 394 player.range_exp=0; 395 player.exp=player.max_exp; 396 player.max_exp+=600*l3; 397 } 398 } 399 } 400 void OrdinaryAct() //正常行为菜单(移动,物品,对话,查看状态,装备,退出游戏) 401 { 402 403 while(1) 404 { 405 // \(1000); 406 // system("cls"); 407 puts("============================================================================="); 408 printf("要作什么?\n\n\n 1,移动 2,道具 3,对话 4,查看状态 5,装备 0,退出游戏\n\n\n"); 409 puts("============================================================================="); 410 switch(scanf("%d",&choose_number),choose_number) 411 { 412 case 1: //显示移动菜单 413 SlowDisplay("要去哪里?\n\n\n"); 414 printf("1,酒吧 2,旅馆 3,森林一层 4,森林二层 5,森林三层 6,草原一层 7,草原二层 8,草原三层\n\n\n"); 415 switch(scanf("%d",&choose_number),choose_number) 416 { 417 case 1:place_sign=place.bar; //记录目前位置-酒吧 418 // OrdinaryAct(); 419 break; 420 case 2:place_sign=place.hotel; //进入旅店 421 SlowDisplay("要住店吗? 200个金币 1,是 0,否\n\n\n"); 422 choose_number=1; 423 switch(scanf("%d",&choose_number),choose_number) 424 { 425 case 1:if(money-200<0) //判断钱是否够 426 { 427 SlowDisplay("Sorry,你的钱不够~\n\n\n"); 428 } 429 else 430 { 431 SlowDisplay("好好休息\n\tHP满\n\t\t次日了\n\n"); 432 money-=200; //花费200住店费 433 player.health=player.max_health; //体力满 434 } 435 break; 436 case 0:SlowDisplay("下次再来!\n\n\n");break; 437 default:printf("hotel talk error!\n\n\n"); 438 } 439 place_sign=0; 440 break; 441 case 3: 442 place_sign=place.forest1; 443 s=SuiJi(); 444 if(s<7) 445 { 446 battle=1; 447 guai=xiyi; 448 printf("%s扑了过来!\n\n\n",guai.name); 449 BattleAct(); 450 } 451 else if(s<9) 452 { 453 battle=1; 454 guai=witch; 455 printf("%s扑了过来!\n\n\n",guai.name); 456 BattleAct(); 457 } 458 else 459 { 460 SlowDisplay("这里安全\n\n\n"); 461 //不用调用OAct函数,会自动执行OAct函数; 462 } 463 break; 464 case 4: 465 place_sign=place.forest2; 466 s=SuiJi(); 467 if(s<7) 468 { 469 battle=1; 470 guai=witch; 471 printf("%s扑了过来!\n\n\n",guai.name); 472 BattleAct(); 473 } 474 else if(s<9) 475 { 476 battle=1; 477 guai=strongman; 478 printf("%s扑了过来!\n\n\n",guai.name); 479 BattleAct(); 480 } 481 else 482 { 483 SlowDisplay("这里安全\n\n\n"); 484 } 485 break; 486 case 5: 487 place_sign=place.forest3; 488 s=SuiJi(); 489 if(s<7) 490 { 491 battle=1; 492 guai=strongman; 493 printf("%s扑了过来!\n\n\n",guai.name); 494 BattleAct(); 495 } 496 else if(s<9) 497 { 498 battle=1; 499 guai=big_strongman; 500 printf("%s扑了过来!\n\n\n",guai.name); 501 BattleAct(); 502 } 503 else 504 { 505 SlowDisplay("这里安全\n\n\n"); 506 } 507 break; 508 case 6: 509 place_sign=place.grass1; 510 s=SuiJi(); 511 if(s<7) 512 { 513 battle=1; 514 guai=bee; 515 printf("%s扑了过来!\n\n\n",guai.name); 516 BattleAct(); 517 } 518 else if(s<9) 519 { 520 battle=1; 521 guai=horse; 522 printf("%s扑了过来!\n\n\n",guai.name); 523 BattleAct(); 524 } 525 else 526 { 527 SlowDisplay("这里安全\n\n\n"); 528 } 529 break; 530 case 7: 531 place_sign=place.grass2; 532 s=SuiJi(); 533 if(s<7) 534 { 535 battle=1; 536 guai=horse; 537 printf("%s扑了过来!\n\n\n",guai.name); 538 BattleAct(); 539 } 540 else if(s<9) 541 { 542 battle=1; 543 guai=lion; 544 printf("%s扑了过来!\n\n\n",guai.name); 545 BattleAct(); 546 } 547 else 548 { 549 SlowDisplay("这里安全\n\n\n"); 550 } 551 break; 552 case 8: 553 place_sign=place.grass3; 554 s=SuiJi(); 555 if(s<7) 556 { 557 battle=1; 558 guai=lion; 559 printf("%s扑了过来!\n\n\n",guai.name); 560 BattleAct(); 561 } 562 else if(s<9) 563 { 564 battle=1; 565 if(strongman_arm) 566 { 567 SlowDisplay("神秘老人:\n\n\n 哈哈,年轻人,作的不错,不过...嘿嘿,你上当啦!巨人之臂我要了,公主你也别想带走!\n\n\n\n"); 568 printf("%s",player.name); 569 SlowDisplay(" :\n\n\n 你休想!我好不容易才拿到巨人之臂,你别想占个人便宜!\n\n\n神秘老人(脸色阴沉):\n\n\n 既然你这么不识相,那么也别怪我不客气了!使徒,上!\n\n\n\n"); 570 guai=shitu; 571 printf("%s扑了过来!\n\n\n",guai.name); 572 BattleAct(); 573 } 574 else SlowDisplay("神秘老人:\n\n\n 年轻人,你好啊.若是你有巨人之臂,我能够告诉你公主的下落哦~\n\n\n"); 575 } 576 else 577 { 578 SlowDisplay("这里安全\n\n\n"); 579 } 580 break; 581 default:printf("choose map error!\n\n\n"); 582 } 583 break; 584 case 2: ChooseWupin();break; //显示道具,并可使用. 585 case 3: //对话选项 586 if(place_sign==place.bar) 587 { 588 SlowDisplay("要和谁说话?\n\n\n1,红发女郎 2,赏金猎人 3,酒吧老板\n\n\n"); //显示对话人物 589 switch(scanf("%d",&choose_number),choose_number) 590 { 591 case 1: 592 SlowDisplay("红发女郎:\n\n\n 吧台边那个Hunter好帅啊!(~脸红~)\n\n\n据说他常常外出打猎,外面的路他应该很熟悉的!\n\n\n"); 593 break; 594 case 2: 595 if(fang1n<1&&gong1n<1) 596 { 597 SlowDisplay("赏金猎人:\n\n\n 你要救公主啊!好胆量!\n\n\n 不过外面的丛林和草原很险恶,并且越深越危险,这是匕首和布衣,对你会有些帮助的,拿去吧!\n\n\n"); 598 printf("%s心想:(哇,这位大叔人真好啊!\n\n\n)",player.name); 599 gong1n++; 600 fang1n++; 601 } 602 else SlowDisplay("赏金猎人:\n\n\n 加油吧,年轻人!\n\n\n 不要被外面丛林和草原所吓倒!\n\n\n"); 603 break; 604 case 3: 605 printf("要喝点什么?\n\n\n 1,二锅头25金币 HP+20 2,XO酒80金币 HP+50 3,人头马面150金币 HP+100 0,返回\n\n\n"); 606 choose_number=1; 607 while(choose_number) 608 { 609 switch(scanf("%d",&choose_number),choose_number) 610 { 611 case 1:if(money<25) 612 { 613 SlowDisplay("钱不够!"); 614 } 615 else 616 { 617 if(player.health+20<=player.max_health) 618 { 619 SlowDisplay("HP+20."); 620 money-=25; 621 player.health+=20; 622 } 623 else 624 { 625 SlowDisplay("HP满了"); 626 player.health=player.max_health; 627 } 628 } 629 break; 630 case 2:if(money<80) 631 { 632 SlowDisplay("钱不够!"); 633 } 634 else 635 { 636 if(player.health+50<=player.max_health) 637 { 638 SlowDisplay("HP+50."); 639 money-=80; 640 player.health+=50; 641 } 642 else 643 { 644 SlowDisplay("HP满了"); 645 player.health=player.max_health; 646 } 647 } 648 break; 649 case 3:if(money<150) 650 { 651 SlowDisplay("钱不够!"); 652 } 653 else 654 { 655 if(player.health+100<=player.max_health) 656 { 657 SlowDisplay("HP+100."); 658 money-=150; 659 player.health+=100; 660 } 661 else 662 { 663 SlowDisplay("HP满了"); 664 player.health=player.max_health; 665 } 666 } 667 break; 668 case 0:SlowDisplay("下次在来!\n");break; 669 default:SlowDisplay("输入错误\n\n\n"); 670 } 671 } 672 } 673 } 674 else if(place_sign==place.hotel) 675 SlowDisplay("“老板娘!我...”\n\n\n“我忙着呢,没空理你~”\n\n\n"); 676 else SlowDisplay("这里好像没人能够聊天\n\n\n"); 677 break; 678 case 4: DisplayState(); break; //显示状态 679 case 5: //装备 680 printf("攻装: 1,匕首:%d个 2,长剑:%d个 3,碧血剑:%d个 4,绝世好剑:%d个\n\n\n",gong1n,gong2n,gong3n,gong4n); 681 printf("防装: 5,布衣:%d个 6,铁甲:%d个 7,银甲:%d个 8,黄金圣衣:%d个\t\t0,返回\n\n\n",fang1n,fang2n,fang3n,fang4n); 682 SlowDisplay("选择要装备的武器或防具:\n\n\n"); 683 switch(scanf("%d",&choose_number),choose_number) 684 { 685 case 1:if(gong1n>=1) 686 { 687 SlowDisplay("拿起了匕首\n\n\n"); 688 gong=gong1; 689 strcpy(gongname,"匕首"); 690 } 691 else SlowDisplay("你没有匕首能够装备\n\n\n"); 692 break; 693 case 2:if(gong2n>=1) 694 { 695 SlowDisplay("拿起了长剑\n\n\n"); 696 gong=gong2; 697 strcpy(gongname,"长剑"); 698 } 699 else SlowDisplay("你没有长剑能够装备\n\n\n"); 700 break; 701 case 3:if(gong3n>=1) 702 { 703 SlowDisplay("拿起了碧血剑\n\n\n"); 704 gong=gong3; 705 strcpy(gongname,"碧血剑"); 706 } 707 else SlowDisplay("你没有碧血剑能够装备\n\n\n"); 708 break; 709 case 4:if(gong4n>=1) 710 { 711 SlowDisplay("拿起了绝世好剑\n\n\n"); 712 gong=gong4; 713 strcpy(gongname,"绝世好剑"); 714 } 715 else SlowDisplay("你没有绝世好剑能够装备\n\n\n"); 716 break; 717 case 5:if(fang1n>=1) 718 { 719 SlowDisplay("穿上了布衣\n\n\n"); 720 fang=fang1; 721 strcpy(fangname,"布衣"); 722 } 723 else SlowDisplay("你没有布衣能够装备\n\n\n"); 724 break; 725 case 6:if(fang2>=1) 726 { 727 SlowDisplay("穿上了铁甲\n\n\n"); 728 fang=fang2; 729 strcpy(fangname,"铁甲"); 730 } 731 else SlowDisplay("你没有铁甲能够装备\n\n\n"); 732 break; 733 case 7:if(fang3n>=1) 734 { 735 SlowDisplay("穿上了银甲\n\n\n"); 736 fang=fang3; 737 strcpy(fangname,"银甲"); 738 } 739 else SlowDisplay("你没有银甲能够装备\n\n\n"); 740 break; 741 case 8:if(fang4n>=1) 742 { 743 SlowDisplay("穿上了黄金圣衣\n\n\n"); 744 fang=fang4; 745 strcpy(fangname,"黄金圣衣"); 746 } 747 else SlowDisplay("你没有黄金圣衣能够装备\n\n\n"); 748 break; 749 case 0:SlowDisplay("未更换装备\n\n\n");break; 750 default:printf("change error!"); 751 } 752 break; 753 case 0: 754 SlowDisplay("肯定推出游戏?(Y/N)\n\n\n"); 755 getchar(); 756 proof=getchar(); 757 if(proof=='y'||proof=='Y') 758 { 759 SlowDisplay("数据存储中..."); 760 //向文件中更新数据; 761 getchar(); 762 SlowDisplay("按回车退出"); 763 getchar(); 764 return; 765 } 766 else if(proof=='n'||proof=='N')printf("继续游戏!\n\n\n"); 767 else SlowDisplay("继续!\n\n\n"); 768 break; 769 default:SlowDisplay("输入错误!\n\n\n"); 770 } 771 } 772 } 773 void DisplayState() 774 { 775 printf("%s 攻击力:%d+%d=%d 防护力:%d+%d=%d HP:%d/%d \n\n\n",player.name,player.attack,gong,player.attack+gong,player.defense,fang,player.defense+fang,player.health,player.max_health); 776 printf("武器: %s 防具: %s \n\n\n",gongname,fangname); 777 printf("等级:%d 经验:%d/%d 还须要%d经验升级 金币:%d \n\n\n",player.level,player.exp,player.max_exp,player.max_exp-player.exp,money); 778 } 779 void BattleAct() 780 { 781 while(1) 782 { 783 puts("============================================================================="); 784 printf("要怎么办?\n\n\n 1,攻击 2,物品 3,查看状态 4,逃跑\n\n\n"); 785 switch(scanf("%d",&choose_number),choose_number) 786 { 787 case 1: 788 s=SuiJi(); 789 printf("%s攻击! %sHP减小%d\n\n\n",player.name,guai.name,player.attack+s+gong-guai.defense/3); 790 guai.health-=player.attack+s+gong-guai.defense/3; 791 if(AttackResult())return; //若是攻击有结果(敌人或玩家战死)退出函数 792 else continue; 793 case 2: ChooseWupin();break; //选择物品,可使用,战斗中容许使用攻击性物品 794 case 3:DisplayState();break; //显示状态 795 case 4: 796 s=SuiJi(); 797 if(s<4) //40%的几率能够逃跑 798 { 799 printf("%s逃跑了~\n\n\n",player.name); 800 battle=0; 801 return; 802 } 803 else printf("%s逃跑失败!\n\n\n",player.name); 804 break; 805 default:SlowDisplay("输入错误,从新输入!\n\n\n"); 806 } 807 } 808 } 809 void SlowDisplay(char *p) 810 { 811 while(1) 812 { 813 if(*p!=0) 814 printf("%c",*p++); 815 else 816 break; 817 Sleep(100); 818 } 819 }