当前位置: 首页 > article >正文

JAVA小游戏简易版王者荣耀

第一步是创建项目 项目名自拟

第二部创建个包名 来规范class

  

然后是创建类 GameFrame   运行类

package com.sxt;
 
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class GameFrame extends JFrame {
    // 窗口尺寸
    private int windowWidth = 1400;
    private int windowHeight = 700;
    // 双缓冲图片
    private Image offScreenImage = null;
    // 攻击图片
    private Image attack = Toolkit.getDefaultToolkit().getImage("img/attack.jpg");
    // 游戏背景
    Background background = new Background(this);
    // 游戏玩家
    Champion player = new ChampionHouyi(this);
    // 双方小兵
    MinionBlue mb = new MinionBlue(this);
    MinionRed mr = new MinionRed(this);
    // 防御塔
    Turret turret = new Turret(this);
    // 攻击按钮
    JButton attackButton;
    // 游戏元素列表
    ArrayList<GameObject> objList = new ArrayList<GameObject>();
    ArrayList<GameObject> redList = new ArrayList<GameObject>();// 红色方
    ArrayList<GameObject> blueList = new ArrayList<GameObject>();// 蓝色方
    ArrayList<GameObject> removeList = new ArrayList<GameObject>();// 存放将要删除的元素
 
    public void launch() {
        // 设置尺寸
        setSize(windowWidth, windowHeight);
        // 窗口居中
        setLocationRelativeTo(null);
        // 关闭事件
        setDefaultCloseOperation(3);
        // 用户不能调整窗口大小
        setResizable(false);
        // 标题
        setTitle("尚学堂王者荣耀");
        // 窗口可见
        setVisible(true);
        // 添加键盘监视器
        this.addKeyListener(new GameFrame.KeyMonitor());
        // 添加游戏元素
        objList.add(background);
        objList.add(player);
        objList.addAll(turret.turretList);
        blueList.add(turret.turretList.get(0));
        redList.add(turret.turretList.get(4));
 
        /**
         * 攻击按钮
         */
        attackButton = new JButton();
        attackButton.setSize(130, 132);
        attackButton.setLocation(1150, 430);
        attackButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 按钮事件
                player.attack(redList);
            }
        });
        this.add(attackButton);
        player.addButton();
 
        while (true) {
            mb.createMinion(this, blueList);
            mr.createMinion(this, redList);
            turret.addTurret(this);
            repaint();
            try {
                Thread.sleep(25);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
 
    public void paint(Graphics g) {
        // System.out.println(player.getX()+" "+player.getY());
        if (offScreenImage == null) {
            offScreenImage = this.createImage(5984, 4452);
        }
        Graphics gImage = offScreenImage.getGraphics();
        for (int i = 0; i < objList.size(); i++) {
            objList.get(i).paintSelf(gImage);
        }
        // 绘制攻击图片
        gImage.drawImage(attack, player.getX() + 500, player.getY() + 100, null);
        objList.removeAll(removeList);
 
        g.drawImage(offScreenImage, -player.getX() + 700, -player.getY() + 350, null);
        /**
         * 添加按钮后不能调用键盘事件 因为程序的焦点变成了按钮 this.requestFocus() 把焦点重新改变到游戏界面上
         */
        this.requestFocus();
    }
 
    // main方法
    public static void main(String[] args) {
        GameFrame gameFrame = new GameFrame();
        gameFrame.launch();
    }
 
    // 键盘事件
    private class KeyMonitor extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();
            player.keyPressed(e);
        }
 
        @Override
        public void keyReleased(KeyEvent e) {
            int key = e.getKeyCode();
            player.keyReleased(e);
        }
    }
}

运行结果如下:


http://www.kler.cn/a/145538.html

相关文章:

  • 【前端】Hexo 建站指南
  • skynet 源码阅读 -- 启动主流程
  • Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )
  • 当使用 npm 时,出现 `certificate has expired` 错误通常意味着请求的证书已过期。
  • 学到一些小知识关于Maven 与 logback 与 jpa 日志
  • SQL-leetcode—1141. 查询近30天活跃用户数
  • JAVA后端开发技术报告
  • elastic -job和springboot集成实现分布式调度5
  • Ubuntu开机显示recovering journal,进入emergency mode
  • 如何跑通yolov5/yolov8+深度学习代码如何跑通+代码报错怎么办(代码部署教程)
  • SpringBoot事务处理
  • 【Web-Note】 JavaScript概述
  • Bun 1.0 正式发布,爆火的前端运行时,速度遥遥领先!
  • redis报错3
  • 2019年12月 Scratch(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 大数据学习(23)-hive on mapreduce对比hive on spark
  • OpenGL 图元赋色(Qt)
  • Sringboot3 讲解
  • flink的集成测试
  • 通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(二)
  • 视频号小店入驻需要多少资金?入驻费用详解!
  • 【领域驱动设计 学习目标及大纲】从CRUD到架构设计
  • YUV颜色空间与RGB的转换
  • 使用 Kafka 和 Cassandra 构建实时异常检测实验
  • 这是一张单纯的图片-MISC-bugku-解题步骤
  • 【JavaWeb】Servlet