这篇文章主要介绍“Java怎么实现经典游戏泡泡堂”,在日常操作中,相信很多人在Java怎么实现经典游戏泡泡堂问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现经典游戏泡泡堂”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
设计游戏界面,用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:
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<String, List<SuperElement> > map = manager.getMap();
Set<String> set = map.keySet();
List<String> temp = new ArrayList<>();
temp.addAll(set);
//迭代器在遍历的过程中,迭代器中的元素不可以变化(增加或减少)
for (int i=temp.size()-1; i>=0 ; i--) {
List<SuperElement> 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<SuperElement> players = ElementManager.getInstance().getElementList("play");
List<SuperElement> enemys = ElementManager.getInstance().getElementList("enemylist");
//进行比较
listPK(players, enemys);
}
public void listPK(List<SuperElement> list1,List<SuperElement> 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<SuperElement> > map =
// ElementManager.getInstance().getMap();
// List<SuperElement> 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();
}
//敌机的创建
}
到此,关于“Java怎么实现经典游戏泡泡堂”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。