开头
参考自尚学堂
对代码有一定的重构,功能的添加(按‘G’开挂)
文末源码自取,不会 github、git 建议先去学会基本使用,
也可以在对应界面直接下载压缩包
项目结构
GamePanel
KeyMonitor (内部类)
keyPressed(KeyEvent): void
keyReleased(KeyEvent): void
launch(): void
paint(Graphics): void
main(String[]): void
package com.company.tank;
import javax.swing.*;
import java .awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class GamePanel extends JFrame {
/** 定义双缓存图片 */
private Image offScreenImage = null;
//游戏状态: 0 游戏未开始,1 单人模式,2 双人模式, 3 游戏暂停, 4 游戏失败,5 游戏成功
public int state= 0;
//临时变量
private int a = 1;
//重绘次数
public int count = 0;
//窗口长宽
private int width = 800;
private int height = 610;
//敌人数量
private int enemyCount = 0;
//高度
private int y = 150;
//是否开始
private boolean start = false;
//物体集合
public List<Bullet> bulletList = new ArrayList<>();
public List<Bot> botList = new ArrayList<>();
public List<Tank> tankList = new ArrayList<>();
public List<Wall> wallList = new ArrayList<>();
public List<Bullet> removeList = new ArrayList<>();
public List<Base> baseList = new ArrayList<>();
public List<BlastObj> blastList = new ArrayList<>();
//背景图片
public Image background = Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/background.jpg"));
//指针图片
private Image select = Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/selecttank.gif"));
//基地
private Base base = new Base(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/star.gif"))
, 365, 560, this);
//玩家
private PlayerOne playerOne = new PlayerOne(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankU.gif")),
125, 510,
Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankU.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankD.gif")),
Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankL.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankR.gif")), this);
private PlayerTwo playerTwo = new PlayerTwo(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankU.gif")),
625, 510,
Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankU.gif")),
Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankD.gif")),
Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankL.gif")),
Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankR.gif")), this);
//窗口的启动方法
public void launch(){
//标题
setTitle("坦克大战");
//窗口初始大小
setSize(width, height);
//用户不能调整大小
setResizable(false);
//使窗口可见
setVisible(true);
//获取屏幕分辨率,使窗口生成时居中
setLocationRelativeTo(null);
//添加关闭事件
setDefaultCloseOperation(EXIT_ON_CLOSE);
//添加键盘事件
this.addKeyListener(new GamePanel.KeyMonitor());
//添加围墙 60*60
for(int i = 0; i< 14; i ++){
wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), i*60 ,170, this ));
}
wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 305 ,560,this ));
wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 305 ,500,this ));
wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 365 ,500,this ));
wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 425 ,500,this ));
wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 425 ,560,this ));
//添加基地
baseList.add(base);
while (true){
if(botList.size() == 0 && enemyCount == 10){
state = 5;
}
if(tankList.size() == 0 && (state == 1 || state == 2)){
state = 4;
}
if(state == 1 || state == 2){
if (count %