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 }
posted @ 2021-07-31 18:56  上官书房  阅读(316)  评论(0)    收藏  举报