1、创建窗口
package com.txt;
import javax.swing.*;
// 创建游戏窗口
public class GameWin extends JFrame {
//启动的方法
public void launch(){
this.setSize(600,600);
this.setTitle("飞机大战");
//设置窗口位置
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
GameWin gameWin=new GameWin();
gameWin.launch();
}
}
2、设置背景图片
将背景图片的文件夹给到项目第二层
创建一个工具类的包 创建工具类 如下
package com.txt.utils;
import java.awt.*;
// 工具类
public class GameUtils {
// 获取背景图片
public static Image bgImg=Toolkit.getDefaultToolkit().getImage("imgs/space.jpg");
}
回到GameWin 重写画笔 paint方法
package com.txt;
import com.txt.utils.GameUtils;
import javax.swing.*;
import java.awt.*;
// 创建游戏窗口
public class GameWin extends JFrame {
//启动的方法
public void launch(){
this.setSize(600,600);
this.setTitle("飞机大战");
//设置窗口位置
this.setLocationRelativeTo(null);
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
g.drawImage(GameUtils.bgImg,0,0,this);
}
public static void main(String[] args) {
GameWin gameWin=new GameWin();
gameWin.launch();
}
}
3、游戏启动页面
先在启动类上面加上 游戏状态的属性
//飞机大战的状态 0 未开始 1 游戏中 2 暂停 3 失败 4成功
public static int state = 0 ;
然后在工具类中加上 爆炸图片和飞机图片
package com.txt.utils;
import java.awt.*;
// 工具类
public class GameUtils {
// 获取背景图片
public static Image bgImg=Toolkit.getDefaultToolkit().getImage("imgs/space.jpg");
// 获取敌方 boss
public static Image bossImg=Toolkit.getDefaultToolkit().getImage("imgs/boss.jpg");
// 获取爆炸特效
public static Image explodeImg=Toolkit.getDefaultToolkit().getImage("imgs/explode/e6.jpg");
}
添加开始的图片和文字 在paint方法中
package com.txt;
import com.txt.utils.GameUtils;
import javax.swing.*;
import java.awt.*;
// 创建游戏窗口
public class GameWin extends JFrame {
//启动的方法
public void launch(){
this.setSize(600,600);
this.setTitle("飞机大战");
//设置窗口位置
this.setLocationRelativeTo(null);
this.setVisible(true);
}
// 增加背景图片的绘制
@Override
public void paint(Graphics g) {
//第一步的笔记 :g.drawImage(GameUtils.bgImg,0,0,this);
// 当游戏状态为 0 时 游戏未开始 添加启动界面 有敌方boss 有爆炸图片 背景图片
if (state==0){
g.drawImage(GameUtils.bgImg,0,0,this);
g.drawImage(GameUtils.bossImg,250,120,null);
g.drawImage(GameUtils.explodeImg,270,350,this);
//添加文字和字体颜色
//设置画笔颜色
g.setColor(Color.ORANGE);
//设置字体的格式 加粗与否 大小
g.setFont(new Font("黑体",Font.BOLD,40));
//写字
g.drawString("点击开始游戏",180 ,300);
}
}
public static void main(String[] args) {
GameWin gameWin=new GameWin();
gameWin.launch();
}
//飞机大战的状态 0 未开始 1 游戏中 2 暂停 3 失败 4成功
public static int state = 0 ;
}
4、启动页面
鼠标点击进入游戏状态 状态码变为1 启动文字消失
在launch方法中添加鼠标点击事件
// 添加鼠标点击事件 点击之后游戏状态改变
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//如果鼠标点击之后 我们更改游戏状态 并使用新的重画方法
if (e.getButton() == 1 && state == 0){
state = 1;
repaint();
}
}
});
在paint方法中添加状态为1(游戏中) 时候的判断代码
//游戏中 状态为1
if (state == 1){
g.drawImage(GameUtils.bgImg,0,0,this);
g.drawImage(GameUtils.bossImg,250,120,null);
g.drawImage(GameUtils.explodeImg,270,350,this);
//添加文字和字体颜色
//设置画笔颜色
g.setColor(Color.ORANGE);
//设置字体的格式 加粗与否 大小
g.setFont(new Font("黑体",Font.BOLD,40));
//写字
g.drawString("开始游戏",220 ,300);
}
5、编写游戏物体的标准类 也就是父类
新建包 新建一个类 有参构造可以多定义几个
package com.txt.obj;
import com.txt.GameWin;
import java.awt.*;
public class GameObj {
// 物体的图片 物体的位置 物体的宽高 物体的运动速度 窗口的引用
Image img;
int x;
int y;
int width;
int height;
double speed;
GameWin frame;
//提供get set方法 有参构造无参构造
public GameObj(){
}
public GameObj(Image img, int x, int y, double speed) {
this.img = img;
this.x = x;
this.y = y;
this.speed = speed;
}
public GameObj(Image img, int x, int y, int width, int height, double speed, GameWin frame) {
this.img = img;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.speed = speed;
this.frame = frame;
}
public Image getImg() {
return img;
}
public void setImg(Image img) {
this.img = img;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void