Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added snakes_and_ladders/__init__.py
Empty file.
14 changes: 14 additions & 0 deletions snakes_and_ladders/board.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Board:
def __init__(self, snakes, ladders):
self.snakes = snakes # dict {head: tail}
self.ladders = ladders # dict {start: end}

def get_next_position(self, position):
prev = -1
while prev != position:
prev = position
if position in self.snakes:
position = self.snakes[position]
elif position in self.ladders:
position = self.ladders[position]
return position
5 changes: 5 additions & 0 deletions snakes_and_ladders/dice.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import random

class Dice:
def roll(self):
return random.randint(1, 6)
29 changes: 29 additions & 0 deletions snakes_and_ladders/game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from .dice import Dice
from .board import Board
from .player import Player

class Game:
def __init__(self, snakes, ladders, player_names):
self.board = Board(snakes, ladders)
self.players = [Player(name) for name in player_names]
self.dice = Dice()

def play(self):
won = False
while not won:
for player in self.players:
dice_value = self.dice.roll()
initial_pos = player.position
new_pos = initial_pos + dice_value
if new_pos > 100:
new_pos = initial_pos
else:
new_pos = self.board.get_next_position(new_pos)

player.position = new_pos
print(f"{player.name} rolled a {dice_value} and moved from {initial_pos} to {new_pos}")

if new_pos == 100:
print(f"{player.name} wins the game")
won = True
break
26 changes: 26 additions & 0 deletions snakes_and_ladders/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from .game import Game

def read_input():
s = int(input())
snakes = {}
for _ in range(s):
head, tail = map(int, input().split())
snakes[head] = tail

l = int(input())
ladders = {}
for _ in range(l):
start, end = map(int, input().split())
ladders[start] = end

p = int(input())
players = []
for _ in range(p):
players.append(input().strip())

return snakes, ladders, players

if __name__ == "__main__":
snakes, ladders, players = read_input()
game = Game(snakes, ladders, players)
game.play()
4 changes: 4 additions & 0 deletions snakes_and_ladders/player.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class Player:
def __init__(self, name):
self.name = name
self.position = 0
Empty file added tests/test_game.py
Empty file.