C++(qt)游戏实战项目:坦克大战(前言)
来源:互联网 发布:压缩算法 pdf 编辑:程序博客网 时间:2024/06/08 15:29
坦克游戏,儿时的经典,同样是练手的经典小项目之一!
准备好开发环境
整体框架伪代码描述
游戏开始游戏初始化while(true){从消息队列收集信号signal swtich(signal){ case: 绘图信号 绘图信号处理函数 break; case:键盘信号 键盘信号处理函数 break; case:鼠标信号 鼠标信号处理函数 break; case:时钟信号 时钟信号处理函数 break; }}绘图信号处理函数(){地图对象->display();玩家坦克->display();............}地图类::display(){每个地图块对象->display();}键盘信号处理函数(){ if(按下M键) 游戏状态gamestatus设为地图编辑状态mapedit//地图编辑状态//author http://blog.csdn.net/qq_26046771/article/details/72636320if(gamestatus==mapedit){ else if(按下S) 保存地图 else if(按下l) 载入地图 发送重绘信号 }..................if(gamestatus==gameing){ switch(key){ case:上 玩家坦克->setdir(UP); break; ..... ... case:j 玩家状态设置为攻击状态 break; defalut:发送重绘信号 } }}鼠标信号处理函数(){ if(gamestatus=mapedit) { ..... }}时钟信号处理函数(){玩家坦克->move();//改变玩家对象的坐标 、碰撞检测等等敌人坦克-move();玩家炮弹->move();敌人炮弹->move();//改变对象的坐标 、碰撞检测等等,如果碰撞到玩家要将玩家的血量减少,全局变量player.downlife();if(玩家坦克处于攻击状态&&gamei%n==0)//gamei表示第几帧,通过调节n可以改变攻击速度玩家->attack();.............}attack(){将一颗炮弹对象加入到炮弹链表}
以上伪代码中主循环信号的收集和派发已经由Qt帮我们封装完成,我们需要完成的是各个信号处理函数和类的编写,类的结构层次如下
Wanwu类,先完成我们的万物类
//file:wanhu.h#ifndef WANWU_H#define WANWU_H#include<QPoint>#include<QRect>#include<QPainter>enum Dir { UP, DOWN, LEFT, RIGHT };class Wanwu{ protected: // 计算势力范围 virtual void CalculateSphere() = 0; // 位置 QPoint m_pos; // 势力范围 QRect m_rectSphere; // 颜色 //QColor m_color; // 方向 Dir m_dir; // 存在状态 bool m_bDisappear; // 单次前进步长 int m_step; //生命值 float life; //护甲 float hujia; //魔抗 float mokang; //物理攻击 float wuli; //法术攻击 float fashu; public: Wanwu(){}; // 绘图 virtual void Display(QPainter &paint) = 0; // 移动 virtual void Move() = 0; // 判断是否消失 bool IsDisappear(){return m_bDisappear;} //判断两物体是否碰撞 bool IsBoom(const Wanwu &wanwu)const; // void SetDisappear(bool tmp){m_bDisappear=tmp;} // QPoint getpos(){return m_pos;}};#endif // WANWU_H
//file:wanwu.c#include "wanwu.h"bool Wanwu::IsBoom(const Wanwu &wanwu)const{bool isok=true;if(wanwu.m_rectSphere.left()>m_rectSphere.right()||wanwu.m_rectSphere.right()<m_rectSphere.left()||wanwu.m_rectSphere.top()>m_rectSphere.bottom()||wanwu.m_rectSphere.bottom()<m_rectSphere.top())isok=false;return isok;}//可能以后地图块也可以移动和攻击,就这样吧
前言和第一章完成基本的类,第二章程序可以跑动起来,我们将看到地图界面
本文素材地址链接: https://pan.baidu.com/s/1qYRnTs4 密码: fhet,
自己动手先试试,后面某章中将提供整个项目源代码。
下一章C++(qt)游戏实战项目:坦克大战(一)将完成地图块的类
本文章为作者原创
转载请标明本文地址:http://blog.csdn.net/qq_26046771/article/details/72636320
阅读全文
23 0
- C++(qt)游戏实战项目:坦克大战(前言)
- C++(qt)游戏实战项目:坦克大战(一)
- C++(qt)游戏实战项目:坦克大战(二)
- C++(qt)游戏实战项目:坦克大战(三)
- C++(qt)游戏实战项目:坦克大战(四)
- C++(qt)游戏实战项目:坦克大战(五)
- C++(qt)游戏实战项目:坦克大战(六源代码)
- C++(qt)游戏实战项目:坦克大战(四)
- Java项目实战:坦克大战(1)
- C++实战项目:坦克大战(一)
- 【Java_项目篇<1>】--JAVA实现坦克大战游戏--坦克移动+添加敌方坦克(二)
- JAVA练手项目(三):坦克大战游戏源代码
- Unity3D游戏引擎实战开发从入门到精通(坦克大战项目实战、NGUI开发、GameObject)
- 图片版坦克大战游戏项目说明
- 小项目の坦克大战游戏
- 【Java_项目篇<1>】--JAVA实现坦克大战游戏--画出坦克(一)
- 【Java_项目篇<1>】--JAVA实现坦克大战游戏--坦克发射子弹(三)
- 【Java_项目篇<1>】--JAVA实现坦克大战游戏--修改BUG防止坦克重叠(六)
- Handler的原理
- Go计算MD5和SHA1
- linux命令整理
- Selenium 相关操作
- dp基础--POJ1189
- C++(qt)游戏实战项目:坦克大战(前言)
- Linux 无图形化安装Oracle 11gr2
- 5个Java代码性能优化总结
- 每天5道面试题——003
- SQLServer初次设置sa权限步骤
- poj 1741 tree
- MySQL Workbench中的缩写含义
- Echarts实例1-折线、饼图、柱状图混搭
- mysql(二)之连接