Beispiel #1
0
class Board:


	def __init__(self, offsetX, offsetY, canvasWidth, canvasHeight, N):
		self.master = Tk()
		self.offsetX = offsetX
		self.offsetY = offsetY
		self.canvasWidth = canvasWidth
		self.canvasHeight = canvasHeight
		self.width = self.canvasWidth - self.offsetX*2
		self.height = self.canvasHeight - self.offsetY*2
		self.N = N
		self.canvas = Canvas(self.master, width=self.canvasWidth, height=self.canvasHeight)
		self.drawCheckerBoard()
		self.predators = []
		self.preys = []
		#self.predatorFile = PhotoImage(file = "images/prey.gif")
		#self.preyFile = PhotoImage(file = "images/predator.gif")
		self.g = PredatorGame([(0,0),(10,10),(0,10),(10,0)], (5,5), (11,11))
		self.initAgents([(0,0),(10,10),(0,10),(10,0)],[(5,5)])
		# Draw the intitial state
		self.draw(self.g.predCoords, [self.g.preyCoord])
		# Learn a policy
		self.policy = None
		#self.V, self.c, self.policy = self.g.policyIteration(0.1, 0.00001)
		self.mainloop()
		
		self.canvas.mainloop()

	'''
	Performs a step in the game and draws the canvas (automatically calls itself after 80ms)
	'''
	def mainloop(self):
		if(not self.g.state):
			# Draw a step in the game
			(test, newState), preyMove = self.g.step()
			#print str(self.g.predCoord) + " -- " + str(self.g.preyCoord)
			# Draw the state on the board
			self.draw(self.g.predCoords, [self.g.preyCoord])

			# Check if the game ended
			if newState != 1:
				self.canvas.after(80, self.mainloop)
			else:
				# Restart the game if the game ended
				self.restartGame()

	'''
	Restarts the game
	'''
	def restartGame(self):
		self.g = PredatorGame([(0,0),(10,10),(10,0),(0,10)], (5,5), (11,11)) #TODO: This is honestly a bit of a hack
		self.canvas.after(800, self.mainloop)

	'''
	Draws a checkerboard
	'''
	def drawCheckerBoard(self):
		self.canvas.pack()
		for x in range(0,self.N):
			for y in range(0,self.N):
				# Draws the checkers
				fillColor = 'white' if ((x + y*self.N) % 2 == 0) else "blue";
				self.canvas.create_rectangle(self.offsetX+x*self.width/self.N, self.offsetY+y*self.height/self.N, self.offsetX+(x+1)*self.width/self.N, self.offsetY+(y+1)*self.height/self.N, fill=fillColor)

	'''
	Draws the game screen
	'''
	def draw(self, predatorsCoords, preysCoords):
		# Predators
		for i in range(0,len(predatorsCoords)):
			self.movePredator(self.predators[i], predatorsCoords[i][0], predatorsCoords[i][1])
		# Preys
		for i in range(0,len(preysCoords)):
			self.movePrey(self.preys[i], preysCoords[i][0], preysCoords[i][1])

	'''
	Initialization of the predator and prey sprites
	'''
	def initAgents(self, predatorsCoords, preysCoords):
		# Predators
		for i in range(0,len(predatorsCoords)):
			self.drawPredator(predatorsCoords[i][0], predatorsCoords[i][1])
		# Preys
		for i in range(0,len(preysCoords)):
			self.drawPrey(preysCoords[i][0], preysCoords[i][1])

	'''
	Function to draw the predator
	'''
	def drawPredator(self, x, y):
		#self.predators.append(self.canvas.create_image(self.offsetX+x*self.width/self.N, self.offsetY+y*self.height/self.N, image=self.predatorFile))
		self.predators.append(self.canvas.create_rectangle(self.offsetX+x*self.width/self.N, self.offsetY+y*self.height/self.N, self.offsetX+(x+1)*self.width/self.N, self.offsetY+(y+1)*self.height/self.N, fill="red"))

	'''
	Function to draw the prey
	'''
	def drawPrey(self, x, y):
		#self.preys.append(self.canvas.create_image(self.offsetX+x*self.width/self.N, self.offsetY+y*self.height/self.N, image=self.preyFile))
		self.preys.append(self.canvas.create_rectangle(self.offsetX+x*self.width/self.N, self.offsetY+y*self.height/self.N, self.offsetX+(x+1)*self.width/self.N, self.offsetY+(y+1)*self.height/self.N, fill="green"))

	'''
	Function to move the predator sprite
	'''
	def movePredator(self, predator, x, y):
		#self.canvas.coords(predator, self.offsetX+x*self.width/self.N, self.offsetX+y*self.height/self.N)
		self.canvas.coords(predator, self.offsetX+x*self.width/self.N, self.offsetX+y*self.height/self.N, self.offsetX+(x+1)*self.width/self.N, self.offsetY+(y+1)*self.height/self.N)

	'''
	Function to move the prey sprite
	'''
	def movePrey(self, prey, x, y):
		##self.canvas.coords(prey, self.offsetX+x*self.width/self.N, self.offsetX+y*self.height/self.N)
		self.canvas.coords(prey, self.offsetX+x*self.width/self.N, self.offsetX+y*self.height/self.N, self.offsetX+(x+1)*self.width/self.N, self.offsetY+(y+1)*self.height/self.N)
import sys
import numpy as np
import time
sys.path.append("..")
sys.path.append("./")
from predatorgame import PredatorGame

print "\n----------------\nExample: Random Policy\n----------------"
start_time = time.time()
g = PredatorGame((0,0), (5,5), (11,11))
results = []
for i in range(100):
    g = PredatorGame((0,0), (5,5), (11,11))
    c = 0
    while (not g.state):
             c += 1
             g.step()
             #print(str(g.predCoord) + " -- " + str(g.preyCoord))

    results.append(c)        # c = 0

mean = np.mean(results)
stdv = np.std(results)
print "Min: " + str(min(results))
print "Max: " + str(max(results))
print "Mean: " + str(mean)
print "Standard deviation: " + str(stdv)
elapsed_time = time.time() - start_time
print("Elapsed time: " + str(elapsed_time))