feat: Started implementing cashier
This commit is contained in:
parent
47e3a1dec5
commit
53b4e9090e
@ -1,5 +1,6 @@
|
|||||||
package cz.jzitnik.chronos.interactions;
|
package cz.jzitnik.chronos.interactions;
|
||||||
|
|
||||||
public enum Interaction {
|
public enum Interaction {
|
||||||
Farmer
|
Farmer,
|
||||||
|
Cashier
|
||||||
}
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package cz.jzitnik.chronos.interactions;
|
||||||
|
|
||||||
|
import cz.jzitnik.chronos.entities.Player;
|
||||||
|
import cz.jzitnik.chronos.entities.Character;
|
||||||
|
import cz.jzitnik.chronos.payload.responses.InteractionResponse;
|
||||||
|
|
||||||
|
public interface InteractionPlayer {
|
||||||
|
InteractionResponse play(Player player, Character character, String data);
|
||||||
|
}
|
@ -1,29 +1,20 @@
|
|||||||
package cz.jzitnik.chronos.interactions;
|
package cz.jzitnik.chronos.interactions;
|
||||||
|
|
||||||
import cz.jzitnik.chronos.entities.Item;
|
|
||||||
import cz.jzitnik.chronos.entities.ItemType;
|
|
||||||
import cz.jzitnik.chronos.entities.Player;
|
import cz.jzitnik.chronos.entities.Player;
|
||||||
import cz.jzitnik.chronos.entities.Character;
|
import cz.jzitnik.chronos.entities.Character;
|
||||||
|
import cz.jzitnik.chronos.interactions.list.Hangman;
|
||||||
|
import cz.jzitnik.chronos.interactions.list.RockPaperScissors;
|
||||||
import cz.jzitnik.chronos.payload.responses.InteractionResponse;
|
import cz.jzitnik.chronos.payload.responses.InteractionResponse;
|
||||||
import cz.jzitnik.chronos.repository.CharacterRepository;
|
|
||||||
import cz.jzitnik.chronos.repository.PlayerRepository;
|
|
||||||
import cz.jzitnik.chronos.services.ItemService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class InteractionService {
|
public class InteractionService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private PlayerRepository playerRepository;
|
private RockPaperScissors rockPaperScissors;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private CharacterRepository characterRepository;
|
private Hangman hangman;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ItemService itemService;
|
|
||||||
|
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
public interface Function3<T, U, V, W> {
|
public interface Function3<T, U, V, W> {
|
||||||
@ -32,64 +23,8 @@ public class InteractionService {
|
|||||||
|
|
||||||
public Function3<Player, Character, String, InteractionResponse> mapInteraction(Interaction interaction) {
|
public Function3<Player, Character, String, InteractionResponse> mapInteraction(Interaction interaction) {
|
||||||
return switch (interaction) {
|
return switch (interaction) {
|
||||||
case Farmer -> ((player, character, data) -> {
|
case Farmer -> rockPaperScissors::play;
|
||||||
Random random = new Random();
|
case Cashier -> hangman::play;
|
||||||
boolean isLucky = player.isLuck();
|
|
||||||
|
|
||||||
int characterChoice = random.nextInt(3);
|
|
||||||
|
|
||||||
int userChoice = switch (data) {
|
|
||||||
case "0" -> 0; // Rock
|
|
||||||
case "1" -> 1; // Paper
|
|
||||||
case "2" -> 2; // Scissors
|
|
||||||
default -> throw new IllegalArgumentException("Invalid choice");
|
|
||||||
};
|
|
||||||
|
|
||||||
if (isLucky) {
|
|
||||||
// 50/50 chance
|
|
||||||
boolean playerWins = random.nextBoolean();
|
|
||||||
|
|
||||||
// Reset the luck potion after use
|
|
||||||
player.setLuck(false);
|
|
||||||
|
|
||||||
if (playerWins) {
|
|
||||||
var item = new Item(ItemType.KEY_FRAGMENT, player);
|
|
||||||
itemService.addItem(player, item);
|
|
||||||
|
|
||||||
character.setInteractedWith(true);
|
|
||||||
characterRepository.save(character);
|
|
||||||
|
|
||||||
var items = new ArrayList<Item>();
|
|
||||||
items.add(item);
|
|
||||||
|
|
||||||
return new InteractionResponse(true, "Vyhrál jsi, dostáváš ode mě jeden fragment klíče.", items);
|
|
||||||
} else {
|
|
||||||
character.setInteractedWith(true);
|
|
||||||
characterRepository.save(character);
|
|
||||||
return new InteractionResponse(false, "Prohrál jsi. Žádný fragment klíče ode mě už nedostaneš. Zkus to u někoho jiného.", new ArrayList<>());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Standard rock-paper-scissors game logic
|
|
||||||
if (userChoice == characterChoice) {
|
|
||||||
return new InteractionResponse(false, "Remíza. Jestli chceš můžeš si se mnou zahrát ještě jednou.", new ArrayList<>());
|
|
||||||
} else if ((userChoice == 0 && characterChoice == 2) || (userChoice == 1 && characterChoice == 0) || (userChoice == 2 && characterChoice == 1)) {
|
|
||||||
var item = new Item(ItemType.KEY_FRAGMENT, player);
|
|
||||||
itemService.addItem(player, item);
|
|
||||||
|
|
||||||
character.setInteractedWith(true);
|
|
||||||
characterRepository.save(character);
|
|
||||||
|
|
||||||
var items = new ArrayList<Item>();
|
|
||||||
items.add(item);
|
|
||||||
|
|
||||||
return new InteractionResponse(true, "Vyhrál jsi, dostáváš ode mě jeden fragment klíče.", items);
|
|
||||||
} else {
|
|
||||||
character.setInteractedWith(true);
|
|
||||||
characterRepository.save(character);
|
|
||||||
return new InteractionResponse(false, "Prohrál jsi. Žádný fragment klíče ode mě už nedostaneš. Zkus to u někoho jiného.", new ArrayList<>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package cz.jzitnik.chronos.interactions.list;
|
||||||
|
|
||||||
|
import cz.jzitnik.chronos.entities.Character;
|
||||||
|
import cz.jzitnik.chronos.entities.Player;
|
||||||
|
import cz.jzitnik.chronos.interactions.InteractionPlayer;
|
||||||
|
import cz.jzitnik.chronos.payload.responses.InteractionResponse;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class Hangman implements InteractionPlayer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InteractionResponse play(Player player, Character character, String data) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
package cz.jzitnik.chronos.interactions.list;
|
||||||
|
|
||||||
|
import cz.jzitnik.chronos.entities.Item;
|
||||||
|
import cz.jzitnik.chronos.entities.ItemType;
|
||||||
|
import cz.jzitnik.chronos.entities.Player;
|
||||||
|
import cz.jzitnik.chronos.entities.Character;
|
||||||
|
import cz.jzitnik.chronos.interactions.InteractionPlayer;
|
||||||
|
import cz.jzitnik.chronos.payload.responses.InteractionResponse;
|
||||||
|
import cz.jzitnik.chronos.repository.CharacterRepository;
|
||||||
|
import cz.jzitnik.chronos.repository.PlayerRepository;
|
||||||
|
import cz.jzitnik.chronos.services.ItemService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class RockPaperScissors implements InteractionPlayer {
|
||||||
|
@Autowired
|
||||||
|
private PlayerRepository playerRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CharacterRepository characterRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ItemService itemService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InteractionResponse play(Player player, Character character, String data) {
|
||||||
|
Random random = new Random();
|
||||||
|
boolean isLucky = player.isLuck();
|
||||||
|
|
||||||
|
int characterChoice = random.nextInt(3);
|
||||||
|
|
||||||
|
int userChoice = switch (data) {
|
||||||
|
case "0" -> 0; // Rock
|
||||||
|
case "1" -> 1; // Paper
|
||||||
|
case "2" -> 2; // Scissors
|
||||||
|
default -> throw new IllegalArgumentException("Invalid choice");
|
||||||
|
};
|
||||||
|
|
||||||
|
if (isLucky) {
|
||||||
|
// 50/50 chance
|
||||||
|
boolean playerWins = random.nextBoolean();
|
||||||
|
|
||||||
|
// Reset the luck potion after use
|
||||||
|
player.setLuck(false);
|
||||||
|
|
||||||
|
if (playerWins) {
|
||||||
|
var item = new Item(ItemType.KEY_FRAGMENT, player);
|
||||||
|
itemService.addItem(player, item);
|
||||||
|
|
||||||
|
character.setInteractedWith(true);
|
||||||
|
characterRepository.save(character);
|
||||||
|
|
||||||
|
var items = new ArrayList<Item>();
|
||||||
|
items.add(item);
|
||||||
|
|
||||||
|
return new InteractionResponse(true, "Vyhrál jsi, dostáváš ode mě jeden fragment klíče.", items);
|
||||||
|
} else {
|
||||||
|
character.setInteractedWith(true);
|
||||||
|
characterRepository.save(character);
|
||||||
|
return new InteractionResponse(false, "Prohrál jsi. Žádný fragment klíče ode mě už nedostaneš. Zkus to u někoho jiného.", new ArrayList<>());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Standard rock-paper-scissors game logic
|
||||||
|
if (userChoice == characterChoice) {
|
||||||
|
return new InteractionResponse(false, "Remíza. Jestli chceš můžeš si se mnou zahrát ještě jednou.", new ArrayList<>());
|
||||||
|
} else if ((userChoice == 0 && characterChoice == 2) || (userChoice == 1 && characterChoice == 0) || (userChoice == 2 && characterChoice == 1)) {
|
||||||
|
var item = new Item(ItemType.KEY_FRAGMENT, player);
|
||||||
|
itemService.addItem(player, item);
|
||||||
|
|
||||||
|
character.setInteractedWith(true);
|
||||||
|
characterRepository.save(character);
|
||||||
|
|
||||||
|
var items = new ArrayList<Item>();
|
||||||
|
items.add(item);
|
||||||
|
|
||||||
|
return new InteractionResponse(true, "Vyhrál jsi, dostáváš ode mě jeden fragment klíče.", items);
|
||||||
|
} else {
|
||||||
|
character.setInteractedWith(true);
|
||||||
|
characterRepository.save(character);
|
||||||
|
return new InteractionResponse(false, "Prohrál jsi. Žádný fragment klíče ode mě už nedostaneš. Zkus to u někoho jiného.", new ArrayList<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user