feat: Mayor and taking items from room
This commit is contained in:
@ -47,7 +47,7 @@ public class Main {
|
||||
}
|
||||
}
|
||||
|
||||
Cli.info("Prosím počkejte...");
|
||||
Cli.info("Prosím počkejte než hra začne...");
|
||||
chronos.waitForStart();
|
||||
Cli.info("Hra začala!");
|
||||
System.out.println("\n\n");
|
||||
|
@ -71,6 +71,11 @@ public interface ApiService {
|
||||
@Query("roomId") Long roomId
|
||||
);
|
||||
|
||||
@POST("game/rooms/take_items")
|
||||
Call<UnifiedResponse<List<Item>, Error>> takeItemsFromRoom(
|
||||
@Query("playerKey") String playerKey
|
||||
);
|
||||
|
||||
@POST("game/characters/take_items")
|
||||
Call<UnifiedResponse<TakeItemsResponse, Error>> takeItems(
|
||||
@Query("playerKey") String playerKey,
|
||||
|
@ -4,5 +4,6 @@ public enum Interaction {
|
||||
Farmer,
|
||||
Cashier,
|
||||
Librarian,
|
||||
Innkeeper
|
||||
Innkeeper,
|
||||
Mayor
|
||||
}
|
||||
|
@ -5,7 +5,8 @@ import java.util.Set;
|
||||
|
||||
public enum ItemType {
|
||||
KEY_FRAGMENT,
|
||||
LUCK_POTION;
|
||||
LUCK_POTION,
|
||||
GOLDEN_WATCH;
|
||||
|
||||
private static final Set<ItemType> usableItems = new HashSet<>();
|
||||
|
||||
@ -22,6 +23,7 @@ public enum ItemType {
|
||||
return switch (this) {
|
||||
case LUCK_POTION -> "Lektvar štěstí";
|
||||
case KEY_FRAGMENT -> "Fragment klíče";
|
||||
case GOLDEN_WATCH -> "Zlaté hodinky";
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ public class Room {
|
||||
@Override
|
||||
public String toString() {
|
||||
if (name.equals("Outside")) {
|
||||
return "Venek";
|
||||
return "Náměstí";
|
||||
}
|
||||
|
||||
return name;
|
||||
|
@ -17,6 +17,7 @@ import java.net.ConnectException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@ -209,14 +210,33 @@ public class Chronos {
|
||||
public void visit(Room room) throws IOException {
|
||||
System.out.println("\n");
|
||||
if (room.getName().equals("Outside")) {
|
||||
Cli.info("Nyní jste venku");
|
||||
Cli.info("Nyní jste na náměstí.");
|
||||
} else {
|
||||
Cli.info("Nyní se nacházíte v místnosti " + room.getName());
|
||||
Cli.info("Nyní se nacházíte v " + Cli.Colors.BLUE + room.getName() + Cli.Colors.RESET + ".");
|
||||
}
|
||||
|
||||
var items = room.getItems();
|
||||
if (!items.isEmpty()) {
|
||||
Cli.info("V místnosti se nachází: " + String.join(", ", items.stream().map(Item::toString).toList()));
|
||||
var options = new String[] {"Vzít si itemy", "Nebrat si itemy"};
|
||||
var selected = Cli.selectOptionIndex(Arrays.asList(options));
|
||||
|
||||
if (selected == 0) {
|
||||
var response = apiService.takeItemsFromRoom(localData.getUserSecret()).execute();
|
||||
var itemsGot = response.body().getData().get();
|
||||
|
||||
Cli.gotItems(itemsGot);
|
||||
|
||||
if (itemsGot.size() < items.size()) {
|
||||
Cli.info("Některé itemy jste nemohl vzít, protože váš inventář je plný.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
var characters = room.getCharacters();
|
||||
if (characters.isEmpty()) {
|
||||
Cli.type("V místnosti je prázno... Ani jedna duše.");
|
||||
Cli.type("V místnosti se nenachází jediná duše...");
|
||||
} else {
|
||||
talk(characters);
|
||||
}
|
||||
|
@ -1,12 +1,11 @@
|
||||
package cz.jzitnik.game.interactions;
|
||||
|
||||
import cz.jzitnik.api.ApiService;
|
||||
import cz.jzitnik.api.requests.InteractionRequest;
|
||||
import cz.jzitnik.api.types.Character;
|
||||
import cz.jzitnik.game.interactions.list.*;
|
||||
import cz.jzitnik.utils.Cli;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Interactions {
|
||||
public static void runInteraction(Character character, ApiService apiService, String playerKey) throws IOException {
|
||||
@ -18,24 +17,14 @@ public class Interactions {
|
||||
return;
|
||||
}
|
||||
|
||||
Cli.type(character, interactionData.getStartText());
|
||||
if (!interactionData.getStartText().isBlank()) {
|
||||
Cli.type(character, interactionData.getStartText());
|
||||
}
|
||||
|
||||
switch (character.getInteraction()) {
|
||||
case Farmer -> {
|
||||
var options = new String[]{"Kámen", "Nůžky", "Papír"};
|
||||
var selected = Cli.selectOptionIndex(Arrays.stream(options).toList());
|
||||
|
||||
var requestData = new InteractionRequest(String.valueOf(selected), character.getId());
|
||||
|
||||
var res = apiService.interact(playerKey, requestData).execute();
|
||||
var interactionResponse = res.body().getData().get();
|
||||
|
||||
Cli.type(character, interactionResponse.getResponseText());
|
||||
|
||||
if (interactionResponse.isSuccess()) {
|
||||
Cli.gotItems(interactionResponse.getItems());
|
||||
}
|
||||
|
||||
RockPaperScissors rockPaperScissors = new RockPaperScissors(character, apiService, playerKey);
|
||||
rockPaperScissors.play();
|
||||
}
|
||||
case Cashier -> {
|
||||
Hangman hangman = new Hangman(character, apiService, playerKey);
|
||||
@ -49,6 +38,10 @@ public class Interactions {
|
||||
TicTacToe ticTacToe = new TicTacToe(character, apiService, playerKey);
|
||||
ticTacToe.play();
|
||||
}
|
||||
case Mayor -> {
|
||||
Mayor mayor = new Mayor(character, apiService, playerKey);
|
||||
mayor.play();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package cz.jzitnik.game.interactions;
|
||||
package cz.jzitnik.game.interactions.list;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import cz.jzitnik.api.ApiService;
|
@ -0,0 +1,40 @@
|
||||
package cz.jzitnik.game.interactions.list;
|
||||
|
||||
import cz.jzitnik.api.ApiService;
|
||||
import cz.jzitnik.api.requests.InteractionRequest;
|
||||
import cz.jzitnik.api.types.Character;
|
||||
import cz.jzitnik.api.types.ItemType;
|
||||
import cz.jzitnik.utils.Cli;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
@AllArgsConstructor
|
||||
public class Mayor {
|
||||
private Character character;
|
||||
private ApiService apiService;
|
||||
private String playerKey;
|
||||
|
||||
public void play() throws IOException {
|
||||
var response = apiService.getMe(playerKey).execute();
|
||||
var me = response.body().getData().get();
|
||||
|
||||
if (!me.getInventory().stream().anyMatch(item -> item.getItemType().equals(ItemType.GOLDEN_WATCH))) {
|
||||
// Player does not have golden watch
|
||||
return;
|
||||
}
|
||||
|
||||
var options = new String[]{"Dát starostovi zlaté hodinky", "Nedát starostovi zlaté hodinky"};
|
||||
var selected = Cli.selectOptionIndex(Arrays.stream(options).toList());
|
||||
|
||||
if (selected == 0) {
|
||||
var res = apiService.interact(playerKey, new InteractionRequest("", character.getId())).execute();
|
||||
var data = res.body().getData().get();
|
||||
|
||||
Cli.type(character, data.getResponseText());
|
||||
Cli.gotItems(data.getItems());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package cz.jzitnik.game.interactions.list;
|
||||
|
||||
import cz.jzitnik.api.ApiService;
|
||||
import cz.jzitnik.api.requests.InteractionRequest;
|
||||
import cz.jzitnik.api.types.Character;
|
||||
import cz.jzitnik.utils.Cli;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
@AllArgsConstructor
|
||||
public class RockPaperScissors {
|
||||
private Character character;
|
||||
private ApiService apiService;
|
||||
private String playerKey;
|
||||
|
||||
public void play() throws IOException {
|
||||
var options = new String[]{"Kámen", "Nůžky", "Papír"};
|
||||
var selected = Cli.selectOptionIndex(Arrays.stream(options).toList());
|
||||
|
||||
var requestData = new InteractionRequest(String.valueOf(selected), character.getId());
|
||||
|
||||
var res = apiService.interact(playerKey, requestData).execute();
|
||||
var interactionResponse = res.body().getData().get();
|
||||
|
||||
Cli.type(character, interactionResponse.getResponseText());
|
||||
|
||||
if (interactionResponse.isSuccess()) {
|
||||
Cli.gotItems(interactionResponse.getItems());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package cz.jzitnik.game.interactions;
|
||||
package cz.jzitnik.game.interactions.list;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import cz.jzitnik.api.ApiService;
|
@ -1,4 +1,4 @@
|
||||
package cz.jzitnik.game.interactions;
|
||||
package cz.jzitnik.game.interactions.list;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import cz.jzitnik.api.ApiService;
|
||||
@ -12,7 +12,6 @@ import lombok.Getter;
|
||||
import java.io.Console;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class Wordle {
|
Reference in New Issue
Block a user