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

📄 servergamerisk.java

📁 java 开源游戏源码 RISK 联机对战 战棋类
💻 JAVA
字号:
package risk.lobby.server;

import risk.engine.Risk;
import risk.engine.ai.AIPlayer;

import risk.engine.core.RiskGame;
import risk.engine.core.Player;

import org.lobby.server.TurnBasedGame;

import java.util.Iterator;
import java.util.Vector;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;

//import risk.ui.Increment1GUI.Increment1Frame;
//import risk.ui.SimpleGUI.RiskGUI;

import java.util.Map;
import java.util.HashMap;

import java.io.Serializable;

public class ServerGameRisk extends TurnBasedGame {

	private ServerRisk myrisk;

	private Map<String,String> playersMap;
	private Map<String,String> inverseMap;

	public ServerGameRisk() {

		myrisk = new ServerRisk(this);

		// POP UP DEBUG WINDOW
		//Increment1Frame gui = new Increment1Frame( myrisk );
		//RiskGUI gui = new RiskGUI( myrisk );
        	//gui.setVisible(true);

		playersMap = new HashMap<String,String>();
		inverseMap = new HashMap<String,String>();

	}

	public void createNewGame(String startGameOptions, String[] players) {

		// sort them so if player bob was green last time, they r again
		Arrays.sort(players);

		playersMap.clear();
		inverseMap.clear();

		//System.out.println("\tNEW GAME STARTING FOR RISK: "+gameid);

		//myguid = gameid;

		myrisk.makeNewGame();


		String[] options = startGameOptions.split("\\n");

		int aicrap = Integer.parseInt(options[0]);
		int aieasy = Integer.parseInt(options[1]);
		int aihard = Integer.parseInt(options[2]);

		if ((players.length+aicrap+aieasy+aihard)>RiskGame.MAX_PLAYERS ) { throw new RuntimeException("player number missmatch for startgame"); }

		myrisk.addSetupCommandToInbox(options[3]); // set the map file to use

		List<String> colorString = new ArrayList<String>();
		colorString.add( myrisk.getRiskconfig("default.player1.color") );
		colorString.add( myrisk.getRiskconfig("default.player2.color") );
		colorString.add( myrisk.getRiskconfig("default.player3.color") );
		colorString.add( myrisk.getRiskconfig("default.player4.color") );
		colorString.add( myrisk.getRiskconfig("default.player5.color") );
		colorString.add( myrisk.getRiskconfig("default.player6.color") );
		Iterator<String> it = colorString.iterator();

		for (int c=0;c<players.length;c++) {

			it.hasNext();
			String color = it.next();

			String playerid = "player"+(c+1);

			playersMap.put(players[c], playerid);
			inverseMap.put(playerid, players[c]);

			myrisk.addSetupCommandToInbox(playerid,"newplayer human "+color + " " + players[c]);

		}

		for (int c=0;c<aicrap;c++) {


			it.hasNext();
			String color = it.next();

			myrisk.addSetupCommandToInbox("newplayer ai crap "+color + " CrapBot" + (c+1));

		}

		for (int c=0;c<aieasy;c++) {

			it.hasNext();
			String color = it.next();

			myrisk.addSetupCommandToInbox("newplayer ai easy "+color + " EasyBot" + (c+1));
		}

		for (int c=0;c<aihard;c++) {

			it.hasNext();
			String color = it.next();

			myrisk.addSetupCommandToInbox("newplayer ai hard "+color + " HardBot" + (c+1));
		}

		myrisk.addSetupCommandToInbox(options[4]); // start the game

		// only return when the game is setup
		while(!myrisk.getWaiting()) {

			try { Thread.sleep(100); }
			catch(InterruptedException e){}

		}

	}

	public void startGame() {

		myrisk.setPaued(false);

	}

	// this NEEDS to call gameFinished(winning player)
	public void stopGame() {

		myrisk.setPaued(true);

		RiskGame game = myrisk.getGame();

		if ( game.checkPlayerWon() ) {

			gameFinished( game.getCurrentPlayer().getName() );

		}
		else {

			String name="???";
			int best=-1;

			Vector players = game.getPlayers();

			for (int c=0;c<players.size();c++) {

				Player player = (Player)players.elementAt(c);

				// player.getType() == Player.PLAYER_HUMAN &&
				// if all resign then no humans left
				if ( player.getNoTerritoriesOwned()>best) {

					name = player.getName();
					best = player.getNoTerritoriesOwned();

				}

			}

			gameFinished(name);	

		}

	}

	public void destroyGame() {

		myrisk.setKillFlag();

	}


	public void clientHasJoined(String username) {

		String playerid = playersMap.get(username);

		System.out.println(username+" -> "+playerid);

		sendObjectToClient(new Object[] { playerid,myrisk.getGame() }, username );

	}

	// get message from the user
	public void stringFromPlayer(String username, String message) {

		//System.out.print("\tGOTFROMCLIENT "+username+":"+message+"\n");


		String address = playersMap.get(username);

		//if (game.getCurrentPlayer()!=null) { System.out.print( "\t"+game.getCurrentPlayer().getAddress()+" "+address ); }

		// game not started OR game IS started and it is there go
		if (message.trim().equals("closegame")) {

			System.out.println("\tCLOSEGAME NOT ALLOWED TO BE SENT TO CORE: "+username);

		}
		else if (myrisk.getGame().getCurrentPlayer()!=null && myrisk.getGame().getCurrentPlayer().getAddress().equals( address )) {

			// creates the players with the correct address
			myrisk.addPlayerCommandToInbox(address , message);

		}
		else {

			System.out.print("\tCHEATING!!!!: "+username+" "+message+"\n");

			//listoner.sendChatroomMessage(username+" is trying to cheat!");

		}

	}


	public void doBasicGo(String username) {

		String playerid = playersMap.get(username);

		// this check is already done
		//if (myrisk.getGame().getCurrentPlayer().getAddress().equals(playerid)) {

			myrisk.addPlayerCommandToInbox(playerid+"-doBasicGo", AIPlayer.getOutput(myrisk.getGame(),AIPlayer.aicrap) );

		//}
		// else something is going very wrong!!!!
		// such as cheating

	}

	public void playerResigns(String username) {

		String playerid = playersMap.get(username);

		//String currentAddress = myrisk.getGame().getCurrentPlayer().getAddress();

		if (playerid != null) {


			myrisk.resignPlayer(playerid);


		}

		// already handled by the turn based game
		// ----
		// if they have resigned on there own go then do a go for them
		//if (currentAddress.equals(playerid)) {
		//	myrisk.parser( AIPlayer.getOutput(myrisk.getGame(),AIPlayer.aicrap) );
		//}

	}

	public void renamePlayer(String oldser,String newuser) {

	    synchronized(playersMap) {

		String playerid = playersMap.get(oldser);

		if (playerid!=null) {

			playersMap.remove(oldser);

			playersMap.put(newuser,playerid);

			inverseMap.remove(playerid);

			inverseMap.put(playerid,newuser);

		}
	    }

	    myrisk.renamePlayer(oldser,newuser);

	}


	public void getInputFromSomeone() {

		// trying to find what was null
		System.out.println(inverseMap);
		System.out.println(myrisk);
		System.out.println(myrisk.getGame());
		System.out.println(myrisk.getGame().getCurrentPlayer());
		System.out.println(myrisk.getGame().getCurrentPlayer().getAddress());

		String username = inverseMap.get( myrisk.getGame().getCurrentPlayer().getAddress() );

		getInputFromClient(username);

	}



}

⌨️ 快捷键说明

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