JAVA小游戏“简易版王者荣耀”

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

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

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);

}

}

}

相关推荐
LMT_Lanmantech几秒前
MATLAB合规管理:如何避免侵权赔偿和审计风险
开发语言·matlab·信息可视化
ab1237681 分钟前
MQTT笔记
java·笔记·mqtt·学习
二宝哥6 分钟前
【问题】代理转发到后端使用request.getRequestURL()地址没有端口
java
言乐610 分钟前
PythonLOLM自动生成复盘报告模型
开发语言·前端·数据库·人工智能·python
霸道流氓气质11 分钟前
HashiCorp Vault 与云 KMS 入门实战:动态密钥、SecretLeaseContainer 与 Java 集成完整指南
java·开发语言
wuminyu14 分钟前
stackChunkOop内部结构与GC屏障的配合工作原理剖析
java·linux·c语言·jvm·c++
水水不水啊15 分钟前
告别切换N个窗口调试:我用 Python + WebView 做了款现代化串口助手(含 TCP/UDP、波形、协议解析)
python·tcp/ip·udp
论文复现现场18 分钟前
DeepSeek V4.1 Flash 各平台价格怎么比?缓存、峰谷计费与 Python 成本计算
开发语言·python·缓存·大模型·成本优化·deepseek
xuxigifxfh18 分钟前
牛客:HJ21 简单密码
java·开发语言·算法
小π军20 分钟前
C 和 C++ 是否都支持函数的重载?
java·c语言·c++