Advertisement
Guest User

Untitled

a guest
Aug 1st, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.92 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Random;
  9. import java.util.Scanner;
  10. import java.util.Set;
  11.  
  12.  
  13. public class Board {
  14. private List<Player> characters = new ArrayList<Player>();
  15. private Set<Weapon> weapons = new HashSet<Weapon>();
  16. private Map<String,Room> rooms = new HashMap<String,Room>();
  17. private Tile[][] gameBoard = new Tile[26][27];
  18. private Set<Card> cards = new HashSet<Card>();
  19. private Case envelope;
  20. private final int numberOfPlayers; // number of people playing
  21. private int eliminatedNonNPC = 0;
  22.  
  23. public Board(){
  24. parseRooms();
  25. parseGameBoard();
  26. parseCharacters();
  27. parseWeapons();
  28. placeWeapons();
  29. Scanner s;
  30. numberOfPlayers = askNumPlayers();
  31. generateCards();
  32. printBoard();
  33. System.out.printf("playing with %d players.%n",numberOfPlayers);
  34. playGame();
  35. }
  36.  
  37. public void parseRooms(){
  38. String name = "";
  39. try {
  40. Scanner scan = new Scanner(new File("rooms.txt"));
  41. while(scan.hasNextLine()){
  42. name = scan.next();
  43. if(rooms.containsKey(name)){
  44. Room room1 = rooms.get(name);
  45. Room room2 = rooms.get(scan.next());
  46. room1.setSecretPassage(room2);
  47. room2.setSecretPassage(room1);
  48. }
  49. else{rooms.put(name.substring(0,1), new Room(name));}
  50. }
  51. scan.close();
  52. } catch (FileNotFoundException e) {
  53. // TODO Auto-generated catch block
  54. e.printStackTrace();
  55. }
  56. /*for(String s : rooms.keySet()){
  57. 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());}
  58. else{System.out.printf("key : %s value: %s%n",s,rooms.get(s).getName());}
  59. }*/
  60.  
  61. }
  62. public void parseGameBoard(){
  63. String line = "";
  64. String s = "";
  65. int x = 0;
  66. int y = 0;
  67. Tile t;
  68. DoorTile d;
  69. try {
  70. Scanner scan = new Scanner(new File("gameBoard.txt"));
  71. while(scan.hasNextLine()){
  72. line = scan.nextLine();
  73. for(int i = 0; i < line.length(); i++){
  74. s = line.substring(i, i+1);
  75. if(rooms.containsKey(s)){
  76. t = new Tile(rooms.get(s),false, x, y);
  77. gameBoard[x][y] = t;
  78. rooms.get(s).addTileToRoom(t);
  79. }
  80. else if(rooms.containsKey(s.toLowerCase())){
  81. d = new DoorTile(rooms.get(s.toLowerCase()),true, x, y);
  82. gameBoard[x][y] = d;
  83. rooms.get(s.toLowerCase()).addDoorToRoom(d);
  84. }
  85. else if(s.equalsIgnoreCase("!")){
  86. t = new Tile(null,false, x, y);
  87. gameBoard[x][y] = t;
  88. }
  89. else if(s.equalsIgnoreCase("-")){
  90. t = new Tile(null,true, x, y);
  91. gameBoard[x][y] = t;
  92. }
  93. y++;
  94. }
  95. y = 0;
  96. x++;
  97. }
  98. scan.close();
  99. } catch (FileNotFoundException e) {
  100. // TODO Auto-generated catch block
  101. e.printStackTrace();
  102. }
  103.  
  104. }
  105. public void parseCharacters(){
  106. Player p;
  107. String name = "";
  108. int x = 0;
  109. int y = 0;
  110. try {
  111. Scanner scan = new Scanner(new File("people.txt"));
  112. while(scan.hasNext()){
  113. name = scan.next();
  114. x = scan.nextInt();
  115. y = scan.nextInt();
  116. p = new Player(this, name, x, y);
  117. characters.add(p);
  118. gameBoard[x][y].setOnTile(p);
  119. }
  120. scan.close();
  121. } catch (FileNotFoundException e) {
  122. // TODO Auto-generated catch block
  123. e.printStackTrace();
  124. }
  125. //for(Player c : characters){System.out.println(c.toString());}
  126. }
  127. public void parseWeapons(){
  128. String name = "";
  129. try {
  130. Scanner scan = new Scanner(new File("weapons.txt"));
  131. while (scan.hasNextLine()){
  132. name = scan.nextLine();
  133. weapons.add(new Weapon(name, 0, 0));//inital location of weapons is 0,0 as they are not in rooms yet
  134. }
  135. scan.close();
  136. } catch (FileNotFoundException e) {
  137. // TODO Auto-generated catch block
  138. e.printStackTrace();
  139. }
  140. //for(Weapon w : weapons){System.out.println(w.getName());}
  141.  
  142. }
  143. public void placeWeapons(){
  144. Set<String> roomKeys = new HashSet<String>();
  145. roomKeys.addAll(rooms.keySet());
  146. String roomKey = "";
  147. for(Weapon w : weapons){
  148. //pull random roomkey from roomkeys
  149. roomKey = (String)randomFromSet(roomKeys);
  150. roomKeys.remove(roomKey);
  151. rooms.get(roomKey).addEntityToRoom(w);
  152.  
  153. }
  154. }
  155. public int askNumPlayers(){
  156. int i=0;
  157. Scanner s = new Scanner(System.in);
  158. System.out.printf("how many players 3-%d%n",characters.size());
  159. do{
  160. if(s.hasNextInt()){
  161. i = s.nextInt();
  162. if(i < 3 || i > characters.size()){
  163. System.out.println("invalid input.");
  164. System.out.printf("how many players 3-%d%n",characters.size());
  165. i = 0;
  166. }
  167. }
  168. }while(i == 0);
  169. //s.close();
  170. return i;
  171. }
  172. public void generateCards(){
  173. Set<Card> deck = new HashSet<Card>();
  174. Set<Card> temp = new HashSet<Card>();
  175. Card person;
  176. Card weapon;
  177. Card room;
  178.  
  179. for(Player P : characters){
  180. temp.add(new Card(Card.Types.PERSON, P.getName()));
  181. }
  182. cards.addAll(temp);
  183. person = (Card)randomFromSet(temp);
  184. temp.remove(person);
  185. deck.addAll(temp);
  186. temp.clear();
  187.  
  188. for(Weapon w : weapons){
  189. temp.add(new Card(Card.Types.WEAPON, w.getName()));
  190. }
  191. cards.addAll(temp);
  192. weapon = (Card)randomFromSet(temp);
  193. temp.remove(weapon);
  194. deck.addAll(temp);
  195. temp.clear();
  196.  
  197. for(Room r : rooms.values()){
  198. temp.add(new Card(Card.Types.ROOM, r.getName()));
  199. }
  200. cards.addAll(temp);
  201. room = (Card)randomFromSet(temp);
  202. temp.remove(room);
  203. deck.addAll(temp);
  204. temp.clear();
  205.  
  206. try {
  207. envelope = new Case(person ,weapon ,room );
  208. } catch (Exception e) {
  209. // TODO Auto-generated catch block
  210. e.printStackTrace();
  211. }
  212. dealCards(deck);
  213. }
  214. public void dealCards(Set<Card> deck){
  215. int i = 0;
  216. Card c;
  217. while(!deck.isEmpty()){
  218. if(i >= numberOfPlayers){i = 0;}
  219. c = (Card)randomFromSet(deck);
  220. deck.remove(c);
  221. characters.get(i).getHand().add(c);
  222. i++;
  223. }
  224. }
  225.  
  226. public Object randomFromSet(Set<?> from){
  227. Random rnd = new Random();
  228. int i = rnd.nextInt(from.size());
  229. return from.toArray()[i];
  230. }
  231.  
  232. public void printBoard(){
  233. String row = "";
  234. for(int y = 0; y < 27 ; y++){
  235. for(int x = 0; x < 26; x++){
  236. row = row + gameBoard[x][y].display();
  237. }
  238. System.out.println(row);
  239. row = "";
  240. }
  241. }
  242.  
  243. public void playGame(){
  244. //for(int i = numberOfPlayers - 1; i < characters.size(); i++){characters.get(i).eliminate();}
  245. while(eliminatedNonNPC < numberOfPlayers){
  246. for(int i = 0; i < numberOfPlayers;i++){
  247. if(envelope != null){characters.get(i).turn();}
  248. }
  249. }
  250. }
  251. public int roll(){
  252. Random rnd = new Random();
  253. int i = rnd.nextInt(6) + 1;
  254. System.out.println("rolling!!!");
  255. System.out.printf("you rolled a %d.%n",i);
  256. return i;
  257. }
  258.  
  259. public void movePlayer(Player p) {
  260. int playerX = p.getX();
  261. int playerY = p.getY();
  262. Tile playerTile = gameBoard[playerX][playerY];
  263. System.out.printf("%s's turn.%n", p.getName());
  264. if(!playerTile.isDoor() && playerTile.getRoom() != null){
  265. moveFromRoom(p, playerTile.getRoom());
  266. }
  267. else{moveFromTile(p,roll(),null);}
  268. printBoard();
  269. if(!playerTile.isDoor() && playerTile.getRoom()!= null){makeSuggestion(p);}
  270.  
  271. }
  272. public void moveFromRoom(Player p, Room r){
  273. printBoard();
  274. Tile t = gameBoard[p.getX()][p.getY()];
  275. t.clearTile();
  276. t = r.leaveRoom(p);
  277. if(t==null){r.getSecretPassage().addEntityToRoom(p);}
  278. else {
  279. t.setOnTile(p);
  280. printBoard();
  281. moveFromTile(p,roll(),r);
  282. }
  283. }
  284. public void moveFromTile(Player p,int movesLeft,Room roomLeft){
  285. String moveTo = "";
  286. int playerX = p.getX();
  287. int playerY = p.getY();
  288. Tile t = gameBoard[playerX][playerY];
  289.  
  290. System.out.printf("you can move %d spaces.%n",movesLeft);
  291. if(t.getRoom() != null && t.getRoom() != roomLeft){moveTo += "0 - enter: " + t.getRoom().getName()+ "\r\n";}
  292. moveTo += "1 - up - blocked: " + !gameBoard[playerX][playerY-1].canMoveTo()+ "\r\n";
  293. moveTo += "2 - right - blocked: " + !gameBoard[playerX+1][playerY].canMoveTo()+ "\r\n";
  294. moveTo += "3 - down - blocked: " + !gameBoard[playerX][playerY+1].canMoveTo()+ "\r\n";
  295. moveTo += "4 - left - blocked: " + !gameBoard[playerX-1][playerY].canMoveTo()+ "\r\n";
  296. System.out.println(moveTo);
  297. Scanner s = new Scanner(System.in);
  298. int i = -1;
  299. System.out.printf("enter a unblocked tile number ");
  300. do{
  301. if(s.hasNextInt()){
  302. i = s.nextInt();
  303. if(i == 0){
  304. if(t.getRoom() == null){i = -1;}
  305. else if(t.getRoom() == roomLeft){i = -1;}
  306. }
  307. else if(i < 0 || i > 4){i = -1;}
  308. else if(i == 1 &&!gameBoard[playerX][playerY-1].canMoveTo()){i = -1;}
  309. else if(i == 2 &&!gameBoard[playerX+1][playerY].canMoveTo()){i = -1;}
  310. else if(i == 3 &&!gameBoard[playerX][playerY+1].canMoveTo()){i = -1;}
  311. else if(i == 4 &&!gameBoard[playerX-1][playerY].canMoveTo()){i = -1;}
  312. }
  313. }while(i < 0);
  314. t.clearTile();
  315. if(i == 0){
  316. t.getRoom().addEntityToRoom(p);
  317. printBoard();
  318. }
  319. else{
  320. if(i == 1) {gameBoard[playerX][playerY-1].setOnTile(p);}
  321. else if(i == 2) {gameBoard[playerX+1][playerY].setOnTile(p);}
  322. else if(i == 3) {gameBoard[playerX][playerY+1].setOnTile(p);}
  323. else {gameBoard[playerX-1][playerY].setOnTile(p);}
  324. if(movesLeft > 1){
  325. printBoard();
  326. moveFromTile(p,movesLeft-1,roomLeft);
  327. }
  328. }
  329. }
  330. public void makeSuggestion(Player p){
  331. System.out.printf("%s is making a suggestion.%n",p.getName());
  332. Tile playerTile = gameBoard[p.getX()][p.getY()];
  333. Case suggestion = p.makeSuggesion(cards, playerTile.getRoom().getName());
  334. if(suggestion != null){
  335. System.out.printf("%s suggests%n",p.getName());
  336. for(Card c : suggestion.getCards()){
  337. System.out.printf("the %s%n",c.getName());
  338. if(c.getType() == Card.Types.WEAPON){
  339. for(Weapon w : weapons){
  340. if(w.getName().equals(c.getName())){
  341. if(gameBoard[w.getX()][w.getY()].getRoom()!= null){
  342. gameBoard[w.getX()][w.getY()].getRoom().removeEntityFromRoom(w);
  343. }
  344. gameBoard[w.getX()][w.getY()].clearTile();
  345. playerTile.getRoom().addEntityToRoom(w);
  346. }
  347. }
  348. }
  349. else if(c.getType() == Card.Types.PERSON){
  350. for(Player suspect : characters){
  351. if(suspect.getName().equals(c.getName())){
  352. if(gameBoard[suspect.getX()][suspect.getY()].getRoom()!= null){
  353. gameBoard[suspect.getX()][suspect.getY()].getRoom().removeEntityFromRoom(suspect);
  354. }
  355. gameBoard[suspect.getX()][suspect.getY()].clearTile();
  356. playerTile.getRoom().addEntityToRoom(suspect);
  357. }
  358. }
  359. }
  360. }
  361.  
  362. }
  363. if(!resolveSuggestion(p,suggestion)){System.out.println("no other player had any matching cards");}
  364. }
  365. public boolean resolveSuggestion(Player p, Case c){
  366. Card inCase = null;
  367. int currentPlayer = 0;
  368. for(int i = 0; i < numberOfPlayers;i++){
  369. if(characters.get(i).equals(p)){currentPlayer = i;}
  370. }
  371. for(int i = currentPlayer + 1; i < numberOfPlayers;i++){
  372. inCase = characters.get(i).compareCase(c);
  373. if(inCase != null){
  374. System.out.printf("%s showed you the card of %s.%n",characters.get(i).getName(),inCase.getName());
  375. return true;
  376. }
  377. }
  378. for(int i = 0; i < currentPlayer;i++){
  379. inCase = characters.get(i).compareCase(c);
  380. if(inCase != null){
  381. System.out.printf("%s showed you the card of %s.%n",characters.get(i).getName(),inCase.getName());
  382. return true;
  383. }
  384. }
  385. return false;
  386. }
  387. public void makeAccusation(Player p){
  388. System.out.printf("%s is making a accusation!!!%n",p.getName());
  389. Case accusation = p.makeAccusation(cards);
  390. if(accusation != null){
  391. System.out.printf("%s suggests%n",p.getName());
  392. for(Card c : accusation.getCards()){
  393. System.out.printf("the %s!!!%n",c.getName());
  394. }
  395. if(accusation.equals(envelope)){
  396. System.out.printf("%s solved the mystery they are the winner!!!",p.getName());
  397. envelope = null;
  398. }
  399. else {
  400. System.out.printf("%s failed to solve the mystery they are eliminated",p.getName());
  401. p.eliminate();
  402. eliminatedNonNPC++;
  403. }
  404. }
  405. }
  406. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement