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

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

WBOY
WBOY앞으로
2023-04-28 13:55:131350검색

    메인 디자인

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

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

    • 버블 폭발 실현

    • 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<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제