@@ -122,6 +122,13 @@ void start(InputStream is, PrintStream out) {
122
122
referee .gameTurn (turn );
123
123
registeredModules .forEach (Module ::onAfterGameTurn );
124
124
125
+ // Create a frame if no player has been executed
126
+ if (players .stream ().noneMatch (p -> p .hasBeenExecuted ())) {
127
+ for (T player : players ) {
128
+ execute (player , 0 );
129
+ }
130
+ }
131
+
125
132
// reset players' outputs
126
133
for (AbstractPlayer player : players ) {
127
134
player .resetOutputs ();
@@ -163,8 +170,10 @@ void start(InputStream is, PrintStream out) {
163
170
*
164
171
* @param player
165
172
* Player to execute.
173
+ * @param nbrOutputLines
174
+ * The amount of expected output lines from the player.
166
175
*/
167
- void execute (T player ) {
176
+ protected void execute (T player , int nbrOutputLines ) {
168
177
if (!this .initDone ) {
169
178
throw new RuntimeException ("Impossible to execute a player during init phase." );
170
179
}
@@ -180,7 +189,7 @@ void execute(T player) {
180
189
dumpView ();
181
190
dumpInfos ();
182
191
dumpNextPlayerInput (player .getInputs ().toArray (new String [0 ]));
183
- if (player . getExpectedOutputLines () > 0 ) {
192
+ if (nbrOutputLines > 0 ) {
184
193
addTurnTime ();
185
194
}
186
195
dumpNextPlayerInfos (player .getIndex (), player .getExpectedOutputLines (), player .hasNeverBeenExecuted () ? firstTurnMaxTime : turnMaxTime );
@@ -203,6 +212,16 @@ void execute(T player) {
203
212
newTurn = false ;
204
213
}
205
214
215
+ /**
216
+ * Executes a player for a maximum of turnMaxTime milliseconds and store the output. Used by player.execute().
217
+ *
218
+ * @param player
219
+ * Player to execute.
220
+ */
221
+ void execute (T player ) {
222
+ execute (player , player .getExpectedOutputLines ());
223
+ }
224
+
206
225
/**
207
226
* Swap game summary and view.
208
227
*
0 commit comments