溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂

發(fā)布時(shí)間:2022-04-06 10:34:24 來(lái)源:億速云 閱讀:206 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂”,在日常操作中,相信很多人在Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

    主要設(shè)計(jì)

    • 設(shè)計(jì)游戲界面,用swing實(shí)現(xiàn)

    • 繪制游戲啟動(dòng)界面、結(jié)束界面、地圖、主角、道具

    • 實(shí)現(xiàn)泡泡爆炸

    • 實(shí)現(xiàn)雙主角PK(積分制)

    • 實(shí)現(xiàn)道具掉落和相應(yīng)屬性加成

    • 實(shí)現(xiàn)游戲音效和背景音樂(lè)

    功能截圖

    游戲啟動(dòng)界面:

    Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂

    游戲開(kāi)始界面:

    Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂

    移動(dòng)效果:

    Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂

    釋放泡泡

    Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂

    泡泡爆炸效果:

    Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂

    代碼實(shí)現(xiàn)

    游戲啟動(dòng)類(lèi)

    public class GameStart {
        public static void main(String[] args) {
    
            //整個(gè)程序的入口 啟動(dòng)
            StartFrame startFrame = new StartFrame();
            startFrame.setVisible(true);
        }
    }

    核心監(jiān)聽(tīng)類(lèi)

    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;
    		}
    	}
    	//松開(kāi)
    	@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;
    		}
    	}
    }

    核心線(xiàn)程類(lèi)

    public class GameThread extends Thread{
    	//計(jì)時(shí)數(shù)據(jù)
    	private static int time ;
    	private boolean flag=true;
    	//重構(gòu)老項(xiàng)目
    	@Override
    	public void run() {
    		//這個(gè)循環(huán)控制游戲整體進(jìn)度
    //		while(flag){
    			// 死循環(huán) 狀態(tài)變量進(jìn)行控制
    			//1.加載地圖 人物
    			loadElement();
    			//2.顯示地圖人物(流程 自動(dòng)化(移動(dòng),碰撞))
    			time = 0;
    			loadBGM();
    			runGame();
    			//3.結(jié)束地圖
    
    
    
    			try {
    				TimeUnit.MILLISECONDS.sleep(150);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    //		}
    	}
    	//控制進(jìn)度 但是作為控制 請(qǐng)不要接觸load 只能通過(guò)元素管理器訪(fǎng)問(wèn)元素
    	public void loadElement(){
    		ElementManager.getInstance().load();
    	}
    	public void runGame(){
    		//這個(gè)循環(huán)控制每個(gè)關(guān)卡 地圖中玩的狀態(tài)
    		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);
    			//迭代器在遍歷的過(guò)程中,迭代器中的元素不可以變化(增加或減少)
    			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);
    
    					}
    				}
    			}
    			//使用一個(gè)獨(dú)立的方法來(lái)進(jìn)行判定
    			PK();
    
    			//游戲的流程控制
    			linkGame();
    
    
    			try {
    				TimeUnit.MILLISECONDS.sleep(100);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			//死亡 通關(guān)狀態(tài) 結(jié)束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");
    		//進(jìn)行比較
    		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");
    //		//一秒鐘增加一個(gè)敵機(jī)
    //		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();
    
    	}
    	//敵機(jī)的創(chuàng)建
    	
    	
    }

    到此,關(guān)于“Java怎么實(shí)現(xiàn)經(jīng)典游戲泡泡堂”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI