Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Random;
- import java.util.Scanner;
- import java.util.Set;
- public class Board {
- private List<Player> characters = new ArrayList<Player>();
- private Set<Weapon> weapons = new HashSet<Weapon>();
- private Map<String,Room> rooms = new HashMap<String,Room>();
- private Tile[][] gameBoard = new Tile[26][27];
- private Set<Card> cards = new HashSet<Card>();
- private Case envelope;
- private final int numberOfPlayers; // number of people playing
- private int eliminatedNonNPC = 0;
- public Board(){
- parseRooms();
- parseGameBoard();
- parseCharacters();
- parseWeapons();
- placeWeapons();
- Scanner s;
- numberOfPlayers = askNumPlayers();
- generateCards();
- printBoard();
- System.out.printf("playing with %d players.%n",numberOfPlayers);
- playGame();
- }
- public void parseRooms(){
- String name = "";
- try {
- Scanner scan = new Scanner(new File("rooms.txt"));
- while(scan.hasNextLine()){
- name = scan.next();
- if(rooms.containsKey(name)){
- Room room1 = rooms.get(name);
- Room room2 = rooms.get(scan.next());
- room1.setSecretPassage(room2);
- room2.setSecretPassage(room1);
- }
- else{rooms.put(name.substring(0,1), new Room(name));}
- }
- scan.close();
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- /*for(String s : rooms.keySet()){
- if(rooms.get(s).getSecretPassage()!= null){System.out.printf("key : %s value: %s secret room: %s%n",s,rooms.get(s).getName(),rooms.get(s).getSecretPassage().getName());}
- else{System.out.printf("key : %s value: %s%n",s,rooms.get(s).getName());}
- }*/
- }
- public void parseGameBoard(){
- String line = "";
- String s = "";
- int x = 0;
- int y = 0;
- Tile t;
- DoorTile d;
- try {
- Scanner scan = new Scanner(new File("gameBoard.txt"));
- while(scan.hasNextLine()){
- line = scan.nextLine();
- for(int i = 0; i < line.length(); i++){
- s = line.substring(i, i+1);
- if(rooms.containsKey(s)){
- t = new Tile(rooms.get(s),false, x, y);
- gameBoard[x][y] = t;
- rooms.get(s).addTileToRoom(t);
- }
- else if(rooms.containsKey(s.toLowerCase())){
- d = new DoorTile(rooms.get(s.toLowerCase()),true, x, y);
- gameBoard[x][y] = d;
- rooms.get(s.toLowerCase()).addDoorToRoom(d);
- }
- else if(s.equalsIgnoreCase("!")){
- t = new Tile(null,false, x, y);
- gameBoard[x][y] = t;
- }
- else if(s.equalsIgnoreCase("-")){
- t = new Tile(null,true, x, y);
- gameBoard[x][y] = t;
- }
- y++;
- }
- y = 0;
- x++;
- }
- scan.close();
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void parseCharacters(){
- Player p;
- String name = "";
- int x = 0;
- int y = 0;
- try {
- Scanner scan = new Scanner(new File("people.txt"));
- while(scan.hasNext()){
- name = scan.next();
- x = scan.nextInt();
- y = scan.nextInt();
- p = new Player(this, name, x, y);
- characters.add(p);
- gameBoard[x][y].setOnTile(p);
- }
- scan.close();
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //for(Player c : characters){System.out.println(c.toString());}
- }
- public void parseWeapons(){
- String name = "";
- try {
- Scanner scan = new Scanner(new File("weapons.txt"));
- while (scan.hasNextLine()){
- name = scan.nextLine();
- weapons.add(new Weapon(name, 0, 0));//inital location of weapons is 0,0 as they are not in rooms yet
- }
- scan.close();
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //for(Weapon w : weapons){System.out.println(w.getName());}
- }
- public void placeWeapons(){
- Set<String> roomKeys = new HashSet<String>();
- roomKeys.addAll(rooms.keySet());
- String roomKey = "";
- for(Weapon w : weapons){
- //pull random roomkey from roomkeys
- roomKey = (String)randomFromSet(roomKeys);
- roomKeys.remove(roomKey);
- rooms.get(roomKey).addEntityToRoom(w);
- }
- }
- public int askNumPlayers(){
- int i=0;
- Scanner s = new Scanner(System.in);
- System.out.printf("how many players 3-%d%n",characters.size());
- do{
- if(s.hasNextInt()){
- i = s.nextInt();
- if(i < 3 || i > characters.size()){
- System.out.println("invalid input.");
- System.out.printf("how many players 3-%d%n",characters.size());
- i = 0;
- }
- }
- }while(i == 0);
- //s.close();
- return i;
- }
- public void generateCards(){
- Set<Card> deck = new HashSet<Card>();
- Set<Card> temp = new HashSet<Card>();
- Card person;
- Card weapon;
- Card room;
- for(Player P : characters){
- temp.add(new Card(Card.Types.PERSON, P.getName()));
- }
- cards.addAll(temp);
- person = (Card)randomFromSet(temp);
- temp.remove(person);
- deck.addAll(temp);
- temp.clear();
- for(Weapon w : weapons){
- temp.add(new Card(Card.Types.WEAPON, w.getName()));
- }
- cards.addAll(temp);
- weapon = (Card)randomFromSet(temp);
- temp.remove(weapon);
- deck.addAll(temp);
- temp.clear();
- for(Room r : rooms.values()){
- temp.add(new Card(Card.Types.ROOM, r.getName()));
- }
- cards.addAll(temp);
- room = (Card)randomFromSet(temp);
- temp.remove(room);
- deck.addAll(temp);
- temp.clear();
- try {
- envelope = new Case(person ,weapon ,room );
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- dealCards(deck);
- }
- public void dealCards(Set<Card> deck){
- int i = 0;
- Card c;
- while(!deck.isEmpty()){
- if(i >= numberOfPlayers){i = 0;}
- c = (Card)randomFromSet(deck);
- deck.remove(c);
- characters.get(i).getHand().add(c);
- i++;
- }
- }
- public Object randomFromSet(Set<?> from){
- Random rnd = new Random();
- int i = rnd.nextInt(from.size());
- return from.toArray()[i];
- }
- public void printBoard(){
- String row = "";
- for(int y = 0; y < 27 ; y++){
- for(int x = 0; x < 26; x++){
- row = row + gameBoard[x][y].display();
- }
- System.out.println(row);
- row = "";
- }
- }
- public void playGame(){
- //for(int i = numberOfPlayers - 1; i < characters.size(); i++){characters.get(i).eliminate();}
- while(eliminatedNonNPC < numberOfPlayers){
- for(int i = 0; i < numberOfPlayers;i++){
- if(envelope != null){characters.get(i).turn();}
- }
- }
- }
- public int roll(){
- Random rnd = new Random();
- int i = rnd.nextInt(6) + 1;
- System.out.println("rolling!!!");
- System.out.printf("you rolled a %d.%n",i);
- return i;
- }
- public void movePlayer(Player p) {
- int playerX = p.getX();
- int playerY = p.getY();
- Tile playerTile = gameBoard[playerX][playerY];
- System.out.printf("%s's turn.%n", p.getName());
- if(!playerTile.isDoor() && playerTile.getRoom() != null){
- moveFromRoom(p, playerTile.getRoom());
- }
- else{moveFromTile(p,roll(),null);}
- printBoard();
- if(!playerTile.isDoor() && playerTile.getRoom()!= null){makeSuggestion(p);}
- }
- public void moveFromRoom(Player p, Room r){
- printBoard();
- Tile t = gameBoard[p.getX()][p.getY()];
- t.clearTile();
- t = r.leaveRoom(p);
- if(t==null){r.getSecretPassage().addEntityToRoom(p);}
- else {
- t.setOnTile(p);
- printBoard();
- moveFromTile(p,roll(),r);
- }
- }
- public void moveFromTile(Player p,int movesLeft,Room roomLeft){
- String moveTo = "";
- int playerX = p.getX();
- int playerY = p.getY();
- Tile t = gameBoard[playerX][playerY];
- System.out.printf("you can move %d spaces.%n",movesLeft);
- if(t.getRoom() != null && t.getRoom() != roomLeft){moveTo += "0 - enter: " + t.getRoom().getName()+ "\r\n";}
- moveTo += "1 - up - blocked: " + !gameBoard[playerX][playerY-1].canMoveTo()+ "\r\n";
- moveTo += "2 - right - blocked: " + !gameBoard[playerX+1][playerY].canMoveTo()+ "\r\n";
- moveTo += "3 - down - blocked: " + !gameBoard[playerX][playerY+1].canMoveTo()+ "\r\n";
- moveTo += "4 - left - blocked: " + !gameBoard[playerX-1][playerY].canMoveTo()+ "\r\n";
- System.out.println(moveTo);
- Scanner s = new Scanner(System.in);
- int i = -1;
- System.out.printf("enter a unblocked tile number ");
- do{
- if(s.hasNextInt()){
- i = s.nextInt();
- if(i == 0){
- if(t.getRoom() == null){i = -1;}
- else if(t.getRoom() == roomLeft){i = -1;}
- }
- else if(i < 0 || i > 4){i = -1;}
- else if(i == 1 &&!gameBoard[playerX][playerY-1].canMoveTo()){i = -1;}
- else if(i == 2 &&!gameBoard[playerX+1][playerY].canMoveTo()){i = -1;}
- else if(i == 3 &&!gameBoard[playerX][playerY+1].canMoveTo()){i = -1;}
- else if(i == 4 &&!gameBoard[playerX-1][playerY].canMoveTo()){i = -1;}
- }
- }while(i < 0);
- t.clearTile();
- if(i == 0){
- t.getRoom().addEntityToRoom(p);
- printBoard();
- }
- else{
- if(i == 1) {gameBoard[playerX][playerY-1].setOnTile(p);}
- else if(i == 2) {gameBoard[playerX+1][playerY].setOnTile(p);}
- else if(i == 3) {gameBoard[playerX][playerY+1].setOnTile(p);}
- else {gameBoard[playerX-1][playerY].setOnTile(p);}
- if(movesLeft > 1){
- printBoard();
- moveFromTile(p,movesLeft-1,roomLeft);
- }
- }
- }
- public void makeSuggestion(Player p){
- System.out.printf("%s is making a suggestion.%n",p.getName());
- Tile playerTile = gameBoard[p.getX()][p.getY()];
- Case suggestion = p.makeSuggesion(cards, playerTile.getRoom().getName());
- if(suggestion != null){
- System.out.printf("%s suggests%n",p.getName());
- for(Card c : suggestion.getCards()){
- System.out.printf("the %s%n",c.getName());
- if(c.getType() == Card.Types.WEAPON){
- for(Weapon w : weapons){
- if(w.getName().equals(c.getName())){
- if(gameBoard[w.getX()][w.getY()].getRoom()!= null){
- gameBoard[w.getX()][w.getY()].getRoom().removeEntityFromRoom(w);
- }
- gameBoard[w.getX()][w.getY()].clearTile();
- playerTile.getRoom().addEntityToRoom(w);
- }
- }
- }
- else if(c.getType() == Card.Types.PERSON){
- for(Player suspect : characters){
- if(suspect.getName().equals(c.getName())){
- if(gameBoard[suspect.getX()][suspect.getY()].getRoom()!= null){
- gameBoard[suspect.getX()][suspect.getY()].getRoom().removeEntityFromRoom(suspect);
- }
- gameBoard[suspect.getX()][suspect.getY()].clearTile();
- playerTile.getRoom().addEntityToRoom(suspect);
- }
- }
- }
- }
- }
- if(!resolveSuggestion(p,suggestion)){System.out.println("no other player had any matching cards");}
- }
- public boolean resolveSuggestion(Player p, Case c){
- Card inCase = null;
- int currentPlayer = 0;
- for(int i = 0; i < numberOfPlayers;i++){
- if(characters.get(i).equals(p)){currentPlayer = i;}
- }
- for(int i = currentPlayer + 1; i < numberOfPlayers;i++){
- inCase = characters.get(i).compareCase(c);
- if(inCase != null){
- System.out.printf("%s showed you the card of %s.%n",characters.get(i).getName(),inCase.getName());
- return true;
- }
- }
- for(int i = 0; i < currentPlayer;i++){
- inCase = characters.get(i).compareCase(c);
- if(inCase != null){
- System.out.printf("%s showed you the card of %s.%n",characters.get(i).getName(),inCase.getName());
- return true;
- }
- }
- return false;
- }
- public void makeAccusation(Player p){
- System.out.printf("%s is making a accusation!!!%n",p.getName());
- Case accusation = p.makeAccusation(cards);
- if(accusation != null){
- System.out.printf("%s suggests%n",p.getName());
- for(Card c : accusation.getCards()){
- System.out.printf("the %s!!!%n",c.getName());
- }
- if(accusation.equals(envelope)){
- System.out.printf("%s solved the mystery they are the winner!!!",p.getName());
- envelope = null;
- }
- else {
- System.out.printf("%s failed to solve the mystery they are eliminated",p.getName());
- p.eliminate();
- eliminatedNonNPC++;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement