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

}

}

}

相关推荐
Swift社区2 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht2 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht2 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20242 小时前
Swift 数组
开发语言
吾日三省吾码3 小时前
JVM 性能调优
java
stm 学习ing3 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc4 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐4 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi774 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器