【玉溪——飞机大战】

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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值