Java实现经典游戏泡泡堂的示例代码(java游戏)

网友投稿 301 2022-08-06


Java实现经典游戏泡泡堂的示例代码(java游戏)

目录前言主要设计功能截图代码实现游戏启动类核心监听类核心线程类总结

前言

《泡泡堂I》是一个基于java的自制游戏,游戏设计为双人pk积分赛模式,在这个模式里面,玩家只要率先达到一定分数既可以赢得比赛。玩家可以通过炸箱子可以得到少量的分数,也可以通过炸掉对手然后戳破包围对手的水泡得到大量分数。而玩家如果被泡泡爆炸击中,会被泡泡包裹一段cjTmiWV时间,在这段时间内不可以移动和放泡泡,需要等时间过去或者被对手戳破水泡才能获得自由。但如果玩家被自己放的泡泡炸中,会扣一定的分数。

主要设计

设计游戏界面,用swing实现绘制游戏启动界面、结束界面、地图、主角、道具实现泡泡爆炸实现双主角PK(积分制)实现道具掉落和相应属性加成实现游戏音效和背景音乐

功能截图

游戏启动界面:

游戏开始界面:

移动效果:

释放泡泡

泡泡爆炸效果:

代码实现

游戏启动类

public class GameStart {

public static void main(String[] args) {

//整个程序的入口 启动

StartFrame startFrame = new StartFrame();

startFrame.setVisible(true);

}

}

核心监听类

public class GameListener implements KeyListener {

private List> list;

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

//按下 左37 右39 下40 上38 w87 a65 s83 d68 空格32 enter10

@Override

public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub

//System.out.println("keypressed"+e.getKeyCode());

list = ElementManager.getInstance().getElementList("play");

Player oneplayer = (Player)list.get(0);

Player twoPlayer = (Player)list.get(1);

switch (e.getKeyCode()) {

case 65:

cjTmiWV oneplayer.setLEFT(true);

// oneplayer.setStop(false);

break;

case 87:

oneplayer.setUP(true);

// oneplayer.setStop(false);

break;

case 68:

oneplayer.setRIGHT(true);

// oneplayer.setStop(false);

break;

case 83:

oneplayer.setDOWN(true);

// oneplayer.setStop(false);

break;

case 32:

oneplayer.setPk(true);

break;

case 37:

twoPlayer.setLEFT(true);

break;

case 38:

twoPlayer.setUP(true);

break;

case 39:

twoPlayer.setRIGHT(true);

break;

case 40:

twoPlayer.setDOWN(true);

break;

case 10:

twoPlayer.setPk(true);

break;

}

}

//松开

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

//System.out.println("keyreleased"+e.getKeyCode());

list = ElementManager.getInstance().getElementList("play");

Player oneplayer = (Player)list.get(0);

Player twoPlayer = (Player)list.get(1);

switch (e.getKeyCode()) {

case 65:

// if (oneplayer.isLEFT()) {

// oneplayer.setStop(true);

// }

oneplayer.setLEFT(false);

break;

case 87:

// if (oneplayer.isUP()) {

// oneplayer.setStop(true);

// }

oneplayer.setUP(false);

break;

case 68:

// if (oneplayer.isRIGHT()) {

// oneplayer.setStop(true);

// }

oneplayer.setRIGHT(false);

break;

case 83:

// if (oneplayer.isDOWN()) {

// oneplayer.setStop(true);

// }

oneplayer.setDOWN(false);

break;

case 32:

oneplayer.setPk(false);

break;

case 37:

twoPlayer.setLEFT(false);

break;

case 38:

twoPlayer.setUP(false);

break;

case 39:

twoPlayer.setRIGHT(false);

break;

case 40:

twoPlayer.setDOWN(false);

break;

case 10:

twoPlayer.setPk(false);

break;

}

}

}

核心线程类

public class GameThread extends Thread{

//计时数据

private static int time ;

private boolean flag=true;

//重构老项目

@Override

public void run() {

//这个循环控制游戏整体进度

// while(flag){

// 死循环 状态变量进行控制

//1.加载地图 人物

loadElement();

//2.显示地图人物(流程 自动化(移动,碰撞))

time = 0;

loadBGM();

runGame();

//3.结束地图

try {

TimeUnit.MILLISECONDS.sleep(150);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// }

}

//控制进度 但是作为控制 请不要接触load 只能通过元素管理器访问元素

public void loadElement(){

ElementManager.getInstance().load();

}

public void runGame(){

//这个循环控制每个关卡 地图中玩的状态

ElementManager manager = ElementManager.getInstance();

while(flag){

Map > map = manager.getMap();

Set set = map.keySet();

List temp = new ArrayList<>();

temp.addAll(set);

//迭代器在遍历的过程中,迭代器中的元素不可以变化(增加或减少)

for (int i=temp.size()-1; i>=0 ; i--) {

List list = map.get(temp.get(i));

for (int j = 0; j < list.size(); j++) {

SuperElement superElement = list.get(j);

superElement.update();

if (!superElement.isVisible()) {

manager.removeElementByPx(superElement.getY(), superElement.getX());

list.remove(j);

}

}

}

//使用一个独立的方法来进行判定

PK();

//游戏的流程控制

linkGame();

try {

TimeUnit.MILLISECONDS.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//死亡 通关状态 结束runGame方法

overGame();

time++; //一秒钟增加10

}

}

public void PK() {

// TODO Auto-generated method stub

List players = ElementManager.getInstance().getElementList("play");

List enemys = ElementManager.getInstance().getElementList("enemylist");

//进行比较

listPK(players, enemys);

}

public void listPK(List list1,List list2){

for (int i = 0; i < list1.size(); i++) {

for (int j = 0; j < list2.size(); j++) {

if (list1.get(i).gamePK(list2.get(j))) {

list2.get(j).setVisible(false);

}

}

}

}

public void overGame(){

Player player1 = (Player)(ElementManager.getInstance().getElementList("play").get(0));

Player player2 = (Player)(ElementManager.getInstance().getElementList("play").get(1));

if(player1.getNum()>=1000||player2.getNum()>=1000) {

flag = false;

new Thread() {

public void run() {

new audioPlay(Audio.OVER).player();

}

}.start();

}

}

//游戏的流程控制

public void linkGame(){

// Map< String , List > map =

// ElementManager.getInstance().getMap();

// List enemys = map.get("enemylist");

// //一秒钟增加一个敌机

// if (time%10 == 0) {

// enemys.add(Enemy.createEnemy(""));

// }

ElementManager.getInstance().linkGame(time);

}

public static int getTime() {

return time;

}

public static void setTime(int time) {

GameThread.time = time;

}

private void loadBGM() {

new Thread() {

public void run() {

while(flag) {

audioPlay play = new audioPlay(Audio.BGM);

play.player();

if(!flag) {

play.stop();

}

}

}

}.start();

}

//敌机的创建

}

总结

通过此次的《泡泡堂I》实现,让我对JAVA的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot入门之profile设置方式(springboot指定profile)
下一篇:Spring Security组件一键接入验证码登录和小程序登录的详细过程(spring boot)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~