⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamelisteners.java

📁 SIMULATION FOURMILIERE -3D-ISOMETRIQUE
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                        else
                            gameFrame.setLeftPanelSamantha();
                        game.getSamantha().getTeam().undoGroup();

                    // Different tiles ? We build a new group
					} else {
						List<Insect> insGroup = game.getSamantha().getTeam().createGroup(pos1, pos2);
						gameFrame.setLeftPanelGroup(insGroup);
					}
					break;
					
				// Move button
				case BTN_MOUSE_MOVE:
			       	Insect samantha = game.getSamantha();
                	samantha.setDirection(pos2);
					for(Insect insect : samantha.getTeam().getTabInsect())
                         if(insect.getIsInGroup() == true) {
                             insect.setDirection(pos2, Order.FOLLOW_GROUP, samantha);
                             insect.setRefPoint(pos2);
                         }
                     break;
				}
			}
		};
		
        // Listener on the antWorker percentage's JSlider
        gameFrame.addSliderListener(GameFrame.SlideControls.SLI_WORKER, new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                JSlider source = (JSlider)e.getSource();
                if (!source.getValueIsAdjusting()) {
                    int percent = source.getValue();
                    game.getWorld().getTeams().get(0).setPercentWorker(percent);
                }
            }
        });
        
        // Listener on the knowledges / food JSlider
        gameFrame.addSliderListener(GameFrame.SlideControls.SLI_KNOWLEDGE, new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                JSlider source = (JSlider)e.getSource();
                if (!source.getValueIsAdjusting()) {
                    int percent = source.getValue();
                    game.getWorld().getTeams().get(0).setPercentKnowledge(100 - percent);
                }
            }
        });
        
        // Listener for the 'Employ a bug' button
        gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Bug, new MouseAdapter() {
        	@Override public void mouseClicked(MouseEvent e) {
                Team team = game.getWorld().getTeams().get(0);
                int food = team.getFoodStock();
                if (food > Team.FOOD_NEEDED_FOR_A_BUG) {
                    team.getMaster().addBug();
                    if (team.getFoodStock() < Team.FOOD_NEEDED_FOR_A_BUG) {
                    	gameFrame.updateGameButton(GameFrame.GameControls.GAM_Bug, false);
                    	game.desactivateBugButton();
                    }
                }
            }
        });

        // Listener for the 'Add a kamikaze' button
        gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Kamikaze, new MouseAdapter() {
        	@Override public void mouseClicked(MouseEvent e) {
                Team team = game.getWorld().getTeams().get(0);
                int food = team.getFoodStock();
                if (food > Team.FOOD_NEEDED_FOR_A_KAMIKAZE) {
                	team.getMaster().addKamikaze();
                	if (team.getFoodStock() < Team.FOOD_NEEDED_FOR_A_KAMIKAZE) {
                		gameFrame.updateGameButton(GameFrame.GameControls.GAM_Kamikaze, false);
                		game.desactivateKamikazeButton();
                	}
                }
            }
        });
        
        // Listener for the 'Develop Shields' button
        gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Shield, new MouseAdapter() {
        	@Override public void mouseClicked(MouseEvent e) {
                Team team = game.getWorld().getTeams().get(0);
                int food = team.getKnowledges();
                if (food > Team.FOOD_NEEDED_FOR_SHIELD) {
                	team.activateShield();
                	gameFrame.updateGameButton(GameFrame.GameControls.GAM_Shield, false);
                	gameFrame.updateToolTip(GameFrame.GameControls.GAM_Shield, "You have already developped shields", false);
                } else
                	SelectBuilder.showMessageInfo(gameFrame.getTitle(), "You don't have enough food to develop shields. Sorry !");
            }
        });
        
        // Listener for the 'Develop veterans' button
        gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Veteran, new MouseAdapter() {
        	@Override public void mouseClicked(MouseEvent e) {
                Team team = game.getWorld().getTeams().get(0);
                updateVeteransButton(team);
        	}
        });

        
		// Play menu
		gameFrame.addButtonListener(GameFrame.BtnControls.BTN_Play, new MouseAdapter() {
			@Override public void mouseClicked(MouseEvent e) {
				// Before we launch the game, we verify that we have at least one antHill of each sort
				if (game.getAntHill() == null || game.getAntHillOpp().isEmpty())
					SelectBuilder.showMessageInfo(gameFrame.getTitle(), "You must have at least one antHill of each sort !");
				else {
					// If all is good, we remove buttons and events and we indicate that we have finished
					game.setNewGame(true);
					game.setInitBreak(true);
				}
			}
		});

		// New level menu
		gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileLevelNew, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (game.confirmLostModifications())
					game.defineNewWorld(Game.typeWorld.plain);
			}
		});

		// Load level menu
		gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileLevelOpen, new ActionListener() {
    		public void actionPerformed(ActionEvent e) {
    			if (!game.confirmLostModifications())
    				return;
    			if (game.loadStateFromFile(Game.TypeFile.LEVEL)) {
    				game.getAntHillsPositions();
    				game.getWorld().updateAllModel();
    			}
    		}
    	});

		// Save level menu
		gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileLevelSave, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				game.saveStateToFile(Game.TypeFile.LEVEL);
			}
		});

		// Load game menu
		gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileGameOpen, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				game.setGamePaused(true);
				if (game.loadStateFromFile(Game.TypeFile.GAME)) {
					game.getWorld().updateAllModel();
					game.setInitBreak(true);
					game.setGameBreak(true);
					game.setNewGame(false);
					game.getWorld().updateAllModel();
				}
				game.setGamePaused(false);
			}
		});

		// Save game menu
		gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileGameSave, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				game.setGamePaused(true);
				game.saveStateToFile(Game.TypeFile.GAME);
				game.setGamePaused(false);
			}
		});

		// Close game menu
		gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileGameClose, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				game.setGamePaused(true);
				if (!SelectBuilder.showMessageConfirm(gameFrame.getTitle(), "Your game will be lost if you not save before. Continue anyway ?")) {
					game.setGamePaused(false);
					return;
				}
				game.setGameBreak(true);
				gameFrame.prepareGraphicForLevelEditor();
				game.setGamePaused(false);
			}
		});
		
		// Frame resizing ?
        gameFrame.addResizeFrameListener(new ComponentAdapter() {
			@Override public void componentResized(ComponentEvent e) {
				gameFrame.resizeMenu();
			}
        });
		
	}

	
	/**
	 * Replace the listener associated to the GridPane.
	 * If an old one was associated, we remove it
	 * @param listener the new listener
	 */
	void replaceMainListener(MainLst listener) {
		gameFrame.removeInputListener(inputEditor);
		gameFrame.removeGridPaneListener(gridPaneListener);
		if (listener == MainLst.LST_Level)
			gameFrame.addGridPaneListener(inputEditor);
		else
			gameFrame.addGridPaneListener(gridPaneListener);
	}

	
	/**
	 * Update the veteran button so that the player could buy the next element
	 * @param team	the player's team
	 */
	private void updateVeteransButton(Team team) {
		// Variables
		int needKnown = 0;
		int nextKnown = 0;
		Rank nextRank = null;
		String devel = null;
		String toolTip = null;
		
		// We get the actual variables
		int knowledge = team.getKnowledges();
		int food = team.getFoodStock();
		Rank rank = team.getRank();
		
		// If we are already generals, we do nothing
		if (rank == Rank.GENERAL)
			return;
		
		// We get all the information wee need
		switch(rank) {
		case PRIVATE:
			needKnown = Team.KNOWLEDGE_FOR_SERGEANTS;
			nextKnown = Team.KNOWLEDGE_FOR_CAPTAINS;
			nextRank = Rank.SERGEANT;
			devel = "captains";
			break;
		case SERGEANT:
			needKnown = Team.KNOWLEDGE_FOR_CAPTAINS;
			nextKnown = Team.KNOWLEDGE_FOR_MAJORS;
			nextRank = Rank.CAPTAIN;
			devel = "majors";
			break;
		case CAPTAIN:
			needKnown = Team.KNOWLEDGE_FOR_MAJORS;
			nextKnown = Team.KNOWLEDGE_FOR_COLONELS;
			nextRank = Rank.MAJOR;
			devel = "colonels";
			break;

		case MAJOR:
			needKnown = Team.KNOWLEDGE_FOR_COLONELS;
			nextKnown = Team.KNOWLEDGE_FOR_GENERALS;
			nextRank = Rank.COLONEL;
			devel = "generals";
			break;

		case COLONEL:
			needKnown = Team.KNOWLEDGE_FOR_GENERALS;
			nextRank = Rank.GENERAL;
			break;
		}

		// Not enough food or knowledges ? We exit
		if (food < Team.FOOD_NEEDED_FOR_VETERANS || knowledge < needKnown) {
			return;
		}

		if (devel == null)
			toolTip = "You reached the maximum. You can't develop this any further!";
		else
			toolTip = "Develop " + devel + ": $" + Team.FOOD_NEEDED_FOR_VETERANS + ", (K) " + nextKnown;
		gameFrame.updateToolTip(GameFrame.GameControls.GAM_Veteran, toolTip, true);
		gameFrame.updateToolTip(GameFrame.GameControls.GAM_Veteran, toolTip + " (unvailable)", false);
		gameFrame.updateGameButton(GameFrame.GameControls.GAM_Veteran, false);
		team.setFoodStock(food - Team.FOOD_NEEDED_FOR_VETERANS);
		team.setRank(nextRank);
		game.desactivateVeteranButton();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -