Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- /*-----------------------------------------------------\
- | |
- | Names: Luca Gancie & India Bhalla-Ladd |
- | Date Due: 11/18/16 |
- | Purpose: To simulate a couple moves of the board |
- | game Clue in the object-oriented paradigm |
- | |
- | |
- | |
- | |
- | |
- \------------------------------------------------------*/
- public class Clue {
- public static void main (String args[])
- {
- // S E T U P
- //_______________________________________________________________________________________________________
- //declares arrays for the suspect, weapon, and room objects (analogous to the cards)
- Suspect[] suspects = new Suspect[5];
- Weapon[] weapons = new Weapon[5];
- Room[] rooms = new Room[8];
- //instantiates suspect and weapon arrays, and assigns each card a name
- for(int i = 0; i < suspects.length; i++) //weapons[] and suspects[] have the same length so it can be the same loop
- {
- suspects[i] = new Suspect();
- suspects[i].nameOfChar = suspects[i].names[i];
- weapons[i] = new Weapon();
- weapons[i].nameOfWeapon = weapons[i].names[i];
- }
- //instantiates room array, and assigns each card a name
- for(int i = 0; i < rooms.length; i++)
- {
- rooms[i] = new Room();
- rooms[i].nameOfRoom = rooms[i].names[i];
- }
- System.out.println("Enter an integer number of players from 3-6");
- Scanner kbReader = new Scanner(System.in);
- int numPlayers = 1;
- numPlayers = checkValidityForScanner(3, 6, numPlayers);
- Player[] players = new Player[numPlayers]; //creates a Player array
- for(int i = 0; i < players.length; i++) //loops through players to assign avatarNames, closest rooms
- { //instantiates knownSuspects/Weapons/Rooms and location array
- players[i] = new Player();
- players[i].knownSuspects[i] = new Suspect();
- players[i].knownWeapons[i] = new Weapon();
- players[i].knownRooms[i] = new Room();
- players[i].location[i] = i;
- if(i < 5) //assigns an avatar character to each player
- {
- players[i].avatarName = suspects[i].nameOfChar;
- }
- else //Colonel Mustard is dealt with separately because he is the guiltySuspect
- {
- players[i].avatarName = "Colonel Mustard";
- }
- if(players[i].avatarName == "Professor Plum")
- {
- players[i].nearestRoom = rooms[7];
- }
- if(players[i].avatarName == "Mr. John Green")
- {
- players[i].nearestRoom = rooms[6];
- }
- if(players[i].avatarName == "Mrs. Peacock")
- {
- players[i].nearestRoom = rooms[4];
- }
- if(players[i].avatarName == "Miss Scarlet")
- {
- players[i].nearestRoom = rooms[1];
- }
- if(players[i].avatarName == "Mrs. White")
- {
- players[i].nearestRoom = rooms[6];
- }
- if(players[i].avatarName == "Colonel Mustard")
- {
- players[i].nearestRoom = rooms[2];
- }
- }
- int numSuspectsPerPlayer = Math.floorDiv(suspects.length, numPlayers); //calculates how many suspect cards each player receives (ignoring extra for now)
- int numWeaponsPerPlayer = Math.floorDiv(weapons.length, numPlayers); //calculates how many weapon cards each player receives (ignoring extra for now)
- int numRoomsPerPlayer = Math.floorDiv(rooms.length, numPlayers); //calculates how many room cards each player receives (ignoring extra for now)
- int suspectsLeftOver = (suspects.length)%numPlayers;
- int weaponsLeftOver = (weapons.length )%numPlayers;
- int roomsLeftOver = (rooms.length)%numPlayers;
- int tempA = 0, tempB = 0, tempC = 0;
- if(numSuspectsPerPlayer == 0) //if statement to specify what the program should do if not every player will get a card (6 players)
- {
- for(int i = 0; i < (numPlayers - 1); i++)
- {
- for(int j = 0; j < 1; j++) //cycles through every knownSuspect and knownWeapon of every player (not the last one)
- {
- players[i].knownSuspects[j] = suspects[j + tempA];
- players[i].knownWeapons[j] = weapons[j + tempB];
- }
- tempA = tempA + 1; //temp variable ensures that each player will have different cards
- tempB = tempB + 1;
- }
- for(int m = 0; m < numPlayers; m ++)
- {
- for(int k = 0; k < 1; k++)
- {
- players[m].knownRooms[k] = rooms[k + tempC]; //does same thing as above but for rooms instead
- }
- }
- players[0].knownRooms[1] = rooms[6]; //overflow case
- players[1].knownRooms[1] = rooms[7]; //overflow case
- }
- else
- {
- for(int m = 0; m < numPlayers; m++) //loops through each player
- {
- for(int k = 0; k < numRoomsPerPlayer; k++) //loops so that each player has the minimum number of Rooms
- {
- players[m].knownRooms[k] = rooms[k + tempC];
- }
- if(roomsLeftOver == 1) //overflow case if one room card left over
- {
- players[0].knownRooms[numRoomsPerPlayer] = rooms[7];
- }
- else if(roomsLeftOver == 2) //overflow case if two room cards left over
- {
- players[0].knownRooms[numRoomsPerPlayer] = rooms[6];
- players[1].knownRooms[numRoomsPerPlayer] = rooms[7];
- }
- else if(roomsLeftOver == 3) //overflow case if three room cards left over
- {
- players[0].knownRooms[numRoomsPerPlayer] = rooms[5];
- players[1].knownRooms[numRoomsPerPlayer] = rooms[6];
- players[2].knownRooms[numRoomsPerPlayer] = rooms[7];
- }
- tempC = tempC + numRoomsPerPlayer;
- }
- for(int j = 0; j < numPlayers; j++)
- {
- for(int i = 0; i < numSuspectsPerPlayer; i++) //loops through every knownSuspect of every player to assign
- { // suspect and weapon cards to each player
- players[j].knownSuspects[i] = suspects[i + tempA];
- players[j].knownWeapons[i] = weapons[i + tempB];
- if(suspectsLeftOver == 2) //overflow case
- {
- players[0].knownSuspects[1] = suspects[3];
- players[0].knownWeapons[1] = weapons[3];
- players[1].knownSuspects[1] = suspects[4];
- players[1].knownWeapons[1] = weapons[4];
- }
- else if(suspectsLeftOver == 1) //overflow case
- {
- players[0].knownSuspects[1] = suspects[4];
- players[0].knownWeapons[1] = weapons[4];
- }
- }
- tempA = tempA + numSuspectsPerPlayer; //temp variable ensures players have different cards
- tempB = tempB + numWeaponsPerPlayer;
- }
- }
- System.out.println(" ");
- System.out.println("<< CURRENT CARDS FOR EACH PLAYER >>");
- System.out.println(" ");
- for(int i = 0; i < numPlayers; i++)
- {
- System.out.println("<< PLAYER " + i + " >>");
- System.out.println("\tSuspect Cards: ");
- for(int j = 0; j < Player.getLogicalSizeSuspect(players[i].knownSuspects); j++)
- //Uses the logical size of the array find and print the knownSuspects
- {
- System.out.print("\t\t"+ players[i].knownSuspects[j].nameOfChar + ", ");
- System.out.println("");
- }
- System.out.println("\tWeapon Cards: ");
- for(int j = 0; j < Player.getLogicalSizeWeapon(players[i].knownWeapons); j++)
- //Uses the logical size of the array find and print the knownWeapons
- {
- System.out.print("\t\t"+ players[i].knownWeapons[j].nameOfWeapon + ", ");
- System.out.println("");
- }
- System.out.println("\tRoom Cards: ");
- for(int j = 0; j < Player.getLogicalSizeRoom(players[i].knownRooms); j++)
- //Uses the logical size of the array find and print the knownRooms
- {
- System.out.print("\t\t"+ players[i].knownRooms[j].nameOfRoom + ", ");
- System.out.println("");
- }
- System.out.println(" ");
- }
- Suspect guiltySuspect = new Suspect();
- guiltySuspect.nameOfChar = "Colonel Mustard";
- guiltySuspect.guilty = true; //creates a guiltySuspect card (simulated Confidential Card)
- Weapon guiltyWeapon = new Weapon();
- guiltyWeapon.nameOfWeapon = "lead pipe";
- guiltyWeapon.guilty = true; //creates a guiltyWeapon card (simulated Confidential Card)
- Room guiltyRoom = new Room();
- guiltyRoom.nameOfRoom = "Hall";
- guiltyRoom.guilty = true; //creates a guiltyRoom card (simulated Confidential Card)
- // G A M E P L A Y
- //___________________________________________________________________________________________________
- System.out.println(" ");
- System.out.println(" ");
- System.out.println("Player 0 Will Now Roll");
- final int DIE_ROLL = 10;
- players[0].rollDice(DIE_ROLL);
- System.out.println("Player 0 rolled a " + DIE_ROLL);
- System.out.println("player 0 current location is " + players[0].nearestRoom.nameOfRoom);
- if(players[0].currentLocation == 10) //test to see if player 0 is in a Room
- {
- players[0].inRoom = true;
- }
- else
- {
- players[0].inRoom = false;
- }
- if(players[0].inRoom)
- {
- System.out.println(" ");
- System.out.println(" ");
- System.out.println("Please make a suggestion...");
- System.out.println("Please enter an integer to select a suspect to suggest");
- printSuspectsMenu();
- int chosenSuspect = 0;
- chosenSuspect = checkValidityForScanner(1, 6, chosenSuspect);
- switch(chosenSuspect) //menu format so that user can select what suspect to suggest
- {
- case 1:
- players[0].suggestSuspect(suspects[0]);
- //chosenSuspect = 0;
- break;
- case 2:
- players[0].suggestSuspect(suspects[1]);
- //chosenSuspect = 1;
- break;
- case 3:
- players[0].suggestSuspect(suspects[2]);
- break;
- case 4:
- players[0].suggestSuspect(suspects[3]);
- break;
- case 5:
- players[0].suggestSuspect(suspects[4]);
- break;
- case 6:
- players[0].suggestSuspect(guiltySuspect);
- break;
- default:
- System.out.println("Please enter an integer");
- }
- System.out.println("Please enter an integer 1-6 to select a weapon to suggest");
- printWeaponsMenu();
- int chosenWeapon = 0;
- chosenWeapon = checkValidityForScanner(1, 6, chosenWeapon);
- switch(chosenWeapon) //menu format so that user can select what weapon to suggest
- {
- case 1:
- players[0].suggestWeapon(weapons[0]);
- break;
- case 2:
- players[0].suggestWeapon(weapons[1]);
- break;
- case 3:
- players[0].suggestWeapon(weapons[2]);
- break;
- case 4:
- players[0].suggestWeapon(weapons[3]);
- break;
- case 5:
- players[0].suggestWeapon(weapons[4]);
- break;
- case 6:
- players[0].suggestWeapon(guiltyWeapon);
- break;
- default:
- System.out.println("Please enter an integer");
- }
- System.out.println("Player 0 has suggested " + players[0].suggestedSuspect.nameOfChar + " with the " + players[0].suggestedWeapon.nameOfWeapon + " in the " + players[0].nearestRoom.nameOfRoom);
- for(int i = 1; i < players.length; i++) //loops through each player
- {
- players[i].respond(players[0].suggestedSuspect, players[0].suggestedWeapon, players[0].nearestRoom);
- if(players[i].haveWeapon && players[i].haveRoom && players[i].haveSuspect)
- { //gives player the chance to choose what card to show player 0 if they have more than one
- System.out.println("Player " + i + ", which card would you like to show Player 0?");
- System.out.println("1. " + players[i].respondedWeapon.nameOfWeapon);
- System.out.println("2. " + players[i].respondedRoom.nameOfRoom);
- System.out.println("3. " + players[i].respondedSuspect.nameOfChar);
- int chosenB = kbReader.nextInt();
- switch(chosenB)
- {
- case 1:
- System.out.println("Player " + i + " has " + players[i].respondedWeapon.nameOfWeapon);
- players[0].knownWeapons[Player.getLogicalSizeWeapon(players[0].knownWeapons)] = players[i].respondedWeapon;
- //^automatically adds the respondedWeapon to player 0's knownWeapons array
- break;
- case 2:
- System.out.println("Player " + i + " has " + players[i].respondedRoom.nameOfRoom);
- players[0].knownRooms[Player.getLogicalSizeRoom(players[0].knownRooms)] = players[i].respondedRoom;
- break;
- case 3:
- System.out.println("Player " + i + " has " + players[i].respondedSuspect.nameOfChar);
- players[0].knownSuspects[Player.getLogicalSizeSuspect(players[0].knownSuspects)] = players[i].respondedSuspect;
- break;
- }
- break;
- }
- else if(players[i].haveSuspect && players[i].haveWeapon)
- { //gives player the chance to choose what card to show player 0 if they have more than one
- System.out.println("Player " + i + ", which card would you like to show Player 0?");
- System.out.println("1. " + players[i].respondedSuspect.nameOfChar);
- System.out.println("2. " + players[i].respondedWeapon.nameOfWeapon);
- int chosenA = kbReader.nextInt();
- switch(chosenA)
- {
- case 1:
- System.out.println("Player " + i + " has " + players[i].respondedSuspect.nameOfChar);
- players[0].knownSuspects[Player.getLogicalSizeSuspect(players[0].knownSuspects)] = players[i].respondedSuspect;
- break;
- case 2:
- System.out.println("Player " + i + " has " + players[i].respondedWeapon.nameOfWeapon);
- players[0].knownWeapons[Player.getLogicalSizeWeapon(players[0].knownWeapons)] = players[i].respondedWeapon;
- break;
- }
- break;
- }
- else if(players[i].haveSuspect && players[i].haveRoom) //NEED A CASE IF ALL 3 ARE TRUE
- { //gives player the chance to choose what card to show player 0 if they have more than one
- System.out.println("Player " + i + ", which card would you like to show Player 0?");
- System.out.println("1. " + players[i].respondedSuspect.nameOfChar);
- System.out.println("2. " + players[i].respondedRoom.nameOfRoom);
- int chosenB = kbReader.nextInt();
- switch(chosenB)
- {
- case 1:
- System.out.println("Player " + i + " has " + players[i].respondedSuspect.nameOfChar);
- players[0].knownSuspects[Player.getLogicalSizeSuspect(players[0].knownSuspects)] = players[i].respondedSuspect;
- break;
- case 2:
- System.out.println("Player " + i + " has " + players[i].respondedRoom.nameOfRoom);
- players[0].knownRooms[Player.getLogicalSizeRoom(players[0].knownRooms)] = players[i].respondedRoom;
- break;
- }
- break;
- }
- else if(players[i].haveWeapon && players[i].haveRoom)
- { //gives player the chance to choose what card to show player 0 if they have more than one
- System.out.println("Player " + i + ", which card would you like to show Player 0?");
- System.out.println("1. " + players[i].respondedWeapon.nameOfWeapon);
- System.out.println("2. " + players[i].respondedRoom.nameOfRoom);
- int chosenB = kbReader.nextInt();
- switch(chosenB)
- {
- case 1:
- System.out.println("Player " + i + " has " + players[i].respondedWeapon.nameOfWeapon);
- players[0].knownWeapons[Player.getLogicalSizeWeapon(players[0].knownWeapons)] = players[i].respondedWeapon;
- break;
- case 2:
- System.out.println("Player " + i + " has " + players[i].respondedRoom.nameOfRoom);
- players[0].knownRooms[Player.getLogicalSizeRoom(players[0].knownRooms)] = players[i].respondedRoom;
- break;
- }
- break;
- }
- else if(players[i].haveSuspect) //automatically responds if player i only has one known card
- {
- System.out.println("Player " + i + " has " + players[i].respondedSuspect.nameOfChar);
- players[0].knownSuspects[Player.getLogicalSizeSuspect(players[0].knownSuspects)] = players[i].respondedSuspect;
- break;
- }
- else if(players[i].haveWeapon) //automatically responds if player i only has one known card
- {
- System.out.println("Player " + i + " has " + players[i].respondedWeapon.nameOfWeapon);
- players[0].knownWeapons[Player.getLogicalSizeWeapon(players[0].knownWeapons)] = players[i].respondedWeapon;
- break;
- }
- else if(players[i].haveRoom) //automatically responds if player i only has one known card
- {
- System.out.println("Player " + i + " has " + players[i].respondedRoom.nameOfRoom);
- players[0].knownRooms[Player.getLogicalSizeRoom(players[0].knownRooms)] = players[i].respondedRoom;
- break;
- }
- else //if player i has nothing, prints and moves onto the next player
- {
- System.out.println("Player " + i + " does not have any of the suggested cards");
- break;
- }
- }
- }
- //prints each players Cards after the suggestion has been made
- System.out.println(" ");
- System.out.println("<< CURRENT CARDS FOR EACH PLAYER >>");
- System.out.println(" ");
- for(int i = 0; i < numPlayers; i++)
- {
- System.out.println("<< PLAYER " + i + " >>");
- System.out.println("\tSuspect Cards: ");
- for(int j = 0; j < Player.getLogicalSizeSuspect(players[i].knownSuspects); j++) //uses the logical size of the array find and print the knownSuspects
- {
- System.out.print("\t\t"+ players[i].knownSuspects[j].nameOfChar + ", ");
- System.out.println("");
- }
- System.out.println("\tWeapon Cards: ");
- for(int j = 0; j < Player.getLogicalSizeWeapon(players[i].knownWeapons); j++) //uses the logical size of the array find and print the knownWeapons
- {
- System.out.print("\t\t"+ players[i].knownWeapons[j].nameOfWeapon + ", ");
- System.out.println("");
- }
- System.out.println("\tRoom Cards: ");
- for(int j = 0; j < Player.getLogicalSizeRoom(players[i].knownRooms); j++) ////uses the logical size of the array find and print the knownRooms
- {
- System.out.print("\t\t"+ players[i].knownRooms[j].nameOfRoom + ", ");
- System.out.println("");
- }
- System.out.println(" ");
- }
- System.out.println("Player 0 will now accuse...");
- System.out.println("Please enter an integer to select a suspect to accuse");
- printSuspectsMenu();
- int selectionVarA = 0;
- selectionVarA = checkValidityForScanner(1, 6, selectionVarA);
- //instantiates new Suspect, Weapon, and Room objects for the accusation
- Suspect accusedSuspect = new Suspect();
- Weapon accusedWeapon = new Weapon();
- Room accusedRoom = new Room();
- switch(selectionVarA) //uses a menu format so user can select what Suspect to accuse
- {
- case 1:
- accusedSuspect = suspects[0];
- break;
- case 2:
- accusedSuspect = suspects[1];
- break;
- case 3:
- accusedSuspect = suspects[2];
- break;
- case 4:
- accusedSuspect = suspects[3];
- break;
- case 5:
- accusedSuspect = suspects[4];
- break;
- case 6:
- accusedSuspect = guiltySuspect;
- break;
- }
- System.out.println("Please enter an integer to select a weapon to accuse");
- printWeaponsMenu();
- int selectionVarB = 0;
- selectionVarB = checkValidityForScanner(1, 6, selectionVarB);
- switch(selectionVarB) //uses a menu format so user can select what Weapon to accuse
- {
- case 1:
- accusedWeapon = weapons[0];
- break;
- case 2:
- accusedWeapon = weapons[1];
- break;
- case 3:
- accusedWeapon = weapons[2];
- break;
- case 4:
- accusedWeapon = weapons[3];
- break;
- case 5:
- accusedWeapon = weapons[4];
- break;
- case 6:
- accusedWeapon = guiltyWeapon;
- System.out.println("Selected 6");
- break;
- }
- System.out.println("Please enter an integer to select a room to accuse");
- printRoomsMenu();
- int selectionVarC = 0;
- selectionVarC = checkValidityForScanner(1, 9, selectionVarC);
- switch(selectionVarC) //uses a menu format so user can select what Room to accuse
- {
- case 1:
- accusedRoom = rooms[0];
- break;
- case 2:
- accusedRoom = rooms[1];
- break;
- case 3:
- accusedRoom = rooms[2];
- break;
- case 4:
- accusedRoom = rooms[3];
- break;
- case 5:
- accusedRoom = rooms[4];
- break;
- case 6:
- accusedRoom = rooms[5];
- break;
- case 7:
- accusedRoom = rooms[6];
- break;
- case 8:
- accusedRoom = rooms[7];
- break;
- case 9:
- accusedRoom = guiltyRoom;
- break;
- }
- players[0].accuse(accusedSuspect, accusedWeapon, accusedRoom);
- System.out.println("Player 0 accused: " + accusedSuspect.nameOfChar + " with the " + accusedWeapon.nameOfWeapon + " in the " + accusedRoom.nameOfRoom);
- if(accusedSuspect == guiltySuspect && accusedWeapon == guiltyWeapon && accusedRoom == guiltyRoom)
- //checks equivalence of accused cards and guilty cards to determine if the player has won or lost
- {
- System.out.println("<<< Congratulations! Player 0 has won Clue! >>>");
- }
- else
- {
- System.out.println("Sorry, Player 0's accusation was incorrect");
- System.out.println("The correct answer was: " + guiltySuspect.nameOfChar + " with the " + guiltyWeapon.nameOfWeapon + " in the " + guiltyRoom.nameOfRoom);
- System.out.println("<<< GAME OVER >>>");
- }
- }
- public static int checkValidityForScanner(int lowerBound, int upperBound, int unknown)
- {
- Scanner kbReader = new Scanner(System.in);
- while(!kbReader.hasNextInt() ) //checks to see if input is a number
- {
- kbReader.next();
- System.out.println("Invalid: Please enter a number between " + lowerBound + "-" + upperBound);
- }
- unknown = kbReader.nextInt();
- //NOTE: we did not have enough time to perfect this method, it works most of the time but throws an error
- //if you enter an out of bounds input and then a NaN input immediately after
- while(unknown > upperBound || unknown < lowerBound) //checks to see if input is out of bounds
- {
- System.out.println("Invalid: Please enter a number between " + lowerBound + "-" + upperBound);
- unknown = kbReader.nextInt();
- }
- return unknown;
- }
- public static void printSuspectsMenu()
- {
- System.out.println("SUSPECTS");
- System.out.println("1. Professor Plum");
- System.out.println("2. Mr. John Green");
- System.out.println("3. Mrs. Peacock");
- System.out.println("4. Miss Scarlet");
- System.out.println("5. Mrs. White");
- System.out.println("6. Colonel Mustard");
- }
- public static void printWeaponsMenu()
- {
- System.out.println("WEAPONS");
- System.out.println("1. candlestick");
- System.out.println("2. pistol");
- System.out.println("3. knife");
- System.out.println("4. wrench");
- System.out.println("5. rope");
- System.out.println("6. lead pipe");
- }
- public static void printRoomsMenu()
- {
- System.out.println("ROOMS");
- System.out.println("1. Billiard Room");
- System.out.println("2. Lounge");
- System.out.println("3. Dining Room");
- System.out.println("4. Library");
- System.out.println("5. Conservatory");
- System.out.println("6. Kitchen");
- System.out.println("7. Ballroom");
- System.out.println("8. Study");
- System.out.println("9. Hall");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement