Skip to content

Commit e033c50

Browse files
committed
Game now ends with 1 passenger waiting over 40 s
1 parent 1d54bd7 commit e033c50

3 files changed

Lines changed: 59 additions & 4 deletions

File tree

GAME_RULES.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ This document summarizes the game rules currently implemented in code.
6767

6868
## Game Over
6969

70-
- A passenger is considered over-waiting at 60 seconds or more of station wait time.
71-
- Game over occurs when 20 or more passengers are over-waiting.
70+
- A passenger is considered over-waiting at 40 seconds or more of station wait time.
71+
- Game over occurs when 1 or more passengers are over-waiting.
7272
- On game over:
7373
- Simulation time and gameplay updates stop.
7474
- A game-over overlay appears with final score.

src/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@
4444
passenger_spawning_start_step = 1
4545
passenger_spawning_interval_step = 15 * framerate
4646
passenger_display_buffer = 3 * passenger_size
47-
passenger_max_wait_time_ms = 60_000
47+
passenger_max_wait_time_ms = 40_000
4848
passenger_blink_warning_time_ms = 10_000
4949
passenger_blink_interval_ms = 250
50-
max_waiting_passengers = 20
50+
max_waiting_passengers = 1
5151

5252
# metro
5353
num_metros = 4

test/test_mediator.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,61 @@ def test_increment_time_scales_with_game_speed_multiplier(self):
496496
mediator.move_passengers.assert_called_once_with(400)
497497
mediator.update_waiting_and_game_over.assert_called_once_with(400)
498498

499+
def test_update_waiting_game_over_at_passenger_max_wait_boundary(self):
500+
mediator = Mediator()
501+
station = Station(Circle(station_color, station_size), Point(0, 0))
502+
mediator.stations = [station]
503+
passenger = Passenger(Circle(station_color, station_size))
504+
station.add_passenger(passenger)
505+
506+
mediator.passenger_max_wait_time_ms = 100
507+
mediator.max_waiting_passengers = 1
508+
509+
mediator.update_waiting_and_game_over(99)
510+
self.assertEqual(passenger.wait_ms, 99)
511+
self.assertFalse(mediator.is_game_over)
512+
513+
mediator.update_waiting_and_game_over(1)
514+
self.assertEqual(passenger.wait_ms, 100)
515+
self.assertTrue(mediator.is_game_over)
516+
517+
def test_update_waiting_game_over_respects_max_waiting_passengers(self):
518+
mediator = Mediator()
519+
station = Station(Circle(station_color, station_size), Point(0, 0))
520+
mediator.stations = [station]
521+
passenger_a = Passenger(Circle(station_color, station_size))
522+
passenger_b = Passenger(Circle(station_color, station_size))
523+
station.add_passenger(passenger_a)
524+
station.add_passenger(passenger_b)
525+
526+
mediator.passenger_max_wait_time_ms = 100
527+
mediator.max_waiting_passengers = 2
528+
passenger_a.wait_ms = 100
529+
passenger_b.wait_ms = 99
530+
531+
mediator.update_waiting_and_game_over(0)
532+
self.assertFalse(mediator.is_game_over)
533+
534+
mediator.update_waiting_and_game_over(1)
535+
self.assertTrue(mediator.is_game_over)
536+
537+
def test_update_waiting_ignores_metro_passengers_for_game_over(self):
538+
mediator = Mediator()
539+
station = Station(Circle(station_color, station_size), Point(0, 0))
540+
mediator.stations = [station]
541+
metro = Metro()
542+
passenger = Passenger(Circle(station_color, station_size))
543+
passenger.wait_ms = 10_000
544+
metro.add_passenger(passenger)
545+
mediator.metros = [metro]
546+
mediator.passengers = [passenger]
547+
548+
mediator.passenger_max_wait_time_ms = 1
549+
mediator.max_waiting_passengers = 1
550+
551+
mediator.update_waiting_and_game_over(0)
552+
self.assertFalse(mediator.is_game_over)
553+
499554
def test_move_passengers_covers_all_transfers(self):
500555
mediator, station_a, station_b, path, metro = self._build_two_station_mediator()
501556
mediator.update_unlocked_num_paths = MagicMock()

0 commit comments

Comments
 (0)