坦克大战,及源代码

上传人:ji****72 文档编号:37638212 上传时间:2018-04-20 格式:DOC 页数:10 大小:428KB
返回 下载 相关 举报
坦克大战,及源代码_第1页
第1页 / 共10页
坦克大战,及源代码_第2页
第2页 / 共10页
坦克大战,及源代码_第3页
第3页 / 共10页
坦克大战,及源代码_第4页
第4页 / 共10页
坦克大战,及源代码_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《坦克大战,及源代码》由会员分享,可在线阅读,更多相关《坦克大战,及源代码(10页珍藏版)》请在金锄头文库上搜索。

1、1采用双向循环链表作太极形式旋转的图案,图案的变化采用刷新屏幕的方法做到。首先,建立一个二维字符数组, 保存图形数据,然后通过更改该二维字符数组和清屏,再显示,做到图像的变化。用它提示坦克大战游戏的操作 方法。 再显示问题解决后,通过无回显读取函数 getch();和输入流检查函数 kbhit();读取输入的方向键或回车键进入下一页 面。用同样的方法,读取方向键和回车键,更改内部图案方法,使用户选择关: 第一关:仅有 4 个坦克同时作战,总数为 30 个! 第二关:仅有 5 个坦克同时作战,总数为 40 个! 第三关: 有 6 个坦克同时作战,总数为 50 个! 第四关: 有 7 个坦克同时作

2、战,总数为 60 个! 第五关: 有 8 个坦克同时作战,总数为 70 个! 选择关卡后,进入下一页面:进行相关提示。最后进入游戏界面。 也可以通过按左方向键返回上一级重新选择!2第一关到第三关:都是宽 80,高 42 的。 最后两关:都是宽 160,高 42 的。右击标题栏选择属性,进入设置。 接着就是进入最重要的坦克大战游戏了:这时采用的就不是刷新屏幕能解决的问题了。 由于界面太大,不能刷新屏幕,仅能用光标移动函数来更改图像。光标移动函数为 gotoxy(int ,int );读者自己查看定 义。采用同样输入流读取方法。接着是游戏规则,操作者用 W.w.A.a.S.s.D.d 移动坦克,空

3、格是停下。用方向键改变炮筒的方向,回车键是开火。 但当自己的炮弹还在运行时,不得开火!用链表保存每一辆坦克(包括主坦克)的数据。电脑控制的坦克,被控制者的坦克炮弹击中,就会发生爆炸,并 死亡。当界面上的所有坦克小于特定值时,如果内部还有未出现的坦克,就会在上方的随机位置,产生新坦克。 如果操作者的坦克被击中,它的 HP(我称为生命值)就会减一点。刚开始游戏时的 HP=5;但升级进入下一关时保留上一局的最后分数和 HP。不会重置。 但游戏中有补血包,可以补充生命值(HP)补血包每 90 秒出现一次,出现的时间长为 60 秒。如果在这期间操作者的 坦克运动到它的位置,补血包将给操作者的坦克补血。补

4、血包不会给其它坦克补血,仅会给操作者的坦克补血。 补血包会闪烁,提示它的出现。 界面还提供了每局的游戏时间。和剩敌数,及一些操作命令。当游戏结束或胜利要进入下一关时,界面还会运行 5 秒钟。 B.b.的暂停是用 getch();读取做到的。 退出是直接将循环条件重置为 0; 重载视图会在视图为 8042 的视图中显示边界,或消失边界。操作者可以自己调整。为了更好的游戏,让操作者的坦克跑得比其它坦克块。 当电脑控制的坦克在正前方发现操作者的坦克就准备并等待着开火。开火完就跑。 游戏的目的是反映的挑战。当游戏结束或退出时会回到关卡的选择界面,在那里选择退出,就会有留恋的告别对话,此时仍然可以返回上

5、一 级,继续游戏。 通过设置颜色改变字体和背景颜色,使界面更好看:以下是总结:3在这个有点大的游戏中最大的难题,不是显示问题,也不是同时控制多个对象的问题。 最难的有两个:一、坦克的智能化处理。二、修复 同时控制最多有 23 个对象时共用数据时产生的 bug。 如,当坦克被击中,就应该扫描是谁被击中,否则 不可能知道是谁。可是扫描到链表的最后一个节点 时,直接往下就将指针重置为 NULL 了,可是返回主 函数我还在求那个指针所指向的链表节点的数据。 直接接 bug,并且把所有的函数分开测或,重新检查, 再 100 年也检查不出问题的所在。这就是最大的痛 苦,前一次尝试,就是吃了这个苦头,前一天

6、晚上 检差到第二天的晚上都检查不出来。心理陷入极度 的痛苦,最终放弃。这就是最大的教训之一! 又比如:前一次尝试中,采用同一种方法控制所有 内部的坦克,结果所有的坦克,聚成一团,怎么也 拆不开。用统一的“引力”和“排斥力”都不管用。 写了一个又一个方案都只能宣告失败。自信受到了 极大的打击,十分痛苦。 经过演示版本(操作者的坦克阵亡后,不自动退出) 的测试: 在长达 13 小时多的 运行中没有任何 bug 的出现。这是一张代表图: 图案不同于其它的是 操作者控制的坦克。 有一辆坦克将炮筒指 向了它。它却先跑了 一段。圆球都是敌方 坦克的炮弹。它身陷 危险之中。因为这些 坦克是猛兽而并不像 表面

7、那么温和。 它的右上方有一个补 血包正在闪烁。下方 有很多重要的提示信 息。#include#include#include#include#includeusing std:cin;using std:cout;const int S_X=80; const int S_Y=40; int welcome(void);4void start_restart_end(int cammand);void message(int cammand);void new_tank(void);void auto_aim(void);void find_control_tank(void);void th

8、rough_all_aim(void);int tank_move(void);void fire(void);void shell_move(void);void shell_explode(void);void delete_tank(void);void tank_die(void);void renew_tank(void);int HP_plus(int cammand);void gotoxy(int x, int y);void write_1(int x,int y,char type);void write_3(int x,int y,char type);void writ

9、e_3_no(int x,int y,char type);char S_SS_YS_X;int the_right;char tank_xx37= “,“ “,“,tank_yy37= “ “,“,“ “;char tank_0_xx37=“,“ “,“,tank_0_yy37=“ “,“,“ “;char clear_337=“ “,“ “,“ “;char HP_showing37=“ “,“ “,“ “;char explode_showing_037=“,“,“,explode_showing_137=“,“,“;char fire_xx3=“,fire_yy3=“;char she

10、ll3=“;char clear_13=“ “;char well3=“;int control_tank_HP;int auto_tank_sum,auto_tank_now;int grade=0,score;struct tankint tank_direction_and_life;int change_direction_temporary;int tank_x;int tank_y;int shell_direction;int shell_explode;int shell_x;int shell_y;int aim_x;int aim_y;int fire_direction;

11、int found_enemy_and_wasting_fire;tank *next;*head=NULL,*here;void main()while(welcome()int control_upgrade=1;score=0;control_tank_HP=5;doint control_gaming=1,control_out=200;start_restart_end(1);message(1);int time_to_message=(int)time(0);int time_to_plus_HP=(int)time(0),have_HP_plus=0,time_pause_sa

12、ve;int control_tank_wasting_go=0,control_tank_going=0;int auto_tank_wasting_go=0,auto_tank_going=1;here=head-next;doSleep(25);int direction_key=0,cammand_to_control_tank=0;while(kbhit()switch(getch()case(224):direction_key=1;break;case(72):if(direction_key)cammand_to_control_tank=11;break;case(77):i

13、f(direction_key)cammand_to_control_tank=12;break;5case(75):if(direction_key)cammand_to_control_tank=14;break;case(80):if(direction_key)cammand_to_control_tank=13;break;case(13):cammand_to_control_tank=5;break;case(119):case(87):cammand_to_control_tank=1;break;case(97): case(65):cammand_to_control_ta

14、nk=4;break;case(115):case(83):cammand_to_control_tank=3;break;case(100):case(68):cammand_to_control_tank=2;break;case(32):cammand_to_control_tank=6;break;case(114):case(82):message(2);break;case(112):control_upgrade=0;control_gaming=0;break;case(66):case(98):message(3);time_pause_save=(int)time(0);g

15、etch();time_to_plus_HP+=(int)time(0)-time_pause_save);message(4);break;if(control_tank_HP)tank *temp_here=here;here=head;if(control_tank_wasting_go=0)if(control_tank_going)tank_move();control_tank_wasting_go=4;else-control_tank_wasting_go;switch(cammand_to_control_tank)case(11):case(12):case(13):case(14):here-fire_direction=cammand_to_control_tank%10;new_tank();break;case(1):case(2):case(3):case(4):here-tank_direction_and_life=cammand_to_control_tank;new_tank();control_tank_going=1;break;case(5):fire();break;case(6):control_tank_going=0;break;here=temp_here;if(aut

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号