MFC项目编写了一个最经典飞机大战游戏戏,如何生成静态编译无库依赖的可执行程序

投稿:54粉丝:1016分享--dynmicweibozoneqqbaidu将视频贴到博客或论坛视频地址复制嵌入代码复制微信扫一扫分享收藏0硬币--稍后看马克一下~用手机看转移阵地~用或其他应用扫描二维码手机下视频请使用扫码若未安装客户端,可直接扫此码下载应用未经作者授权 禁止转载
看过该视频的还喜欢正在加载...miniOFF现在在实训MFC做飞机大战,求大神告知怎么改游戏背景啊?【程序员吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:120,213贴子:
现在在实训MFC做飞机大战,求大神告知怎么改游戏背景啊?收藏
学渣一枚,并不知道怎么改,求大神告知,谢谢
千锋程序员,名企内部推荐就业,入学签订就业协议,2周免费试学!千锋程序员,20周快速成为高级开发工程师,就业“薪”踏板!
今年轮到我了
今年轮到我了
登录百度帐号豆丁微信公众号
君,已阅读到文档的结尾了呢~~
飞机大战实训报告
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
飞机大战实训报告
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口网站已改版,请使用新地址访问:
MFC-PlaneGame 本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成 界面简洁流畅、 方式 Windows Develop 238万源代码下载- www.pudn.com
&文件名称: MFC-PlaneGame
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 25968 KB
&&上传时间:
&&下载次数: 7
&&提 供 者:
&详细说明:本次实训项目是做一个飞机大战的游戏,应用MFC编程,完成一个界面简洁流畅、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。-
The training project is to do a war game plane, simplicity MFC application programming interface to complete a simple way to play, play with easy to use desktop game. The World War II aircraft project using technology that is primarily MFC programming some functions, thinking and mapping technology list.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&MFC PlaneGame&&.............\c++实训报告.doc&&.............\PlaneGame&&.............\.........\Debug&&.............\.........\PlaneGame&&.............\.........\PlaneGame.ncb&&.............\.........\PlaneGame.sln&&.............\.........\PlaneGame.suo&&.............\.........\.........\Ball.cpp&&.............\.........\.........\Ball.h&&.............\.........\.........\Bomb.cpp&&.............\.........\.........\Bomb.h&&.............\.........\.........\Debug&&.............\.........\.........\.....\Ball.obj&&.............\.........\.........\.....\Bomb.obj&&.............\.........\.........\.....\BuildLog.htm&&.............\.........\.........\.....\Enemy.obj&&.............\.........\.........\.....\Explosion.obj&&.............\.........\.........\.....\GameObject.obj&&.............\.........\.........\.....\MainFrm.obj&&.............\.........\.........\.....\mt.dep&&.............\.........\.........\.....\MyPlane.obj&&.............\.........\.........\.....\PlaneGame.exe.embed.manifest&&.............\.........\.........\.....\PlaneGame.exe.embed.manifest.res&&.............\.........\.........\.....\PlaneGame.exe.intermediate.manifest&&.............\.........\.........\.....\PlaneGame.obj&&.............\.........\.........\.....\PlaneGame.pch&&.............\.........\.........\.....\PlaneGame.res&&.............\.........\.........\.....\PlaneGameDoc.obj&&.............\.........\.........\.....\PlaneGameView.obj&&.............\.........\.........\.....\stdafx.obj&&.............\.........\.........\.....\vc90.idb&&.............\.........\.........\.....\vc90.pdb&&.............\.........\.........\Enemy.cpp&&.............\.........\.........\Enemy.h&&.............\.........\.........\Explosion.cpp&&.............\.........\.........\Explosion.h&&.............\.........\.........\GameObject.cpp&&.............\.........\.........\GameObject.h&&.............\.........\.........\images&&.............\.........\.........\......\backGround.bmp&&.............\.........\.........\......\ball.BMP&&.............\.........\.........\......\bombDown.BMP&&.............\.........\.........\......\bombUp.bmp&&.............\.........\.........\......\enemy.bmp&&.............\.........\.........\......\explosion.BMP&&.............\.........\.........\......\me.bmp&&.............\.........\.........\......\Thumbs.db&&.............\.........\.........\MainFrm.cpp&&.............\.........\.........\MainFrm.h&&.............\.........\.........\MyPlane.cpp&&.............\.........\.........\MyPlane.h&&.............\.........\.........\PlaneGame.aps&&.............\.........\.........\PlaneGame.cpp&&.............\.........\.........\PlaneGame.h&&.............\.........\.........\PlaneGame.rc&&.............\.........\.........\PlaneGame.vcproj&&.............\.........\.........\PlaneGame.vcproj.A83.k01.user&&.............\.........\.........\PlaneGame.vcproj.C105.k01.user&&.............\.........\.........\PlaneGame.vcproj.hao-PC.hao.user&&.............\.........\.........\PlaneGame.vcproj.ZX37FEQC78D01U4.Administrator.user&&.............\.........\.........\PlaneGame.vcproj.ZZUIE5v5-PC.ZZUIE5v5.user&&.............\.........\.........\PlaneGameDoc.cpp&&.............\.........\.........\PlaneGameDoc.h&&.............\.........\.........\PlaneGameView.cpp&&.............\.........\.........\PlaneGameView.h&&.............\.........\.........\ReadMe.txt&&.............\.........\.........\Release&&.............\.........\.........\.......\Ball.obj&&.............\.........\.........\.......\Bomb.obj&&.............\.........\.........\.......\BuildLog.htm&&.............\.........\.........\.......\Enemy.obj&&.............\.........\.........\.......\Explosion.obj&&.............\.........\.........\.......\GameObject.obj&&.............\.........\.........\.......\MainFrm.obj&&.............\.........\.........\.......\mt.dep&&.............\.........\.........\.......\MyPlane.obj&&.............\.........\.........\.......\PlaneGame.exe.intermediate.manifest&&.............\.........\.........\.......\PlaneGame.obj&&.............\.........\.........\.......\PlaneGame.pch&&.............\.........\.........\.......\PlaneGame.res&&.............\.........\.........\.......\PlaneGameDoc.obj&&.............\.........\.........\.......\PlaneGameView.obj&&.............\.........\.........\.......\stdafx.obj&&.............\.........\.........\.......\vc90.idb&&.............\.........\.........\.......\vc90.pdb&&.............\.........\.........\res&&.............\.........\.........\resource.h&&.............\.........\.........\...\PlaneGame.ico&&.............\.........\.........\...\PlaneGame.rc2&&.............\.........\.........\...\PlaneGameDoc.ico&&.............\.........\.........\...\Toolbar.bmp&&.............\.........\.........\sound&&.............\.........\.........\.....\sound1.wav&&.............\.........\.........\.....\sound2.wav&&.............\.........\.........\.....\sound3.wav&&.............\.........\.........\.....\sound4.wav&&.............\.........\.........\stdafx.cpp&&.............\.........\.........\stdafx.h&&.............\.........\.........\targetver.h
&近期下载过的用户:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 英文词频统计,单复数算一个单词,大小写算一个单词
&[] - 经典的windows扫雷程序,其基本功能几乎一样
&[] - 基于DirectX的飞机大战游戏
用MFC/VC++实现
&[] - windows编程拼图游戏,采用VC++编程,易上手
&[] - 抢答器 vc编写的小程序 很好用 windows平台使用  唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的。说是用html5做,发现全都是js。说js里一切皆为对象,写的最多的还是函数,都是函数调用。对这两天的代码做个总结,希望路过的大神指点一下,我对这个游戏的思路,可改进优化的代码。
  先说一下游戏的基本内容: 打飞机(不要想歪了),有鼠标控制移动英雄机,子弹自动射击;敌机从上而下,有三种敌机;
  先说下HTML代码(主要就是这一行):  
&canvas id="canFly" width="480" height="650"&&/canvas&
一、对这个游戏的的基本数据状态做定义
  主要包括:
    游戏的状态: 开始状态 英雄机入场状态 游戏进行状态 暂停状态 gameOver;得分 英雄机的生命 
1 var canvas = document.getElementById("canFly");//获取canvas元素
2 //创建画布对象
3 var context = canvas.getContext("2d");
4 //游戏的基本数据
5 var gameData = {
state : this.START,
//游戏状态
START : 0,//开始界面状态
STARTING : 1,//入场动画过渡状态
RUNNING : 2,//游戏运行状态
PAUSED : 3,//暂停
GAMEOVER : 4,//游戏结束
//英雄机生命
heroLife : 3,
score : 0,
//画布宽高
HEIGHT : canvas.height
二、对图片资源的加载及初始化相关数据
/*-- 加载游戏图片 -------------------------------------------------------------------*/
//背景图片
var bgImg = new Image();
bgImg.src="images/background.png";
//logo图片
var startLogo = new Image();
startLogo.src = "images/start.png";
//加载飞机入场动画
var loadings = [];
loadings[0] = new Image();
loadings[0].src="Images/game_loading1.png";
loadings[1] = new Image();
loadings[1].src="Images/game_loading2.png";
loadings[2] = new Image();
loadings[2].src="Images/game_loading3.png";
loadings[3] = new Image();
loadings[3].src="Images/game_loading4.png";
//加载英雄机图片
var heros = [];
heros[0] = new Image();
heros[0].src="images/hero1.png";
heros[1] = new Image();
heros[1].src="images/hero2.png";
//英雄机爆破动画图片
heros[2] = new Image();
heros[2].src="images/hero_blowup_n1.png";
heros[3] = new Image();
heros[3].src="images/hero_blowup_n2.png";
heros[4] = new Image();
heros[4].src="images/hero_blowup_n3.png";
heros[5] = new Image();
heros[5].src="images/hero_blowup_n4.png";
//加载子弹的图片
var bullet = [];
bullet[0] = new Image();
bullet[0].src = "images/bullet1.png";
/*-- 初始化游戏内容相关数据 --*/
//初始化游戏背景图片数据
var SKY = {
imgs : bgImg,//背景图片
width : 480,//图片宽度
height : 852 //图片高度
//初始化英雄机入场动画图片数据
var LOADING = {
imgs : loadings,
width : 186,//图片宽度
height : 38,//图片高度
sum : loadings.length //图片个数
//初始化英雄机的数据
var HERO = {
imgs : heros,
width : 99,
height : 124,
sum : heros.length,
length : 2//我方飞机正常图片个数
//初始化子弹的数据
var BULLET = {//默认子弹
imgs : bullet,
width : 9,
height : 21,
sum : bullet.length
30 .......
三、公用构造器及对象实例化
  定义一个公用的构造器函数,这是我写这个游戏认最大的收获了,在这里体会到了面向对象的思想;相当于定义一个基础类,所有的构造器都用公用构造器函数进行初始化,提高代码的复用,然而在我的优化过程中仅仅只是节省了50多行的代码。
  公共构造器函数:在这里定义了图片的宽高,图片对象是否执行爆破,是否删除,图片绘制坐标等一些公共的属性和方法
/*-- 通用构造器对象 前端代码尽量地使用通用代码 -------------------------------------------------------------------------------------------------------*/
function Compant(config){
//加载图片
this.imgs = config.
//图片的宽度和高度
this.width = config.
this.height = config.
this.sum = config.
this.length = config.
// 敌方飞机具有以下属性
this.type = config.//敌机类型
this.life = config.//敌机声明值
this.score = config.//敌机分数
// 设置相对速度
this.time = 0;
// 设置图片的索引值
this.index = 0;
// 是否执行爆破动画的标识
this.down = false;
// 是否删除标识
this.canDelete = false;
//绘图坐标
this.x = 0;
this.y = 0;
// 绘制方法
this.paint = function(){
context.drawImage(this.imgs[this.index],this.x,this.y);
// 移动方法
this.step = function(){}
// 执行撞击后的逻辑方法
this.bang = function(){}
&  继承实例化:
//创建背景图片的构造器
function BgSky(config){
//调用通用构造器初始化
Compant.call(this,config);
//图片绘制高度变量
this.y1 = -this.
this.y2 = 0;
//定义绘制方法
this.paint = function(){
context.drawImage(this.imgs,0,this.y1);//第一张图片
context.drawImage(this.imgs,0,this.y2);//第二张图片
//背景heigth运动方法
this.step = function(){
this.time++;
if (this.time%3==0)
{//控制背景图片height值的增加
this.y1++;//图片运动下一帧
this.y2++;
//图片移动处画布后将y坐标重置为-height 实现图片衔接滚动
this.y1&this.height&&(this.y1 = -this.height);
this.y2&this.height&&(this.y2 = -this.height);
this.time=1;//重置移动时间
//创建图片对象
var sky = new BgSky(SKY);
//---英雄机入场动画构造器
function Loading(config){
Compant.call(this,config);
//定义绘制
this.paint = function(){
//绘制飞机入场动画图片
context.drawImage(this.imgs[this.index],0,gameData.HEIGHT-this.height);
//定义入场动画
this.step = function(){
this.time++;
if (this.time%20==0)
{//实现动画的播放速度
this.index++;//下一帧动画
if (this.index==this.sum)
{//判断动画结束后,更改游戏的状态,进入第三阶段游戏阶段
gameData.state=gameData.RUNNING;
this.time=0;//重置动画时间
//创建飞机入场动画的对象
var loading = new Loading(LOADING);
  利用这种方式将所有的对象都进行实例化,并添加相应的方法
四、英雄机的子弹发射
  英雄机的子弹发射是自动,就是说只要控制好装弹的频率就可以了;英雄机发射子弹就是向子弹数组中添加子弹
bullets[bullets.length] = new Bullet(BULLET);;//向子弹数组中添加子弹
&  子弹的移动,撞击,删除等功能在子弹的构造函数中定义,英雄机只管装弹的频率;
  子弹的绘制:
function paintBullets(){
for (var i=0, length=bullets.
bullets[i].paint();//绘制当前子弹
if (gameData.state==gameData.RUNNING)
{//游戏运行中时移动子弹
bullets[i].step();//移动子弹
  删除子弹的判断:
function clearStep(){
for (var i = bullets.length-1; i&=0 ; i--)
if (bullets[i].y&=-bullets[i].height || (bullets[i].canDelete))
bullets.splice(i,1);//删除当前超出屏幕的子弹和撞机的子弹
}      //这个函数可以跟上边的合并到一起
五、敌机的相关设置
  敌机的创建: 应为有三种类型的敌机,按照几率小的最多,中飞机的其次,打飞机满屏只能有一个
//创建用于创建敌方飞机的函数
function createEnemies(){
/*创建敌方飞机 - 小,中,大*/
var num = Math.floor(Math.random()*100);
if (num & 80)
enemies[enemies.length] = new Enemy(ENEMY1);
}else if (num & 90)
enemies[enemies.length] = new Enemy(ENEMY2);
//大飞机只能存在一个
if (enemies.length & 0 && enemies[0].type != 2)
enemies.unshift(new Enemy(ENEMY3));//将大飞机添加到数组开头,这样每次判断数组第一个就可以知道
   对敌机的绘制,检测敌机是否超出屏幕,是否被打中,是否需要爆炸,是否和英雄机相撞等
function paintEnemiesAndCheckHit(){
for (var i=0; i&enemies. i++)
{//遍历敌机
var enemy = enemies[i];//敌机
//检测敌机和英雄机是否碰撞
if ((enemy.y & gameData.HEIGHT)||(enemy.canDelete))
enemies.splice(i,1);//删除当前超出屏幕的飞机
enemy.paint();//绘制飞机
if (gameData.state == gameData.RUNNING)
{//游戏运行中时才移动飞机
enemy.step();//移动飞机
//判断是否和我方飞机碰撞
if (enemy&&enemy.hit(hero))
{//敌机和我方飞机相撞
enemy.bang();
hero.bang();//飞机销毁
//判断子弹
for (var j=0; j&bullets. j++)
{//子弹遍历
var bullet = bullets[j];//子弹
if (enemy.hit(bullet))
{//子弹撞机敌方飞机
enemy.bang();//删除敌机
bullet.bang();//删除子弹
六、主体流程的控制
  这里使用switch来控制在执行相应状态的操作,使用setTimeout来控制循环的进行,感觉setTimeout比setInterval更加的容易控制
//根据游戏状态执行相应操作
switch (gameData.state)
case gameData.START://游戏开始状态
context.drawImage(startLogo,30,0);//绘制开始logo
case gameData.STARTING: //英雄机进场过渡状态
loading.paint();//绘制飞机入场动画
loading.step();//入场动画
case gameData.RUNNING: //游戏进行状态
hero.paint();
hero.step();
hero.shoot();//飞机射击
paintBullets();//绘制所有子弹
clearStep();//清除超出的子弹
if (enemyTime%100 == 0)
createEnemies();//创建敌方飞机
paintEnemiesAndCheckHit();//绘制所有敌方飞机和碰撞检测
case gameData.PAUSED: //游戏暂停状态
hero.paint();
paintBullets();//绘制所有子弹
paintEnemiesAndCheckHit();//绘制所有敌方飞机和碰撞检测
paintPaused();
case gameData.GAMEOVER: //游戏结束状态
gameover();
painText();//绘制得分
//定时器,画布刷新
setTimeout(function(){
gameExec();
七、响应事件的绑定
  1.开始界面单击鼠标,开始游戏
canvas.onclick = function(){
if (gameData.state == gameData.START)
{//在游戏开始状态下单击,进入游戏过渡阶段
gameData.state = gameData.STARTING;//改变游戏状态
&  2.绑定鼠标的移动事件,英雄机是跟随鼠标移动的
canvas.onmousemove = function(event){
//获取鼠标当前相对于canvas画布的坐标
var x = event.offsetX;
var y = event.offsetY;
//我方飞机坐标设置
hero.x=x-hero.width/2;// x坐标
hero.y=y-hero.height/2;//y坐标
if (gameData.state == gameData.PAUSED)
gameData.state = gameData.RUNNING;
&  3.鼠标离开画布事件,鼠标离开则游戏暂停
canvas.onmouseout = function(){
if (gameData.state == gameData.RUNNING)
gameData.state = gameData.PAUSED;
八、后续的一些设想
  现在的游戏不能重新开始,需要刷新才能重新开始,所以定义了 init() 函数用于游戏结束后重新开始(需要删除setTimeout事件):
function init(){
//设置游戏的初始状态
gameData.state = gameData.START;
gameData.score = 0;//分数重置
gameData.heroLife = 3;//声明值重置
//游戏运行
gameExec();
&  还有关于子弹的类型的设想: 可以设置 双列子弹,散花弹等子弹的类型,子弹可升级,设置子弹的威力等;可以设置速度的变更等
  有路过的大神可以看下下边的源码,指点下(源码不长就10kb多点)
九、源码链接
阅读(...) 评论()

我要回帖

更多关于 用python编写飞机大战 的文章

 

随机推荐