Java로 고전 게임 Bubble Hall을 구현하는 방법

WBOY
풀어 주다: 2023-04-28 13:55:13
앞으로
1212명이 탐색했습니다.

    메인 디자인

    • 게임 인터페이스를 디자인하고 스윙으로 구현

    • 게임 시작 인터페이스, 종료 인터페이스, 맵, 주인공, 소품 그리기

    • 버블 폭발 실현

    • Realize 듀얼 주인공 PK(포인트 시스템)

    • 소품 드랍 및 해당 속성 보너스 구현

    • 게임 음향 효과 및 배경 음악 구현

    기능 스크린샷

    게임 시작 인터페이스:

    Java로 고전 게임 Bubble Hall을 구현하는 방법

    게임 시작 인터페이스:

    Java로 고전 게임 Bubble Hall을 구현하는 방법

    움직이는 효과:

    Java로 고전 게임 Bubble Hall을 구현하는 방법

    버블 방출

    Java로 고전 게임 Bubble Hall을 구현하는 방법

    버블 폭발 효과:

    Java로 고전 게임 Bubble Hall을 구현하는 방법

    코드 구현

    게임 시작 수업

    public class GameStart { public static void main(String[] args) { //整个程序的入口 启动 StartFrame startFrame = new StartFrame(); startFrame.setVisible(true); } }
    로그인 후 복사

    코어 모니터링 class

    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 > 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(); } //敌机的创建 }
    로그인 후 복사

    위 내용은 Java로 고전 게임 Bubble Hall을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:yisu.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!