-
Notifications
You must be signed in to change notification settings - Fork 0
/
ShellGame.java
148 lines (122 loc) · 4.81 KB
/
ShellGame.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package io.humanrobotics.api.games;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import io.humanrobotics.api.Robios;
import io.humanrobotics.api.games.utils.Robot;
class Level {
private final int levelNumber;
private final String videoUrl;
private final int videoDuration;
private final int correctAnswer;
private final String videoResult;
private final int videoResultDuration;
public Level(int levelNumber, String videoUrl, int videoDuration, String videoResult, int videoResultDuration, int correctAnswer) {
this.levelNumber = levelNumber;
this.videoUrl = videoUrl;
this.videoDuration = videoDuration;
this.correctAnswer = correctAnswer;
this.videoResult = videoResult;
this.videoResultDuration = videoResultDuration;
}
public int getLevelNumber() {
return levelNumber;
}
public String getVideoUrl() {
return videoUrl;
}
public int getVideoDuration() {
return videoDuration;
}
public int getCorrectAnswer() {
return correctAnswer;
}
public String getVideoResult() {
return videoResult;
}
public int getVideoResultDuration() {
return videoResultDuration;
}
}
public class ShellGame {
private final List<Level> levels;
private final Random random;
private static final Robot robot = new Robot();
public ShellGame() {
// add more easy levels as needed
levels = new ArrayList<>();
levels.add(new Level(1, "http://www.each.usp.br/petsi/wp-content/uploads/2023/07/ic-sarajane-11.mp4", 16, "http://www.each.usp.br/petsi/wp-content/uploads/2023/07/ic-sarajane-12.mp4", 4, 3));
levels.add(new Level(2, "http://www.each.usp.br/petsi/wp-content/uploads/2023/07/ic-sarajane-21.mp4", 15, "http://www.each.usp.br/petsi/wp-content/uploads/2023/07/ic-sarajane-22.mp4", 6, 3));
levels.add(new Level(3, "http://www.each.usp.br/petsi/wp-content/uploads/2023/07/ic-sarajane-31.mp4", 15, "http://www.each.usp.br/petsi/wp-content/uploads/2023/07/ic-sarajane-32.mp4", 6, 2));
this.random = new Random();
}
public void play() throws Exception {
robot.say("Olá! Bem-vindo ao jogo do copo!");
// shuffle each level list
Collections.shuffle(levels);
int currentLevelIndex = 0;
boolean completedAllLevels = false;
while (!completedAllLevels) {
Level currentLevel = levels.get(currentLevelIndex);
boolean isGuessCorrect = playLevel(currentLevel);
int tries = 1;
while (!isGuessCorrect) {
String isUserTrying = robot.ask("Gostaria de tentar de novo?", new String[] { "sim", "não" });
if (tries == 5 || isUserTrying.equals("não")) {
robot.say("Esse jogo é difícil mesmo, não desanime e tente de novo depois!");
return;
}
tries++;
isGuessCorrect = playLevel(currentLevel);
}
robot.playVideo(currentLevel.getVideoResult(), currentLevel.getVideoResultDuration());
if (currentLevelIndex == levels.size() - 1) {
completedAllLevels = true;
}
currentLevelIndex++;
}
robot.say("Parabéns, você completou todos os níveis! Obrigado por jogar!");
robot.say("Fim de jogo!");
}
public int askCup() throws Exception {
while (true) {
String answer = robot.listen();
Thread.sleep(Robot.minDelay);
if (answer.contains("primeiro") || answer.contains("um")) {
return 1;
} else if (answer.contains("segundo") || answer.contains("dois")) {
return 2;
} else if (answer.contains("terceiro") || answer.contains("três")) {
return 3;
}
robot.say("Não entendi");
}
}
public boolean playLevel(Level currentLevel) throws Exception {
robot.say("Nível " + currentLevel.getLevelNumber());
robot.say("Assista ao vídeo com atenção: ");
robot.playVideo(currentLevel.getVideoUrl(), currentLevel.getVideoDuration());
String[] questions = { "Em qual copo a bola está:", "Qual copo é o certo?",
"Você consegue adivinhar em qual copo está a bola?", "Qual copo contém a bola?",
"Em qual copo você acha que a bola está?" };
robot.say(questions[random.nextInt(questions.length)]);
robot.say("O primeiro, o segundo ou o terceiro?");
int guess = askCup();
if (guess == currentLevel.getCorrectAnswer()) {
String[] congratulationsMsgs = { "Incrível, você acertou!", "Muito bem, você acertou!",
"Fantástico, você acertou!", "Maravilhoso, você acertou!",
"Excelente, você acertou!", "Sensacional, você acertou!" };
robot.say(congratulationsMsgs[random.nextInt(congratulationsMsgs.length)]);
return true;
} else {
robot.say("Que pena, você errou...");
return false;
}
}
public static void main(String[] args) throws Exception {
ShellGame game = new ShellGame();
game.play();
robot.close();
}
}