Python 官方文档:入门教程 => 点击学习
目录前言主要设计功能截图代码实现游戏启动类核心监听类核心线程类总结前言 《泡泡堂I》是一个基于java的自制游戏,游戏设计为双人pk积分赛模式,在这个模式里面,玩家只要率先达到一定分
《泡泡堂I》是一个基于java的自制游戏,游戏设计为双人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();
}
//敌机的创建
}
通过此次的《泡泡堂I》实现,让我对JAVA的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。
java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。
到此这篇关于Java实现经典游戏泡泡堂的示例代码的文章就介绍到这了,更多相关Java泡泡堂内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Java实现经典游戏泡泡堂的示例代码
本文链接: https://lsjlt.com/news/144986.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0