@Override public Optional<Suggestion> requestPlayerSuggestion(Player player, Room room) { char userWantsToMakeSuggestion = '\0'; while (userWantsToMakeSuggestion != 'Y' && userWantsToMakeSuggestion != 'N') { this.out.println("Do you want to make an suggestion (Y/N)?"); this.out.println("Your cards are: " + player.cards); userWantsToMakeSuggestion = this.scanner.next().charAt(0); } if (userWantsToMakeSuggestion == 'Y') { this.out.printf("You suggest it was done in the %s, by: \n", room); Stream<String> suspects = Arrays.stream(CluedoCharacter.values()).map(CluedoCharacter::toString); CluedoCharacter suspect = CluedoCharacter.values()[this.selectOptionFromList(suspects)]; this.out.println("with the "); Stream<String> weapons = Arrays.stream(Weapon.values()).map(Weapon::toString); Weapon weapon = Weapon.values()[this.selectOptionFromList(weapons)]; return Optional.of(new Suggestion(suspect, weapon, room)); } else { return Optional.empty(); } }
private void drawWeaponTokenForRoom( Graphics g, Board board, Room room, double centreX, double topY, double step) { Weapon weapon = _weaponLocations.get(room); if (weapon != null) { Image weaponTokenImage = weapon.tokenImage(); double weaponTokenWidth = weaponTokenImage.getWidth(null); double weaponTokenHeight = weaponTokenImage.getHeight(null); double longestSideLength = step * WeaponTokenRatio; // scale so that the longest side is always larger if (weaponTokenWidth >= weaponTokenHeight) { weaponTokenWidth = longestSideLength; double ratio = weaponTokenImage.getWidth(null) / weaponTokenWidth; weaponTokenHeight = weaponTokenHeight / ratio; } else { weaponTokenHeight = longestSideLength; double ratio = weaponTokenImage.getHeight(null) / weaponTokenHeight; weaponTokenWidth = weaponTokenWidth / ratio; } g.drawImage( weaponTokenImage, (int) (centreX - weaponTokenWidth / 2), (int) (topY), (int) weaponTokenWidth, (int) weaponTokenHeight, null); } }
@Override public Optional<Suggestion> requestPlayerAccusation(Player player) { char userWantsToMakeAccusation = '\0'; while (userWantsToMakeAccusation != 'Y' && userWantsToMakeAccusation != 'N') { this.out.println("Do you want to make an accusation (Y/N)?"); userWantsToMakeAccusation = this.scanner.next().charAt(0); } if (userWantsToMakeAccusation == 'Y') { this.out.println("Choose your suspect:"); Stream<String> suspects = Arrays.stream(CluedoCharacter.values()) .filter(e -> !player.cards.contains(e)) .map(CluedoCharacter::toString); CluedoCharacter suspect = CluedoCharacter.values()[this.selectOptionFromList(suspects)]; this.out.println("Choose your weapon:"); Stream<String> weapons = Arrays.stream(Weapon.values()) .filter(e -> !player.cards.contains(e)) .map(Weapon::toString); Weapon weapon = Weapon.values()[this.selectOptionFromList(weapons)]; this.out.println("Choose your room:"); Stream<String> rooms = Arrays.stream(Room.values()).filter(e -> !player.cards.contains(e)).map(Room::toString); Room room = Room.values()[this.selectOptionFromList(rooms)]; return Optional.of(new Suggestion(suspect, weapon, room)); } else { return Optional.empty(); } }