Java로 고전 게임 Bubble Hall을 구현하는 방법
메인 디자인
게임 인터페이스를 디자인하고 스윙으로 구현
게임 시작 인터페이스, 종료 인터페이스, 맵, 주인공, 소품 그리기
버블 폭발 실현
Realize 듀얼 주인공 PK(포인트 시스템)
소품 드랍 및 해당 속성 보너스 구현
게임 음향 효과 및 배경 음악 구현
기능 스크린샷
게임 시작 인터페이스:
게임 시작 인터페이스:
움직이는 효과:
버블 방출
버블 폭발 효과:
코드 구현
게임 시작 수업
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<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로 고전 게임 Bubble Hall을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.
