c++小游戏-2 [yxzz]
得快两年前写的一个c++游戏(第二个,总共两个)
有些npc名字有些起的詪sd,看着好笑也就不改了
算法没有任何难度,就是纯模拟,当时也是无聊写了挺长时间
代码之前写的,相对于自己写的第一个游戏bug似乎少一些,自己试的机会也少一些,没发现什么能影响游戏体验的bug,如果有bug,希望各位玩家老爷原谅=-=(不打算改了,逃
附:1.相对于第一个游戏,有了一个长足的进步,就是能每次进行完操作之后清屏
2.游戏没有存档功能(不要被主界面上那个存档功能忽悠了),本来存档已经写好了,但是介于档的加密能力实在是有限,非常容易被篡改,篡改之后很可能出一些神奇的bug,思索在三,没写读档功能,兑换码自然也没有=-=
1 #include<bits/stdc++.h> 2 #include<windows.h> 3 using namespace std; 4 int money,jilv,level,atkway_num,human_num,atkstore_num,defstore_num,blmaxstore_num; 5 string atkstore[21]={"0","芦叶枪","龙鳞刀","博浪锤","宣化斧","虎符"}; 6 int atkplus[21]={0,5,10,20,50,100},atkcost[21]={0,600,1000,1600,3000,5000}; 7 string defstore[21]={"0","乾坤袋","白玉狮子","玉如意","藤甲"}; 8 int defplus[21]={0,5,10,20,50},defcost[21]={0,1000,1600,3000,6000}; 9 string blmaxstore[21]={"0","一瓶血量上限","五瓶血量上限","十瓶血量上限"}; 10 int blmaxplus[21]={0,100,500,1000},blmaxcost[21]={0,1000,4000,7000}; 11 string attack_way[101]={"0","凌空一掌","反身一脚","横劈一刀","斜刺一枪"}; 12 13 struct human 14 { 15 string name; 16 int atk,def,blood,blmax,fa; 17 bool live; 18 int head; 19 }; 20 human a[2001]; 21 22 char hehe[11][11]={ 23 " /| ", 24 " / | ", 25 " / | ", 26 "<_/|_>", 27 " |||| " 28 }; 29 30 int calw(int d) 31 { 32 int res=0; 33 while(d!=0) 34 { 35 d/=10; 36 res++; 37 } 38 return res; 39 } 40 41 void shenglve() 42 { 43 for(int i=1;i<=5;++i) 44 { 45 printf("."); 46 Sleep(200); 47 } 48 printf("."); 49 } 50 51 void jieshao(int d) 52 { 53 printf("\n"); 54 printf("-------------------------------------------\n"); 55 printf(" ·姓名: "); 56 cout<<a[d].name<<" "; 57 printf("攻击力: %d 防御力: %d 血量: %d",a[d].atk,a[d].def,a[d].blood); 58 if(d==0) 59 { 60 printf(" (上限为: %d) \n",a[d].blmax); 61 printf(" 当前金币数: %d 当前等级: %d\n",money,level); 62 printf("-------------------------------------------\n"); 63 printf("\n"); 64 return ; 65 } 66 printf("\n"); 67 printf(" 从属: "); 68 if(a[d].fa==-1) 69 printf("无\n"); 70 else 71 cout<<a[a[d].fa].name<<endl; 72 printf("-------------------------------------------\n"); 73 printf("\n"); 74 } 75 76 void kaishi() 77 { 78 printf("\n"); 79 for(int i=0;i<=4;++i) 80 { 81 for(int j=0;j<=5;++j) 82 printf("%c",hehe[i][j]); 83 printf("\n"); 84 } 85 printf("由呵呵游戏出品\n"); 86 printf("\n"); 87 printf("开始! O(∩_∩)O 祝你好运~\n"); 88 printf("--------------------------------------\n"); 89 printf(" ※每打一行字需要按回车Enter继续!※\n"); 90 printf("--------------------------------------\n"); 91 Sleep(500); 92 printf("缓冲中"); 93 shenglve(); 94 printf("\n"); 95 } 96 97 void renwu() 98 { 99 jilv=100; 100 human_num=20; 101 atkway_num=4; 102 atkstore_num=5; 103 defstore_num=4; 104 blmaxstore_num=3; 105 for(int i=1;i<=human_num;++i) 106 a[i].live=true; 107 a[1].name="菜鸡"; 108 a[1].blmax=10; 109 a[1].atk=1; 110 a[1].def=1; 111 a[2].name="逗比"; 112 a[2].blmax=10; 113 a[2].atk=10; 114 a[2].def=10; 115 a[3].name="盘古"; 116 a[3].blmax=10000; 117 a[3].atk=1000; 118 a[3].def=1000; 119 a[4].name="萧太后"; 120 a[4].blmax=200; 121 a[4].atk=50; 122 a[4].def=20; 123 a[5].name="任桓之"; 124 a[5].blmax=100; 125 a[5].atk=50; 126 a[5].def=20; 127 a[6].name="虞姬"; 128 a[6].blmax=200; 129 a[6].atk=10; 130 a[6].def=50; 131 a[7].name="项羽"; 132 a[7].blmax=400; 133 a[7].atk=20; 134 a[7].def=10; 135 a[8].name="澹台名"; 136 a[8].blmax=200; 137 a[8].atk=30; 138 a[8].def=20; 139 a[9].name="刘邦"; 140 a[9].blmax=1000; 141 a[9].atk=10; 142 a[9].def=10; 143 a[10].name="齐桓公"; 144 a[10].blmax=500; 145 a[10].atk=20; 146 a[10].def=10; 147 a[11].name="小乔"; 148 a[11].blmax=300; 149 a[11].atk=10; 150 a[11].def=50; 151 a[12].name="曹操"; 152 a[12].blmax=400; 153 a[12].atk=30; 154 a[12].def=10; 155 a[13].name="李自成"; 156 a[13].blmax=200; 157 a[13].atk=30; 158 a[13].def=30; 159 a[14].name="万能的太阳"; 160 a[14].blmax=10; 161 a[14].atk=10; 162 a[14].def=10; 163 a[15].name="陈胜"; 164 a[15].blmax=500; 165 a[15].atk=10; 166 a[15].def=10; 167 a[16].name="赵匡胤"; 168 a[16].blmax=300; 169 a[16].atk=20; 170 a[16].def=10; 171 a[17].name="朱元璋"; 172 a[17].blmax=400; 173 a[17].atk=20; 174 a[17].def=20; 175 a[18].name="杨玉环"; 176 a[18].blmax=300; 177 a[18].atk=30; 178 a[18].def=30; 179 a[19].name="赵飞燕"; 180 a[19].blmax=200; 181 a[19].atk=40; 182 a[19].def=10; 183 a[20].name="李煜"; 184 a[20].blmax=200; 185 a[20].atk=50; 186 a[20].def=50; 187 } 188 189 void frinit() 190 { 191 printf("请输入你的名字:(保证无空格,特殊字符)\n"); 192 printf(" "); 193 cin>>a[0].name; 194 a[0].blmax=5000; 195 a[0].blood=5000; 196 a[0].atk=10; 197 a[0].def=10; 198 a[0].live=true; 199 a[0].fa=-1; 200 money=1000; 201 jieshao(0); 202 renwu(); 203 system("pause"); 204 } 205 206 void fight() 207 { 208 system("cls"); 209 printf(" 选择你的对手 \n"); 210 printf("请输入一个不大于10000的正整数: "); 211 int comp; 212 scanf("%d",&comp); 213 comp=(comp+rand())%human_num+1; 214 printf("你的对手是: "); 215 cout<<a[comp].name<<endl; 216 a[comp].blood=a[comp].blmax; 217 jieshao(comp); 218 int turn=0; 219 jieshao(0); 220 while(a[0].blood!=0 && a[comp].blood!=0) 221 { 222 turn++; 223 printf("→第%d回合\n",turn); 224 printf(" 你的操作是: \n"); 225 printf(" 1-进攻\n"); 226 printf(" 2-逃跑(成功几率为 %d )\n",jilv); 227 int goal; 228 scanf("%d",&goal); 229 if(goal==1) 230 { 231 int youratkway=rand()%atkway_num+1,compatkway=rand()%atkway_num+1; 232 int yoursazi=rand()%6+1,compsazi=rand()%6+1; 233 int yourharm=a[comp].atk*compsazi-a[0].def; 234 int compharm=a[0].atk*yoursazi-a[comp].def; 235 printf("你"); 236 if(yoursazi==6) printf(" 暴击 "); 237 cout<<attack_way[youratkway]; 238 printf("对"); 239 cout<<a[comp].name; 240 printf("造成了%d点伤害 ",compharm); 241 printf("(%d*%d-%d)\n",a[0].atk,yoursazi,a[comp].def); 242 cout<<a[comp].name; 243 if(compsazi==6) printf(" 暴击 "); 244 cout<<attack_way[youratkway]; 245 printf("对你"); 246 printf("造成了%d点伤害 ",yourharm); 247 printf("(%d*%d-%d)\n",a[comp].atk,compsazi,a[0].def); 248 a[0].blood-=yourharm; 249 a[comp].blood-=compharm; 250 if(a[0].blood<=0) 251 { 252 a[0].live=false; 253 return ; 254 } 255 if(a[comp].blood<=0) 256 { 257 level++; 258 money+=(a[comp].blmax+a[comp].atk+a[comp].def)*5; 259 printf("战斗胜利! ヾ( ̄ー ̄)X(^▽^)ゞ\n"); 260 printf(" -等级+1\n"); 261 printf(" -金币+%d\n",(a[comp].blmax+a[comp].atk+a[comp].def)*5); 262 jieshao(0); 263 system("pause"); 264 return ; 265 } 266 } 267 if(goal==2) 268 { 269 if(jilv>=2) 270 { 271 int gailv=rand()%jilv+1; 272 jilv-=2; 273 if(gailv<=jilv+2) 274 { 275 printf("逃跑成功!\n"); 276 printf("返回主界面"); 277 shenglve(); 278 printf("\n"); 279 system("pause"); 280 return ; 281 } 282 } 283 printf("逃跑失败!\n"); 284 printf("呜呜呜┭┮ ﹏┭┮\n"); 285 } 286 } 287 system("pause"); 288 } 289 290 void store1() 291 { 292 system("cls"); 293 printf(" 0-返回主界面\n"); 294 for(int i=1;i<=atkstore_num;++i) 295 { 296 printf(" %d-",i); 297 cout<<atkstore[i]; 298 printf(" 增加攻击力: %d 花费金币: %d \n",atkplus[i],atkcost[i]); 299 } 300 printf(" [当前余额: %d]\n",money); 301 int temp; 302 scanf("%d",&temp); 303 if(temp==0) 304 return ; 305 if(atkcost[temp]>money) 306 printf("余额不足!购买失败\n"); 307 else 308 { 309 a[0].atk+=atkplus[temp]; 310 money-=atkcost[temp]; 311 jieshao(0); 312 } 313 } 314 315 void store2() 316 { 317 system("cls"); 318 printf(" 0-返回主界面\n"); 319 for(int i=1;i<=defstore_num;++i) 320 { 321 printf(" %d-",i); 322 cout<<defstore[i]; 323 printf(" 增加防御力: %d 花费金币: %d \n",defplus[i],defcost[i]); 324 } 325 printf(" [当前余额: %d]\n",money); 326 int temp; 327 scanf("%d",&temp); 328 if(temp==0) 329 return ; 330 if(defcost[temp]>money) 331 printf("余额不足!购买失败\n"); 332 else 333 { 334 a[0].def+=defplus[temp]; 335 money-=defcost[temp]; 336 jieshao(0); 337 } 338 } 339 340 void store3() 341 { 342 system("cls"); 343 printf(" 0-返回主界面\n"); 344 for(int i=1;i<=blmaxstore_num;++i) 345 { 346 printf(" %d-",i); 347 cout<<blmaxstore[i]; 348 printf(" 增加血量上限: %d 花费金币: %d \n",blmaxplus[i],blmaxcost[i]); 349 } 350 printf(" [当前余额: %d]\n",money); 351 int temp; 352 scanf("%d",&temp); 353 if(temp==0) 354 return ; 355 if(blmaxcost[temp]>money) 356 printf("余额不足!购买失败\n"); 357 else 358 { 359 a[0].blmax+=blmaxplus[temp]; 360 money-=blmaxcost[temp]; 361 jieshao(0); 362 } 363 } 364 365 void store() 366 { 367 system("cls"); 368 printf(" 0-返回主界面\n"); 369 printf("请选择你要购买的商品: \n"); 370 printf(" 1-攻击力\n"); 371 printf(" 2-防御力\n"); 372 printf(" 3-血量上限\n"); 373 int goal; 374 scanf("%d",&goal); 375 if(goal==0) 376 return ; 377 if(goal==1) 378 store1(); 379 if(goal==2) 380 store2(); 381 if(goal==3) 382 store3(); 383 printf("返回主界面中"); 384 shenglve(); 385 printf("\n"); 386 printf("\n"); 387 system("pause"); 388 } 389 390 void huixue() 391 { 392 system("cls"); 393 printf("你的血量上限: %d\n",a[0].blmax); 394 printf("当前血量: %d\n",a[0].blood); 395 int tempcost=a[0].blmax-a[0].blood; 396 printf("回血所需金币: %d\n",tempcost); 397 jieshao(0); 398 printf(" 是否回血?\n"); 399 printf(" 1-是 2-否\n"); 400 int goal; 401 scanf("%d",&goal); 402 if(goal==2) 403 return ; 404 if(goal==1) 405 { 406 if(money>=tempcost) 407 { 408 money-=tempcost; 409 a[0].blood=a[0].blmax; 410 printf("回血成功!\n"); 411 jieshao(0); 412 } 413 else 414 printf("余额不足!回血失败!\n"); 415 } 416 system("pause"); 417 } 418 419 void chaxun() 420 { 421 system("cls"); 422 jieshao(0); 423 printf(" ★胜利条件 ★\n"); 424 printf(" 人物等级达到20级\n"); 425 printf("\n"); 426 printf(" ★游戏规则 ★\n"); 427 printf(" 1.每回合双方轮流出招: 所受伤害=对方攻击力*(1~6)-己方防御力\n"); 428 printf(" 2.赢一局等级+1,逃跑等级不变\n"); 429 printf(" 3.每逃跑成功一次,逃跑成功几率-2 (满100)\n"); 430 printf(" 4.在商店购买加成的商品,在回血区回满血以备下一场更激烈的战斗\n"); 431 printf("\n"); 432 printf(" ~祝你好运 O(∩_∩)O~\n"); 433 printf("\n"); 434 system("pause"); 435 } 436 437 void dudang() 438 { 439 system("cls"); 440 printf("请输入存档时显示的进度信息: \n"); 441 printf(" (保证一行,无空格,与电脑输出的进度信息格式完全一致)"); 442 printf(" 请输入: "); 443 string s; 444 cin>>s; 445 } 446 447 void cundang() 448 { 449 system("cls"); 450 printf(" 0-返回主界面\n"); 451 printf("请确认当前人物信息无误: \n"); 452 jieshao(0); 453 printf("是否开始存档?\n") ; 454 printf(" 1-开始\n"); 455 printf(" 2-暂不存档\n"); 456 int goal; 457 scanf("%d",&goal); 458 if(goal==2) 459 return ; 460 printf("进度条生成中"); 461 shenglve(); 462 printf("\n"); 463 Sleep(1000); 464 printf(" 叮!进度信息生成完毕,请复制下面的进度信息条,并再读档时粘贴!\n"); 465 int t[101]; 466 memset(t,0,sizeof(t)); 467 t[0]=calw(money)-1; 468 t[1]=calw(level); 469 t[2]=calw(a[0].atk)-1; 470 t[3]=calw(a[0].def)-1; 471 t[4]=calw(a[0].blood)-1; 472 t[5]=calw(a[0].blmax)-1; 473 for(int i=1;i<=t[0];++i) 474 t[i*6]=money/pow(10,t[0]-i+1),t[i*6]%=10; 475 for(int i=1;i<=t[0];++i) 476 t[i*6+1]=level/pow(10,t[1]-i),t[i*6+1]%=10; 477 for(int i=1;i<=t[0];++i) 478 t[i*6+2]=a[0].atk/pow(10,t[2]-i+1),t[i*6+2]%=10; 479 for(int i=1;i<=t[0];++i) 480 t[i*6+3]=a[0].def/pow(10,t[3]-i+1),t[i*6+3]%=10; 481 for(int i=1;i<=t[0];++i) 482 t[i*6+4]=a[0].blood/pow(10,t[4]-i+1),t[i*6+4]%=10; 483 for(int i=1;i<=t[0];++i) 484 t[i*6+5]=a[0].blmax/pow(10,t[5]-i+1),t[i*6+5]%=10; 485 int tw=0; 486 for(int i=0;i<=29;++i) 487 printf("%d",t[i]); 488 printf("\n"); 489 system("pause"); 490 } 491 492 void duihuanma() 493 { 494 495 } 496 497 void dang() 498 { 499 system("cls"); 500 printf(" 0-返回主界面\n"); 501 printf("请进行操作: \n"); 502 printf(" 1-读档\n"); 503 printf(" 2-存档\n"); 504 printf(" 3-兑换码\n"); 505 int goal; 506 scanf("%d",&goal); 507 if(goal==0) 508 return ; 509 if(goal==1) 510 dudang(); 511 if(goal==2) 512 cundang(); 513 if(goal==3) 514 duihuanma(); 515 } 516 517 void zhujiemian() 518 { 519 system("cls"); 520 printf("请进行操作: \n"); 521 printf(" 1-战斗\n"); 522 printf(" 2-商店\n"); 523 printf(" 3-回血\n"); 524 printf(" 4-查询\n"); 525 printf(" 5-读档&存档&兑换码\n"); 526 int goal; 527 scanf("%d",&goal); 528 if(goal==1) 529 fight(); 530 if(goal==2) 531 store(); 532 if(goal==3) 533 huixue(); 534 if(goal==4) 535 chaxun(); 536 if(goal==5) 537 dang(); 538 } 539 540 int main() 541 { 542 srand((unsigned int) time (NULL)); 543 printf("~请按提示进行操作~\n"); 544 Sleep(300); 545 kaishi(); 546 //Sleep(5000); 547 system("cls"); 548 frinit(); 549 while(level<20 && a[0].live==true) 550 zhujiemian(); 551 if(a[0].live==false) 552 printf("┭┮﹏┭┮ 游戏失败! ┭┮﹏┭┮"); 553 if(level>=20) 554 printf("ヾ( ̄ー ̄)X(^▽^)ゞ 游戏胜利! ヾ( ̄ー ̄)X(^▽^)ゞ \n"); 555 printf("是否重新开始? 1-是 2-否\n"); 556 int goal; 557 scanf("%d",&goal); 558 while(goal==1) 559 { 560 printf("~请按提示进行操作~\n"); 561 Sleep(300); 562 kaishi(); 563 //Sleep(5000); 564 system("cls"); 565 frinit(); 566 while(level<20 && a[0].live==true) 567 zhujiemian(); 568 if(a[0].live==false) 569 printf("┭┮ ﹏┭┮ 游戏失败! ┭┮ ﹏┭┮"); 570 if(level>=20) 571 printf("ヾ( ̄ー ̄)X(^▽^)ゞ 游戏胜利! ヾ( ̄ー ̄)X(^▽^)ゞ \n"); 572 printf("是否重新开始? 1-是 2-否\n"); 573 scanf("%d",&goal); 574 } 575 return 0; 576 }

浙公网安备 33010602011771号