generated from mwc/project_game
112 lines
3.5 KiB
Python
112 lines
3.5 KiB
Python
from man import Man
|
|
from snack import Snack
|
|
from mine import Mine
|
|
from random import shuffle
|
|
|
|
|
|
class Board:
|
|
display = False
|
|
snack=False
|
|
mine=False
|
|
|
|
def __init__(self,width, height,num_snacks,num_mines):
|
|
self.width = width
|
|
self.height = height
|
|
self.num_snacks = num_snacks
|
|
self.num_mines = num_mines
|
|
|
|
|
|
def get_agents(self,num_snacks,num_mines):
|
|
all_positions = self.get_all_positions()
|
|
shuffle(all_positions)
|
|
man= [Man(all_positions[0])]
|
|
snacks = [Snack(p) for p in all_positions[1:(num_snacks+1)]]
|
|
mines = [Mine(p) for p in all_positions[(num_snacks + 2):(num_snacks + num_mines +2)]]
|
|
agents = man + snacks + mines + [self]
|
|
return agents
|
|
|
|
def play_turn(self,game):
|
|
game.log(game.turn_number)
|
|
while self.game_needs_snacks(game):
|
|
self.add_snack(game)
|
|
while self.game_needs_mines(game):
|
|
self.add_mine(game)
|
|
|
|
def add_mine(self,game):
|
|
all_positions=self.get_all_positions()
|
|
shuffle(all_positions)
|
|
index =0
|
|
while not game.is_empty(all_positions[index]):
|
|
index = index + 1
|
|
mine = Mine(all_positions[index])
|
|
game.add_agent(mine)
|
|
|
|
def count_mines(self,game):
|
|
mines= [a for a in game.agents if a.mine]
|
|
return len(mines)
|
|
|
|
def game_needs_mines(self,game):
|
|
return self.count_mines(game) < self.num_mines
|
|
|
|
|
|
def add_snack(self,game):
|
|
all_positions=self.get_all_positions()
|
|
shuffle(all_positions)
|
|
index =0
|
|
while not game.is_empty(all_positions[index]):
|
|
index = index + 1
|
|
snack = Snack(all_positions[index])
|
|
game.add_agent(snack)
|
|
|
|
def count_snacks(self,game):
|
|
snacks= [a for a in game.agents if a.snack]
|
|
return len(snacks)
|
|
|
|
def game_needs_snacks(self,game):
|
|
return self.count_snacks(game) < self.num_snacks
|
|
|
|
|
|
|
|
'''
|
|
def get_agents(self,num_snacks,num_mines):
|
|
man = self.get_man(num_snacks,num_mines)
|
|
snacks = self.get_snacks(num_snacks)
|
|
mines = self.get_mines(num_mines,num_snacks)
|
|
|
|
agents = snacks + mines + man
|
|
return agents
|
|
|
|
def get_man(self,num_snacks,num_mines):
|
|
|
|
#man_location = [Man(all_positions[0])]
|
|
#return man_location
|
|
shuffle(all_positions)
|
|
for position in all_positions:
|
|
#if position in self.get_snacks(num_snacks):
|
|
# all_positions.remove(position)
|
|
if position in self.get_mines(num_mines,num_snacks):
|
|
all_positions.remove(position)
|
|
man_location = [Man(all_positions[0])]
|
|
return man_location
|
|
|
|
def get_mines(self,num_mines, num_snacks):
|
|
all_positions = self.get_all_positions()
|
|
shuffle(all_positions)
|
|
for position in all_positions:
|
|
if position in self.get_snacks(num_snacks):
|
|
all_positions.remove(position)
|
|
mines = [Mine(p) for p in all_positions[1:num_mines+1]]
|
|
return mines
|
|
|
|
def get_snacks(self,num_snacks):
|
|
all_positions = self.get_all_positions()
|
|
shuffle(all_positions)
|
|
snacks = [Snack(p) for p in all_positions[1:num_snacks+1]]
|
|
return snacks
|
|
'''
|
|
def get_all_positions(self):
|
|
positions=[]
|
|
for i in range(self.width):
|
|
for j in range(self.height):
|
|
positions.append((i,j))
|
|
return positions |