def test_field_clear_field(self): snake = snk.Snake(5, 5, curses.KEY_RIGHT) field = snk.Field(20, 20, snake) right_cells = [[0 for i in range(field.width+2)] for j in range(field.height+2)] for j in range(field.height+2): right_cells[j][0] = -1 right_cells[j][field.width+1] = -1 for i in range(1, field.width+1): right_cells[0][i] = -1 right_cells[field.height+1][i] = -1 field.clear_field() self.assertEqual(field.cells, right_cells, "clear_field is working wrong")
def __init__(self, master, snakes, width=snake.WIDTH, height=snake.HEIGHT): self.master = master self.width = width self.height = height self.canvas = Canvas(master, width=width*snake.BLOCK, height=height*snake.BLOCK) self.canvas.grid(row=0, column=0) self.field = snake.Field(self.canvas, width, height) # postavimo kace v polje y = height // 2 - 1 x = (width - 2 * len(snakes)) // 2 random.shuffle(snakes) for s in snakes: self.field.add_snake(s(self.field, x, y, 0, random.choice([-1,1]))) x += 2 self.time = 0 self.tick()
def fitf4(net): field = snake.Field() live_time = 200 i = 0 while live_time > 0: if field.game_over: break output = net.forward(field.get_senses()) field.snake_dir = output.argmax() if field.step(): live_time += 100 live_time -= 1 i += 1 avg_eat_timing = sum(field.eat_timings) / float(len(field.eat_timings)) return max(field.eaten * 300, 2 * field.eaten**3) - avg_eat_timing * 50 + i**2
def fitf3(net): field = snake.Field() steps_limit = 20000 i = 0 for i in range(steps_limit): if field.game_over: break output = net.forward(field.get_senses()) # print(output) field.snake_dir = output.argmax() field.step() if field.eat_timings[-1] > 80: # not really going for the food = kill break avg_eat_timing = sum(field.eat_timings) / float(len(field.eat_timings)) return field.eaten * 100 - avg_eat_timing * 50 + i
def fitf1(net: ng.Network): field = snake.Field() steps_limit = 5 bonus = 0 for i in range(steps_limit): if not field.game_over: output = net.forward(field.get_senses()).argmax() field.snake_dir = output field.step() else: bonus -= (steps_limit - i) break avg_eat_timing = sum(field.eat_timings) / float(len(field.eat_timings)) return len(field.snake_arr) - avg_eat_timing + bonus
def fitf5(net): field = snake.Field() live_time = 200 i = 0 while live_time > 0: if field.game_over: break output = net.forward(field.get_senses()) field.snake_dir = output.argmax() if field.step(): live_time += 100 live_time -= 1 i += 1 # avg_eat_timing = sum(field.eat_timings) / float(len(field.eat_timings)) if field.eaten < 10: return i * i * 2**field.eaten else: return i * i * 2**10 * (field.eaten - 9)
def fitf2(net: ng.Network): field = snake.Field() steps_limit = 800 sum_dists = 0 i = 0 for i in range(steps_limit): if not field.game_over: output = net.forward(field.get_senses()) field.snake_dir = output.argmax() field.step() # print(output) sum_dists += field.snake_arr[-1].dist(field.food_pos) else: break avg_eat_timing = sum(field.eat_timings) / float(len(field.eat_timings)) return avg_eat_timing + (max( steps_limit - i, 0)) - (field.eaten * 100) + sum_dists / float(i)