项目素材下载地址:https://download.csdn.net/download/m0_51152186/83604685

源码地址:https://download.csdn.net/download/m0_51152186/85351237​​​​​​​

这是一个Java小游戏,带背景音乐的飞机大战,简单易上手,一共九个代码段,具体代码和游戏制作如下:

一、项目目录结构

 二、关于游戏窗体和游戏面板

/*
 * 游戏的窗体:固定的模式,只要是游戏就用这段模板代码
 * Java中的窗体类:JFrame
 *自定义窗体的步骤:
 *1,写一个类,继承JFrame
 *2.写一个构造方法,初始化窗体的属性
 *属性对应特点,方法对应行为
 */

GameFrame.Java

package ui;
import javax.swing.JFrame;
/** 游戏的窗体:固定的模式,只要是游戏就用这段模板代码* Java中的窗体类:JFrame*自定义窗体的步骤:*1,写一个类,继承JFrame*2.写一个构造方法,初始化窗体的属性*属性对应特点,方法对应行为*/
public class GameFrame extends JFrame {/** 构造方法:方法名和类名一样* 构造方法的作用:做月饼的模具,给对象定型* */public GameFrame() {//设置标题  方法来源于JFrame类setTitle("全民飞机大战");//设置大小  setSize(宽度,高度);setSize(512,768);//设置位置居中显示//快捷键:Alt+?  开启代码提示//null相对于屏幕左上角居中setLocationRelativeTo(null);//设置不允许玩家改变界面大小setResizable(false);//设置默认的关闭选项//关闭窗体的时候退出程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}/** java系统的学* 理论为辅,实践为主*/public static void main(String arg[]) {//创建窗体对象:调用窗体的构造方法,制作窗体GameFrame frame=new GameFrame();//创建面板对象:调用面板的构造方法,制作面板GamePanel panel = new GamePanel(frame);//方便在面板中添加键盘监听器//调用开始游戏的方法,启动游戏panel.action();//将面板加入到窗体中frame.add(panel);//显示窗体  true显示     false隐藏frame.setVisible(true);//Music music=new Music();//music.player();String filepath="src/img/game_music.wav";musicStuff musicObject=new musicStuff();musicObject.playMusic(filepath);}}

/*
 * java中的游戏面板:JPanel
 * 自定义游戏面板
 * 1.写一个类,继承JPanel
 * 2.写一个构造方法,初始化(确定)面板的属性
 * 
 * 画图片的步骤:
 * 1.在类中定义图片,并取名
 * 2.在构造方法中,调用工具初始化图片
 * 3.在画图方法:paint中,画图片
 * 
 */

package ui;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
//import java.awt.List;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JPanel;/** java中的游戏面板:JPanel* 自定义游戏面板* 1.写一个类,继承JPanel* 2.写一个构造方法,初始化(确定)面板的属性* * 画图片的步骤:* 1.在类中定义图片,并取名* 2.在构造方法中,调用工具初始化图片* 3.在画图方法:paint中,画图片* */
public class GamePanel extends JPanel{//1.定义背景图BufferedImage bg;//背景图//创建英雄机对象Hero hero=new Hero();//创建敌机对象//Ep ep=new Ep();//创建敌机的大本营(所有的敌机都放在这里)//使用集合不使用数组,是因为数组必须指定长度,而此游戏中,敌机数量不确定。List<Ep> eps = new ArrayList<Ep>();//英雄机的弹药库List<Fire> fs = new ArrayList<Fire>();//定义分数int score;//设置游戏开关boolean gameover;//游戏开始时,gameover为false,游戏结束时,gameover为true。//设置英雄机的活力int power=1;/** 开始游戏的方法*/public void action() {//创建并启动一个线程,线程作用控制游戏场景中物体的移动//固定格式//new Thread(){public void run(){线程需要做的事情}}.start();new Thread(){public void run(){//写一个死循环,让游戏一直运行while(true) {if(!gameover) {//调用敌机入场的方法epEnter();//调用让敌机移动的方法epMove();//发射子弹shoot();//让子弹移动fireMove();//判断子弹是否打到敌机shootEp();//判断敌机是否撞到英雄机hit();}//每执行一次,休息一会//线程休眠 sleep(毫秒数)try {//每隔10毫秒,执行一次epEnter方法Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//重绘,刷新界面repaint();}}}.start();}/** 检测敌机是否撞到英雄机*/protected void hit() {//遍历敌机for(int i=0;i<eps.size();i++) {//获取一个敌机Ep e=eps.get(i);//如果敌机被英雄机撞上了if(e.hitBy(hero)) {//1.删除敌机eps.remove(e);//2.英雄机的血量减少hero.hp--;//如果英雄机被敌机撞到,则火力恢复到初始值1power=1;//3.增加分数score+=10;}}}/** 检测子弹是否击中敌机* 所有的敌机都有可能被子弹击中* 所有的子弹都有可能打到敌机*/protected void shootEp() {//遍历所有的子弹for(int i=0;i<fs.size();i++) {//获取每一颗子弹Fire f=fs.get(i);//每拿一颗子弹就判断一下,这颗子弹是否击中了敌机bang(f);}}/** 判断一颗子弹是否击中了敌机*/private void bang(Fire f) {//遍历所有的敌机for(int i=0;i<eps.size();i++) {//获取每一个敌机Ep e=eps.get(i);//判断这个子弹是否击中了敌机if(e.shootBy(f)) {if(e.type!=15) {//如果敌机被子弹击中//让敌机的血量减少e.hp--;//当敌机的血量减为0的时候if(e.hp<0) {//判断这个敌机是否为道具机(一个道具机,增加一发子弹,3发以后加血量)if(e.type==12) {//增加火力值power++;//如果power值大于3,增加血量if(power>3) {hero.hp++;power=3;}}//1.敌机死亡,从敌机大本营中删掉eps.remove(e);//增加分数score+=10;//当英雄机的血量减少到0时,游戏结束if(hero.hp<=0) {//游戏结束gameover=true;}}}//2.子弹消失,从弹药库中删除子弹fs.remove(f);}}}/** 让子弹移动*/protected void fireMove() {//遍历所有子弹for(int i=0;i<fs.size();i++) {//获取每一颗子弹Fire f=fs.get(i);//让子弹移动f.move();}}/** 发射子弹的方法*/int findex=0;//计数器,记录shoot方法执行的次数protected void shoot() {findex++;//下面的判断条件越小,火力越大if(findex>=10) {if(power==1) {//创建第三排子弹Fire fire3=new Fire(hero.x+45,hero.y-20,1);//将子弹加入到弹药库中fs.add(fire3);}else if(power==2) {//创建第一排子弹Fire fire1=new Fire(hero.x+15,hero.y,0);//将子弹加入到弹药库中fs.add(fire1);//创建第二排子弹Fire fire2=new Fire(hero.x+75,hero.y,2);//将子弹加入到弹药库中fs.add(fire2);}else {//创建第一排子弹Fire fire1=new Fire(hero.x+15,hero.y,0);//将子弹加入到弹药库中fs.add(fire1);//创建第二排子弹Fire fire2=new Fire(hero.x+75,hero.y,2);//将子弹加入到弹药库中fs.add(fire2);//创建第三排子弹Fire fire3=new Fire(hero.x+45,hero.y-20,1);//将子弹加入到弹药库中fs.add(fire3);}//将计数器归零findex=0;}}/** 敌机移动的方法*/protected void epMove() {//遍历所有的敌机for(int i=0; i<eps.size();i++) {//获取每一个敌机Ep e=eps.get(i);//让敌机移动e.move();}}/** 敌机入场的方法* 因为此方法在死循环中调用,所以该方法会一直重复执行*目前的问题:敌机出现的频率太快*假如能实现:执行20次epEnter方法,才创建一个敌机 */int index=0;//记录方法执行的次数,每执行n次,释放一个敌机protected void epEnter() {//记录执行的次数index++;if(index>=8) {//创建敌机Ep e=new Ep();//将敌机加入到敌机大本营中eps.add(e);//将index重新设置为0index=0;}}/** 构造方法:确定面板的特点*/public GamePanel(GameFrame frame){//设置背景setBackground(Color.blue);//初始化图片//如果工具类中没有加static,则要加App app=new App();bg=App.getImg("/img/bg2.jpg");//使用鼠标监听器(固定格式)//1.创建鼠标适配器MouseAdapter adapter= new MouseAdapter() {//确定需要监听的鼠标事件/** 鼠标事件*    1.mouseMoved();监听鼠标移动事件*    2.mouseCliked();监听鼠标单击事件*    3.mousePressed();监听鼠标按下去的事件*    4.mouseEntered();监听鼠标移入游戏界面事件*    5.mouseExited();监听鼠标移出游戏界面的事件*    MouseEvent鼠标的事件,记录鼠标做的事情*/@Overridepublic void mouseClicked(MouseEvent e) {//点击鼠标时会执行的代码//如果游戏结束了,点击屏幕重新开始游戏if(gameover) {//重新开始游戏,重新创建一个英雄机hero=new Hero();//重置游戏开关gameover=false;//分数清0score=0;//清空敌机集合eps.clear();//清空子弹集合fs.clear();//随机背景图Random rd=new Random();int index=rd.nextInt(5)+1;bg=App.getImg("/img/bg"+index+".jpg");//刷新界面repaint();}}@Overridepublic void mouseMoved(MouseEvent e) {//当鼠标在游戏界面中移动时,会触发的方法//当写入如下代码时,鼠标每移动一次就会触发一次“移动了鼠标~~”//System.out.println("移动了鼠标~~");//让英雄机跟着鼠标一起移动,让英雄机的横纵坐标等于鼠标的横纵坐标//获取鼠标的横纵坐标int mx=e.getX();//鼠标的横坐标int my=e.getY();//鼠标的纵坐标if(!gameover) {//让英雄机移动到鼠标的位置上(英雄机的行为,可以在英雄机中定义移动到鼠标的方法)hero.moveToMouse(mx, my);}//刷新界面,将英雄机绘制到新的位置上//重新调用paint方法repaint();}};//3.将适配器加入到监听器中(固定格式)addMouseListener(adapter);addMouseMotionListener(adapter);//使用键盘监听器(固定格式)//1.创建键盘适配器KeyAdapter kd=new KeyAdapter() {//2.确定需要监听的键盘事件public void keyPressed(KeyEvent e) {//当按下键盘按键时,会触发的方法//监听键盘的按键//每一个按键都会对应一个数字//获取键盘上按键的数字int keyCode=e.getKeyCode();System.out.println(keyCode);if(keyCode==KeyEvent.VK_W) {//英雄机向上移动hero.moveUp();}else if(keyCode==KeyEvent.VK_A) {//英雄机向左移动hero.moveLeft();}else if(keyCode==KeyEvent.VK_D) {//英雄机向右移动hero.moveRight();}else if(keyCode==KeyEvent.VK_S) {//英雄机向下移动hero.moveDown();}//重绘,将飞机画到新的位置上repaint();}};//3.将适配器加入到窗体的监听器中frame.addKeyListener(kd);}/** 游戏中专用画图方法* Graphics g:画笔* paint方法的写法:写一个paint,然后Alt键+?*/@Overridepublic void paint(Graphics g) {super.paint(g);//画图片//g.drawImage(图片,图片的横坐标,图片的纵坐标,null);//横纵坐标,是设置图片左上角的坐标g.drawImage(bg,0,0,null);//画图片时,如果不加宽度,高度,画的就是原图的大小//如果想要改变图片的大小,可以使用如下的格式
//g.drawImage(图片,图片的横坐标,图片的纵坐标,图片的宽度,图片的高度,null);//在paint中画图是有顺序的,先画的会被后画的覆盖,向栈一样//画英雄机g.drawImage(hero.img,hero.x,hero.y,hero.w,hero.h,null);//画敌机//遍历敌机大本营集合,画出所有的敌机for(int i=0;i<eps.size();i++) {//获取每一个敌机Ep ep=eps.get(i);g.drawImage(ep.img,ep.x,ep.y,ep.w,ep.h,null);}//画子弹for(int i=0;i<fs.size();i++) {//获取一个子弹Fire fire=fs.get(i);g.drawImage(fire.img,fire.x,fire.y,fire.w,fire.h,null);}//画分数g.setColor(Color.white);g.setFont(new Font("楷体",Font.BOLD,20));g.drawString("分数:"+score, 10, 30);//画英雄机的血量for(int i=0;i<hero.hp;i++) {g.drawImage(hero.img,350+35*i,5,30,30,null);}//游戏结束时,画出Gameoverif(gameover) {g.setColor(Color.red);g.setFont(new Font("楷体",Font.BOLD,50));g.drawString("GAMEOVER!你是菜鸡!", 20, 300);g.setColor(Color.green);g.setFont(new Font("楷体",Font.BOLD,40));g.drawString("点击屏幕重新开始游戏",40,350);}}}

三、编写游戏中的飞行物 

/*
 * 敌机类
 * 游戏中的敌机
 * 1.敌机数量很多   java中存放多个数据  1.使用数组2.使用集合
 * 2.敌机的数量是未知的,随时间的推移而增多。
 */

Ep.java

package ui;import java.awt.image.BufferedImage;
import java.util.Random;/** 敌机类* 游戏中的敌机* 1.敌机数量很多   java中存放多个数据  1.使用数组2.使用集合* 2.敌机的数量是未知的,随时间的推移而增多。*/
public class Ep extends FlyObject {int sp;//敌机的速度public int hp;//敌机的血量int type;//敌机的类型//BufferedImage img;//int x;//敌机的横坐标//int y;//敌机的纵坐标//int w;//敌机的宽度//int h;//敌机的高度/** 构造器:给敌机定型*/public Ep() {//确定随机数的类Random rd=new Random();//生成一个随机数,用来选取图片,随机数为1,则为第一张图片以此类推int index=rd.nextInt(15)+1;//设置敌机的类型type=index;//三目运算符//格式:条件表达式?值1:值2//表达式为true,取值1,否则值2String path="/img/ep"+(index<10?"0":"")+index+".png";//常见笔试题//加号可以用来做加法运算,也可以用连接内容//加号遇到双引号之前,都做加法运算//加号遇到双引号开始及之后,都只能做连接,连接之后的结果为字符串//确定敌机显示的图片img=App.getImg(path);y=-h;//确定敌机的大小w=img.getWidth();//确定敌机的位置//nextInt(num) 表示会在[0,num)之间随机生成一个整数x=rd.nextInt(512-w);h=img.getHeight();//设置敌机的速度,序号越大,速度越慢sp=17-index;}/** 敌机移动的方法* 目前:敌机向下移动*/public void move() {if(type==1||type==7||type==12) {x-=1;y+=sp;}else if(type==2||type==6||type==11) {x+=2;y+=sp;}else if(type==3||type==8||type==13){x+=1;y+=sp;}else if(type==4||type==9||type==14){x-=2;y+=sp;}else if(type==15) {//敌机导弹速度快y+=20;}else if(type==5||type==10) {y+=sp;}}/** 判断敌机是否被子弹击中*/public boolean shootBy(Fire f) {boolean hit=x<=f.x+f.w &&x>=f.x-w &&y<=f.y+f.h &&y>=f.y-h;return hit;     }//将英雄机看成子弹,复制上面的代码public boolean hitBy(Hero f) {boolean hit=x<=f.x+f.w &&x>=f.x-w &&y<=f.y+f.h &&y>=f.y-h;return hit;        }
}

/*
 * 游戏场景中的飞行物类
 * 在开发中,通常将有相同特点的类放到一起,并将这些相同的特点抽离出来,形成一个父类
 */

FlyObject.java

package ui;
/** 游戏场景中的飞行物类* 在开发中,通常将有相同特点的类放到一起,并将这些相同的特点抽离出来,形成一个父类*/import java.awt.image.BufferedImage;public class FlyObject {//飞行物的图片BufferedImage img;int x;//飞行物的横坐标int y;//飞行物的纵坐标int w;//飞行物的宽度int h;//飞行物的高度}

/*
 * 子弹类:属于飞行物
 */

package ui;
/** 子弹类:属于飞行物*/
public class Fire extends FlyObject {//子弹当前移动的方向int dir;//dir 为0:左上角          为1:垂直向上          为2:右上角/** 构造方法:初始化方法* hx:英雄机的横坐标* hy:英雄机的纵坐标* dir:子弹移动的方向*/public Fire(int hx,int hy,int dir) {//确定子弹的图片img=App.getImg("/img/fire.png");//确定子弹的大小w=img.getWidth()/4;h=img.getHeight()/4;//确定子弹的位置(初始位置在英雄机的上方)x=hx;y=hy;//属性的名字和参数的名字相同时,要加thisthis.dir=dir;}/** 子弹移动的方法*/public void move(){if(dir==0) {//左上角飞x-=1;y-=10;}else if(dir==1){//垂直飞y-=10;}else {//右上角飞x+=1;y-=10;}}
}

/*
 * 英雄机类
 * 属性对应特点,方法对应行为
 * 
 */

Hero.java

package ui;import java.awt.image.BufferedImage;/** 英雄机类* 属性对应特点,方法对应行为* */public class Hero extends FlyObject {int hp;//确定英雄机的血量//英雄机的图片//BufferedImage img;//英雄机的横坐标//int x;//英雄机的纵坐标//int y;//英雄机的宽度//int w;//英雄机的高度//int h;/** 构造方法:给对象定型(确定英雄机的特点)* 构造方法类似于做月饼的模具* Hero():做英雄机的模具*/public Hero() {//确定游戏开始时,英雄机显示的图片img=App.getImg("/img/hero.png");//使用横纵坐标,确定英雄机的初始位置x=200;y=500;//确定英雄机的大小,使用图片的大小作为飞机的大小w=img.getWidth();h=img.getHeight();//确定游戏开始时,英雄机的初始血量hp=3;}/** 英雄机移动到鼠标位置的方法* mx:鼠标的横坐标* my:鼠标的纵坐标*/public void moveToMouse(int mx,int my) {x=mx-w/2;y=my-h/2;//x,y各减1/2,让鼠标作用在英雄机的中心位置//System.out.println(x+","+y);}public void moveUp() {//英雄机向上移动y-=100;}public void moveDown() {//英雄机向下移动y+=100;}public void moveLeft() {//英雄机向左移动x-=100;}public void moveRight() {//英雄机向右移动x+=100;}}

 四、插入背景音乐

Music.java

package ui;import java.io.File;
import java.io.IOException;import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;public class Music {private int t = 0; // 音乐播放时间AudioInputStream bgm;private boolean playing = false;public boolean isPlaying() {return playing;}public void setPlaying(boolean playing) {this.playing = playing;}public int getT() {return t;}public void setT(int t) {this.t = t;}public Music() {try {bgm = AudioSystem.getAudioInputStream(new File("src/img/game_music.wav"));} catch (UnsupportedAudioFileException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} // 获得音频输入流}public void player() {AudioInputStream ais;AudioFormat baseFormat;DataLine.Info info;ais = bgm;baseFormat = ais.getFormat(); // 指定声音流中特定数据安排info = new DataLine.Info(SourceDataLine.class, baseFormat);SourceDataLine line = null;  //该数据线处理字节的缓冲并将其传递到混频器try {line = (SourceDataLine) AudioSystem.getLine(info);line.open(baseFormat);// 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。line.start();// 允许数据行执行数据 I/Oint BUFFER_SIZE = 4000 * 4;int intBytes = 0;byte[] audioData = new byte[BUFFER_SIZE]; // 音频数据数组while (intBytes != -1 && (playing == false)) {intBytes = ais.read(audioData, 0, BUFFER_SIZE);// 从音频流读取指定的最大数量的数据字节,并将其放入给定的字节数组中。if (intBytes >= 0) {line.write(audioData, 0, intBytes);// 通过此源数据行将音频数据写入混频器。t += 1;}//System.out.println(t);}} catch (LineUnavailableException | IOException e1) {e1.printStackTrace();}}}

五、 处理图片的工具类

/*
 * 处理图片的工具类
 * 工具类:简化代码,提高代码的重用性
 * 工具类的写法:工具类中一般会将项目中需要重复使用的代码抽离出来,定义成工具方法
 * 工具类中的方法一般需要加static
 * 加static的目的:
 *             static的特点:公用的,所有对象都共用这一份
 *             static修饰不依赖对象,可以直接通过类名调用
 * 
 */

App.java

package ui;import java.awt.image.BufferedImage;
import java.io.IOException;import javax.imageio.ImageIO;/** 处理图片的工具类* 工具类:简化代码,提高代码的重用性* 工具类的写法:工具类中一般会将项目中需要重复使用的代码抽离出来,定义成工具方法* 工具类中的方法一般需要加static* 加static的目的:*           static的特点:公用的,所有对象都共用这一份*            static修饰不依赖对象,可以直接通过类名调用* */
public class App {/** 读取指定位置上的图片* BufferedImage:java中用来表示图片的类* path:图片的路径 */public static BufferedImage getImg(String path) {//加载图片//java中的IO流,输送数据的管道//输入输出流//App.class找到App类的路径//getResource()获取资源try {BufferedImage img=ImageIO.read(App.class.getResource(path));//如果找到图片就将图片返回return img;} catch (IOException e) {//catch如果找不到图片,就会捕获找不到图片的原因e.printStackTrace();}return null;}}

六、运行截图

需要游戏素材的小伙伴点赞加关注私聊哈~~~

瑞斯拜~~~

java项目---全民飞机大战小游戏相关推荐

  1. 【Java代码实现飞机大战小游戏】简单理解

    飞机大战 飞机大战小游戏历经10天完成,主要用到的就是我们面向对象部分的知识:类,封装,继承,多态,静态代码块等等内容+swing部分内容.所以即使你是java小白,也不用担心欧! 游戏说明:游戏有3 ...

  2. 【java设计】:全民飞机大战小游戏制作

    文章目录 前言 一.全民飞机大战 二.计划安排 三.源码图和类图展示 四.源码展示 Fire类: GameMain类: GamePanel类: Hero类: Image类: PlaySound类: S ...

  3. Java基础(飞机大战小游戏)

    学校课程作品,Java简易飞机大战 涉及Java基础知识,通过编写对基础能有不错的巩固和拓展. 首先,先编写出游戏的窗口.游戏获胜条件以及main方法 package com.Mygame3.Plan ...

  4. 基于Java语言在窗体上实现飞机大战小游戏

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...

  5. 【Java】Java基础飞机大战小游戏完整代码

    Java基础飞机大战小游戏完整代码 先来展示一下代码实现结果图 主函数ShootGame 初始化游戏原始背景图片,游戏人物图片,游戏开始结束图片:构建产生敌人算法:产生英雄机算法:发射子弹算法:判断是 ...

  6. 点击list view中一行内容可以在combox中显示_java版飞机大战小游戏详细教程(零基础小白也可以分分钟学会!)...

    一:游戏展示 飞机大战小游戏我们都玩过,通过移动飞机来打敌机,这里给大家展示一下游戏成果:呜呜呜由于gif只能上传5M大小,所以就不能给大家展示操作了,如果大家有兴趣可以自己自己做出来再玩哟. 这里面 ...

  7. 飞机大战小游戏(超详细)

    偷学Python之最后的项目二:飞机大战小游戏(超详细) 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志.--苏轼 甜甜先说 这次用Python中的pygame模块来完成一个飞机大战的小游戏:基本思 ...

  8. 使用小程序制作一个飞机大战小游戏

    此文主要基于微信小程序制作一个飞机大战小游戏,上手即用,操作简单. 一.创建小程序 二.页面实现 三.代码块 一.创建小程序 访问微信公众平台,点击账号注册. 选择小程序,并在表单填写所需的各项信息进 ...

  9. 华清大作业 QT实现飞机大战小游戏

    在学习完QT后,我尝试做了一下飞机大战这个小游戏. 首先是小游戏需要实现的功能: 1.滚动的背景 2.子弹的制作和射击 3.敌人的制作 4.爆炸效果 首先我们创建好项目后,我们开始创建新的头文件,用来 ...

最新文章

  1. 信道划分介质访问控制
  2. 订阅者java_RxJava:“java.lang.IllegalStateException:只允许一个订阅者!”
  3. 计算机乐谱弱点,缺点简谱郑源
  4. ansible配置详解及基本示例
  5. 舞力全开加速_国行舞力全开评测:丝滑得不像是育碧服务器!
  6. 双非同学,自学编程,毕业一年逆袭百度!
  7. 关于PHP各种循环,关于php迭代循环(无限分类)
  8. OSI 认证的开源 License 有哪些?
  9. 小股神助A股股民畅享经济发展红利
  10. GNOME 3.32.1 维护版本更新发布
  11. jvm系列(五):tomcat性能调优和性能监控(visualvm)
  12. Linux与BSD中TCP协议栈实现比较
  13. 信息录入率百分百上海强化施工现场建筑工人实名制管理
  14. 计算系数(多项式展开+快速幂)
  15. 网吧用计算机性能配件清单,网吧主机都是什么配置?看看清单就知道!
  16. window10无法自动修复此计算机,Win10系统自动修复无法修复电脑如何解决
  17. 生态功能区划方法之二:生态服务功能重要性评价
  18. 预测模型之灰色系统预测
  19. 关于傅立叶系数的计算公式
  20. 告别光棍节——见习情圣(恋爱培训导师)

热门文章

  1. 慢性浅表性胃炎的食疗
  2. 如何学习企业管理的基本知识?
  3. 如何用UBLOX ZED-F9P +4G一体开发版获取千寻差分,搭建网络RTK实现厘米级定位
  4. 我为什么要做知识星球
  5. h3c交换机限制端口访问_H3C交换机典型访问控制列表(ACL)配置实例
  6. ssm毕设项目财务报账管理系统l6tbn(java+VUE+Mybatis+Maven+Mysql+sprnig)
  7. 虚拟机ping网关ping不通
  8. 构建LibreOffice Android
  9. html5网页构成要素有哪些,网页的基本构成元素有哪些
  10. 百度商桥放在php网站哪里_如何在网站里安装百度商桥