Ejemplo n.º 1
0
class Trainer():
    def __init__(self, _train=True, _episode=1000, _milestone=500):
        self.TRAIN = _train
        self.EPISODE = _episode
        self.MILESTONE = _milestone

        self.Game = Board()
        self.AI = Agent()
        self.analysis = Analyzer()
        if self.TRAIN == True:
            totalR = 0
            for e in range(self.EPISODE):
                self.Game.initialize()
                self.AI.Episode_begin()
                while True:
                    act, r = self.AI.step(self.Game)
                    if r != -1:
                        totalR += r
                    if self.Game.end_game():
                        break
                    self.Game.GenRandTile(r)
                    if self.Game.end_game():
                        break
                self.AI.Episode_end()
                self.analysis.eval(self.Game)
                if e % self.MILESTONE == 0:
                    print("\n#Episode: {episode}, score: {score}".format(
                        episode=e, score=totalR))
                    totalR = 0
                    self.analysis.printAnalysis(self.MILESTONE)
                    self.analysis.reset()
                    self.AI.save_tupleNet()
            self.AI.save_tupleNet()

        else:
            print("Testing mode...")
            totalR = 0
            while True:
                act, r = self.AI.step(self.Game)
                if r != -1:
                    totalR += r
                if self.Game.end_game():
                    break
                self.Game.GenRandTile(r)
                if self.Game.end_game():
                    break
            self.Game.printBoard()
            print("Score: {}".format(totalR))
Ejemplo n.º 2
0
class GameGrid(Frame):
	def __init__(self):
		Frame.__init__(self)
		
		self.grid()
		self.master.title('2048 designed by Sizzle')
		self.master.bind("<Key>", self.key_press)

		self.Game = Board()
		self.AI = Agent()
		self.matrix = np.zeros((4,4))
		self.grid_cells = []
		self.init_grid()
		self.matrix = self.Game.getBoard()
		self.update_grid_cells()
				
		self.commands = {c.KEY_UP_ALT: 0, c.KEY_RIGHT_ALT: 1, c.KEY_DOWN_ALT: 2,
			c.KEY_LEFT_ALT: 3, c.KEY_UP: 0, c.KEY_RIGHT: 1, c.KEY_DOWN: 2,
			c.KEY_LEFT: 3
		}
		self.score = 0
		self.dir = ["Up", "Right", "Down", "Left"]
		self.AUTOPLAY = False
		self.HINT = False
		while True:		
			while self.AUTOPLAY or self.HINT:
				act, r = self.AI.step(self.Game)
				if r != -1:
					self.score += r
				if self.Game.end_game():
					break
				self.Game.GenRandTile(r)
				if self.Game.end_game():
					break
				self.matrix = self.Game.getBoard()
				self.update_grid_cells()
				print("\nMove {}".format(self.dir[act]))
				print("Current Score: {}".format(self.score))
				self.HINT = False
				time.sleep(1)
			self.update_grid_cells()
			self.update()
		self.mainloop()

	def init_grid(self):
		background = Frame(self, bg=c.BACKGROUND_COLOR_GAME,
						   width=c.SIZE, height=c.SIZE)
		background.grid()

		for i in range(c.GRID_LEN):
			grid_row = []
			for j in range(c.GRID_LEN):
				cell = Frame(background, bg=c.BACKGROUND_COLOR_CELL_EMPTY,
							 width=c.SIZE / c.GRID_LEN,
							 height=c.SIZE / c.GRID_LEN)
				cell.grid(row=i, column=j, padx=c.GRID_PADDING,
						  pady=c.GRID_PADDING)
				cell.grid_propagate(False)
				t = Label(master=cell, text="",
						  bg=c.BACKGROUND_COLOR_CELL_EMPTY,
						  justify=CENTER, font=c.FONT, width=5, height=3)
				t.grid()
				grid_row.append(t)

			self.grid_cells.append(grid_row)


	def update_grid_cells(self):
		for i in range(c.GRID_LEN):
			for j in range(c.GRID_LEN):
				new_number = (np.uint32(1) << np.int32(self.matrix[i][j]))
				if new_number == 1:
					self.grid_cells[i][j].configure(
						text="", bg=c.BACKGROUND_COLOR_CELL_EMPTY)
				else:
					self.grid_cells[i][j].configure(text=str(
						new_number), bg=c.BACKGROUND_COLOR_DICT[new_number],
						fg=c.CELL_COLOR_DICT[new_number])
		self.update_idletasks()
		self.update()
		

	def key_press(self, event):
		key = repr(event.char)
		act = -1
		if self.AUTOPLAY == False and key == c.KEY_HINT:
			self.HINT = True
		elif self.AUTOPLAY == False and key in self.commands:
			act = self.commands[repr(event.char)]
			r = self.Game.move(act)
			if r != -1:
				self.score += r
			self.Game.GenRandTile(r)
			self.matrix = self.Game.getBoard()
			self.update_grid_cells()
			print("Move {}".format(self.dir[act]))
			print("Current Score: {}".format(self.score))
		elif key == c.KEY_AUTOPLAY:
			if self.AUTOPLAY == False:
				self.AUTOPLAY = True
			else:
				self.AUTOPLAY = False
Ejemplo n.º 3
0
        if maxOP != -1:
            r = prev.move(maxOP)
            tmp.copyBoard(prev)
            state = {'before': tmp, 'after': tmp, 'reward': r, 'action': maxOP}
            if len(self.episode) > 0:
                self.episode[-1]['after'] = tmp
            self.episode.append(state)
            return maxOP, r
        else:
            return -1, -1


if __name__ == "__main__":
    AI = Agent()
    EPISODE = 1001
    for e in range(EPISODE):
        B = Board()
        B.initialize()
        while True:
            act, r = AI.step(B)
            if B.end_game():
                break
            B.GenRandTile(r)
            if B.end_game():
                break
            #B.printBoard()
        if e % 100 == 0:
            print("#Episode: {episode}".format(episode=e))
            B.printBoard()