这是我以前写的一款游戏(主要是用C写的),我已经忘记我是怎么写的逻辑了,在加上都是简单版本的,所以我就不讲解了,大家可以自己借鉴一下,等以后我做完整版的会发讲解的。


  学C学的差不多的,可以拿这个练手,感觉逻辑不难,挺简单的。


//定义头文件
#include<stdio.h>
#include<graphics.h>
#include <conio.h>
#include <mmsystem.h>
#include<time.h>
#pragma comment(lib,"winmm.lib")IMAGE bei_jing;//定义背景图像
IMAGE wan_jia[2];//定义玩家生图像
IMAGE wan_jia_si[2];//定义玩家死图像
IMAGE zi_dan[2];//定义子弹图像
IMAGE di_ji[2][2];//定义子弹图像enum bei_jing//窗口宽度与高度
{kuan = 480,//宽度gao = 700,//高度zi_dan_shu = 15,//玩家子弹数di_ji_shu = 10,//敌机数da,xiao,//大小敌机
};
//窗口宽度与高度设置
struct Fei_Ji//玩家飞机与子弹与敌机
{double x, y;//坐标bool sheng_si;//生死int kuan, gao,hp, lei_xing;
}WanJia,ZiDan[zi_dan_shu],DiJi[di_ji_shu];
//玩家飞机与子弹与敌机
bool Timer(int ms,int id)//定时器
{static DWORD t[10];if (clock() - t[id] > ms)//延时ms毫秒{t[id] = clock();//重置return true;}return false;
}
//定时器
void loadimage()//载入图像
{//载入背景图像loadimage(&bei_jing, "./images/background.jpg");//载入玩家图像loadimage(&wan_jia[0], "./images/planeNormal_1.jpg");loadimage(&wan_jia[1], "./images/planeNormal_2.jpg");//载入玩家死图像loadimage(&wan_jia_si[0], "./images/planeBoom_1.jpg");loadimage(&wan_jia_si[1], "./images/planeBoom_2.jpg");//载入子弹图像loadimage(&zi_dan[0], "./images/bullet1.jpg");loadimage(&zi_dan[1], "./images/bullet2.jpg");//载入敌机图像loadimage(&di_ji[0][0], "./images/enemy_1.jpg");loadimage(&di_ji[0][1], "./images/enemy_2.jpg");loadimage(&di_ji[1][0], "./images/enemyPlane1.jpg");loadimage(&di_ji[1][1], "./images/enemyPlane2.jpg");
}
//载入图像
void EnemyHp(int i)//敌机的hp
{if (rand() % 5 == 0){DiJi[i].lei_xing = da;DiJi[i].hp = 3;DiJi[i].kuan = 104;DiJi[i].gao = 148;}else{DiJi[i].lei_xing = xiao;DiJi[i].hp = 1;DiJi[i].kuan = 52;DiJi[i].gao = 39;}}
//敌机的hp
void GameInit()//初始化
{//载入图像loadimage();//初始化玩家WanJia.x = kuan / 2-60.0;WanJia.y = gao - 120.0;WanJia.hp = 3;WanJia.kuan=117;WanJia.gao=120;WanJia.sheng_si = true;//初始化子弹for (int i = 0; i < zi_dan_shu; i++){ZiDan[i].x = 0;ZiDan[i].y = 0;ZiDan[i].sheng_si = false;}//初始化敌机for (int i = 0; i < di_ji_shu; i++){DiJi[i].sheng_si = false;EnemyHp(i);}
}
//初始化
void GameDraw()//显示图像
{//显示背景putimage(0, 0, &bei_jing);//显示玩家putimage((int)WanJia.x, (int)WanJia.y, &wan_jia[0],NOTSRCERASE);putimage((int)WanJia.x, (int)WanJia.y, &wan_jia[1],SRCINVERT);//显示子弹for (int i = 0; i < zi_dan_shu; i++){if (ZiDan[i].sheng_si){putimage((int)ZiDan[i].x, (int)ZiDan[i].y, &zi_dan[0], NOTSRCERASE);putimage((int)ZiDan[i].x, (int)ZiDan[i].y, &zi_dan[1], SRCINVERT);break;}}//显示敌机for (int i = 0; i < di_ji_shu; i++){if (DiJi[i].sheng_si){if(DiJi[i].lei_xing == xiao){putimage((int)DiJi[i].x, (int)DiJi[i].y, &di_ji[0][0], NOTSRCERASE);putimage((int)DiJi[i].x, (int)DiJi[i].y, &di_ji[0][1], SRCINVERT);}else{putimage((int)DiJi[i].x, (int)DiJi[i].y, &di_ji[1][0], NOTSRCERASE);putimage((int)DiJi[i].x, (int)DiJi[i].y, &di_ji[1][1], SRCINVERT);}}}if (WanJia.hp<=0){putimage((int)WanJia.x, (int)WanJia.y, &wan_jia_si[0], NOTSRCERASE);putimage((int)WanJia.x, (int)WanJia.y, &wan_jia_si[1], SRCINVERT);Timer(1000000000,2);}//显示玩家死亡
}
//显示图像
void CreateBullet()//创建一个子弹
{for (int i = 0; i < zi_dan_shu; i++){if (!ZiDan[i].sheng_si){//子弹BGMmciSendString("close ZIDANBGM", 0, 0, 0);mciSendString("open ./images/f_gun.mp3 alias ZIDANBGM", 0, 0, 0);mciSendString("play ZIDANBGM", 0, 0, 0);ZiDan[i].x = WanJia.x+45;ZiDan[i].y = WanJia.y;ZiDan[i].sheng_si = true;break;}}
}
//创建一个子弹
void BulletMove()//子弹移动
{for (int i = 0; i < zi_dan_shu; i++){if (ZiDan[i].sheng_si){ZiDan[i].y -= 1;if (ZiDan[i].y < 0)ZiDan[i].sheng_si = false;break;}}
}
//子弹移动
void PlayerMove(double yi_dong)//玩家操作
{#if 0if (_kbhit()){char ming_ling = _getch();//得到命令switch (ming_ling){case 'w':case 'w':WanJia.y -= yi_dong;//上break;case 's':case 's':WanJia.y += yi_dong;//下break;case 'a':case 'a':WanJia.x -= yi_dong;//左break;case 'd':case 'd':WanJia.x += yi_dong;//右break;}}
#elif 1if (GetAsyncKeyState(VK_UP) || GetAsyncKeyState('W'))//上{if (WanJia.y > 0)//上边界WanJia.y -= yi_dong;//上移0.1}if (GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState('S'))//下{if (WanJia.y < gao - 110.0)//下边界WanJia.y += yi_dong;//下移0.1}if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState('A'))//左{if (WanJia.x > -30)//左边界WanJia.x -= yi_dong;//左移0.1}if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState('D'))//右{if (WanJia.x < kuan - 70.0)//右边界WanJia.x += yi_dong;//右移0.1}
#endifif (GetAsyncKeyState(VK_SPACE)&&Timer(300,1))//延时500毫秒{//创建一个子弹CreateBullet();}
}
//玩家操作
void CreateEnemy()//产生敌机
{for (int i = 0; i < di_ji_shu; i++){if (!DiJi[i].sheng_si){DiJi[i].sheng_si = true;EnemyHp(i);DiJi[i].x = rand() % (kuan-60);DiJi[i].y = 0;break;}}
}
//产生敌机
void EnemyMove(double sheep)//敌机移动
{for (int i = 0; i < di_ji_shu; i++){if (DiJi[i].sheng_si){if (rand() % 2 == 0 && DiJi[i].x > 0){DiJi[i].x -= 1;}if (rand() % 2 == 0 && DiJi[i].x < (int)(480 - DiJi[i].kuan)){DiJi[i].x += 1;}else{}DiJi[i].y += sheep;if (DiJi[i].y > gao){DiJi[i].sheng_si = false;}}}
}
//敌机移动
void PlayPlance()//打飞机
{for (int i = 0; i < di_ji_shu; i++){if (!DiJi[i].sheng_si)continue;for (int j = 0; j < zi_dan_shu; j++){if(!ZiDan[j].sheng_si)continue;if (ZiDan[j].x > DiJi[i].x && ZiDan[j].x< DiJi[i].x + DiJi[i].gao &&ZiDan[j].y>DiJi[i].y && ZiDan[j].y < DiJi[i].y + DiJi[i].kuan){//死亡BGMmciSendString("close SIWANGBGM", 0, 0, 0);mciSendString("open ./images/explode.mp3 alias SIWANGBGM", 0, 0, 0);mciSendString("play SIWANGBGM", 0, 0, 0);ZiDan[j].sheng_si = false;DiJi[i].hp--;}}if (DiJi[i].hp<=0){DiJi[i].sheng_si = false;}}
}
//打飞机
void PlayPlayer()//打玩家
{for (int i = 0; i < di_ji_shu; i++){if (!DiJi[i].sheng_si)continue;if (DiJi[i].x > WanJia.x && DiJi[i].x< WanJia.x + WanJia.gao &&DiJi[i].y>WanJia.y && DiJi[i].y < WanJia.y + WanJia.kuan){//死亡BGMmciSendString("close SIWANGBGM", 0, 0, 0);mciSendString("open ./images/explode.mp3 alias SIWANGBGM", 0, 0, 0);mciSendString("play SIWANGBGM", 0, 0, 0);DiJi[i].sheng_si = false;WanJia.hp--;}}
}
//打玩家
int Shu()//输
{if (WanJia.hp <= 0){return true;}return false;
}
//输
int main()
{//游戏BGMmciSendString("open ./images/game_music.mp3 alias GAMEBGM", 0, 0, 0);mciSendString("play GAMEBGM repeat", 0, 0, 0);//创建窗口initgraph(kuan, gao);//初始化GameInit();//双缓存BeginBatchDraw();while (1){//打玩家PlayPlayer();//显示图像GameDraw();FlushBatchDraw();//玩家操作PlayerMove(0.1);//子弹移动BulletMove();//产生敌机if (Timer(500,0)){CreateEnemy();}//敌机移动EnemyMove(0.03);//打飞机PlayPlance();//输if (Shu())break;}EndBatchDraw();return 0;
}
//主函数

飞机大战(简单版)(C/C++) (VS)相关推荐

  1. python飞机大战简单的实现

    制作初衷 这几天闲来没事干,就想起来好长时间没做过游戏了,于是就想做一个游戏练练手,为了起到一个练习的目的就使用了自己不是太熟练的python这门语言来编写,代码都有备注,大家可以直接看代码,这个代码 ...

  2. 飞机大战java_java版飞机大战实战项目详细步骤

    本文为大家分享了java版飞机大战实战项目,供大家参考,具体内容如下 分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是 ...

  3. Java学习记录:Java飞机大战进阶版(敌人有子弹、有生命、有boss、有声音、还有大招一键清屏)

    Java飞机大战 序言 一.项目需求分析 二.各个对象类的设计 加载图片类Images 抽象类FlyingObject 天空类Sky 小敌机类Airplane 大敌机类BigAirplane 侦察机类 ...

  4. MATLAB飞机大战第二版,windows程序设计——飞机大战札记(单文档文件登陆界面)...

    windows程序设计--飞机大战笔记(单文档文件登陆界面) //2015/07/21 /by xbw/// /环境 VS 2013 飞机大战做的差不多了,闲来无事加点高大上的东西,关于单文档的登陆界 ...

  5. 飞机大战java_java版飞机大战 实战项目详细步骤.md

    分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是自己控制的飞机).敌人.而敌人应该分为打死给分的飞机(就是普通飞机), ...

  6. python 入门实战改进B站小甲鱼飞机大战增强版4.0

    效果: 资源包下载地址:https://download.csdn.net/download/m0_50944918/13977863 部分代码观礼: import pygame import sys ...

  7. [2015/09/08] Unity3D飞机大战(简陋版) Practice

    自己学的还是太差,进度很慢,不停地查各种资料. 1  2D背景实现自动滚动 1.1 插入2D背景 直接插入图片就好,我还在想sprite到底是用来做什么的-- 3D摄像头改为2D,Orthograph ...

  8. C语言飞机大战简易版(包含两种界面)

    以下两种代码均适用于初学者: 先上第一种粗糙的代码,讲解都在代码中了. #include<stdio.h> #include<stdlib.h> #include<con ...

  9. Unity实现飞机大战简单易懂

    废话不多说直接上游戏截图最下面附下载地址,注意是免费! 游戏资源下载点这个

  10. c语言实现的运用easyx完成的飞机大战简单小游戏(内含道具掉落,攻击转换)

    素材链接: https://share.weiyun.com/6NlDMrJU 代码如下: //游戏名:[星球大战].//游戏玩法:玩家操控火箭攻击boss,期间通过走位躲避boss的炮弹和小怪,(小 ...

最新文章

  1. 如何反转“轨道生成”?
  2. JDK内置工具--jconsole
  3. matlab用lism求零输入响应,信号与系统matlab课后作业_北京交通大学讲解.docx
  4. 电脑剪贴板在哪里打开_这个小玩意让手机的推送无缝显示在电脑上_办公软件...
  5. 学习“用dlopen,dlsym加载动态链接库.so中函数”之摘录
  6. Abiword页面布局
  7. 【英语学习】【Level 07】U07 Stories of my Life L4 Not my best moment
  8. 导出oracle数据c#代码,C# 程序导入导出oracle数据库
  9. 接口访问超时 504 Gateway Time-out 优化方案
  10. Attempt to do update or delete on table educator.t_item_info that does not use an AcidOutputFormat o
  11. C 语言 结构类型 结构
  12. Sass中使用@each循环
  13. RUBY发送验证码通知短信(互亿无线)
  14. 常见的商业数据库系统
  15. IMPDP ORA-39125 / LPX-00241
  16. java毕业生设计学生课堂互动教学系统计算机源码+系统+mysql+调试部署+lw
  17. 最大传输单元:MTU
  18. Rust中的面向对象编程Rusty OOP
  19. port isolate enable命令
  20. django创建app的命令

热门文章

  1. 天空之城 matlab,matlab演奏《天空之城》代码
  2. Vue--基础模板语法以及计算属性
  3. 网课搜题公众号制作方法
  4. Linux系统查看当前时间的命令
  5. 科学素养题(2022年2月-2022年10月)
  6. Cortex M4 SVC 中断
  7. Spring学习之浅析refresh()执行逻辑
  8. c语言 桌面下雪程序,[Lazarus]使用Lazarus编写的桌面下雪小程序
  9. 联想计算机usb启动怎么办,联想电脑没有u盘启动该如何解决?解决联想电脑没有u盘启动的方法...
  10. PHP的WMB队列消费代理的实现