想从事一下开发游戏.
然后我是根据https://blog.csdn.net/u012999985/article/details/79118198链接学习的gad视频
笔记一般会记在ipad上, 这里放一下代码.
第一个题目:
有一个炮台会发射炮弹攻击飞机, 炮台的炮弹每秒钟可发射1个, 假设目前发射的是激光炮, 没有中间的飞行距离的考虑,
但是有50%的几率命中, 飞机每3秒钟产生一架. 当炮弹命中飞机时, 飞机爆炸并消失. 整个世界在30秒后, 结束.
~在炮台发射炮弹, 炮弹命中飞机, 炮弹没有命中飞机, 飞机产生, 飞机被命中爆炸这些时间点上, 在控制台上打印信息
~提示: 可以用定时器, 可以用一个死循环, 不断计算当前时间来计时
下面是我的代码
#include<iostream> #include<ctime> #include<cstdlib> using namespace std; class Gun { private: int alive_plane_num; time_t now_time, shoot_pasttime; inline void now(){ now_time=time(NULL); } public: Gun(){shoot_pasttime=0;} int shoot(int num){ now(); if(now_time-shoot_pasttime>1 && num>0 ){ shoot_pasttime = now_time; cout<<"shoot!"<<endl; return 1; } else{ return 0; } } }; class PlaneArea { private: int alive_plane_num; time_t now_time, fly_pasttime; inline void now() {now_time=time(NULL); } public: PlaneArea(){ alive_plane_num=0; fly_pasttime=0; alive_plane_num=0;} int fly(){ now(); if(now_time-fly_pasttime>3){ fly_pasttime = now_time; ++alive_plane_num; cout<<"出现一个飞机 飞机总数:"<<alive_plane_num<<endl; return alive_plane_num; } else { return alive_plane_num; } } void shoot_alive_plane_num( int num ){ if(alive_plane_num != 0 && num!=0){ alive_plane_num -= num; cout<<"天空爆炸并消失了一架飞机 剩余飞机:"<<alive_plane_num<<endl; } } }; int goal(int bullet, int plane){ if(bullet==0){ return 0; } else if(bullet==1 && plane>0){ srand( (unsigned)time(NULL) ); if(rand()%2==0 ){ cout<<"击中"<<endl; return 1; } else{ cout<<"没击中"<<endl; return 0; } } return 0; } int main() { Gun gun; PlaneArea planearea; time_t now_time,start_time; start_time = now_time = time(NULL); int alive_plane_flying; int num; while(now_time-start_time < 30){ now_time = time(NULL); alive_plane_flying = planearea.fly(); num = goal( gun.shoot( alive_plane_flying ), alive_plane_flying ); planearea.shoot_alive_plane_num( num ); } return 0; }
该题目的代码我认为需要优化.
我的设计想法是:
Planearea类用来发射飞机, 并且会返回一个值----目前天上存活的飞机数量
Gun类代表激光枪, 用来发射激光.
goal函数用来判断是否击中, 如果击中会返回一个击中的值(当然在这里只能是1or0)
疑惑一: 但是不知道为什么, 这样的程序运行个十几秒. 我的笔记本电脑风扇就开始狂转.
是因为程序写的不好吗? 需要一种方法能让我测评程序的运行状况, 程序的时间, 空间代价
疑惑二: 程序分析的不好, 要解耦, 各个类还应该有各自的职责. 写到main的时候, 写的不是很舒服.
不幸的是, 策划觉得这个游戏不好玩, 需求变更:
在上个世界中, 战斗变得更加激烈, 飞机每1秒钟会出现两架. 飞机在位置x:0, y:100
及x:100, y:100的位置产生, 激光炮在位置x:50,y:0上. 飞机在y轴上以每秒钟20的速度向y:0
的方向飞行, 一旦有飞机飞到了y:0, 则世界结束
提示: 激光炮应该首先设计离y:0更近的飞机, 而不是更远
#include<iostream> int main(){ //代码正在写. return 0; }