示例#1
0
    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")
示例#2
0
 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()
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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)
示例#7
0
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)