initial-bot.lua 2.52 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
--- WELCOME TO YOUR FIRST SNAKE!
-- you can edit this code, save and run it.

-- you should see log output at the bottom of this page,
-- and a live view on your snake's wellbeing on the right

--- init() is called once upon creation of the bot
-- initialize your data here, and maybe set colors for your snake
function init()
    self.colors = { 0xFF0000, 0x808080 }
end

--- step() is called once every frame, maybe up to 60 times per second.
-- implement your game logic here.
-- after deciding what your bot should do next,
-- just return the desired steering angle.
-- a negative angle means turn left and a positive angle means turn right.
-- with 0, the snake keeps its current direction.
function step()
Hubert Denkmair's avatar
Hubert Denkmair committed
20
21
    -- there is some info in the "self" object, e.g. your current head/segment radius
    local own_radius = self.r
22
23
24
25
26

    -- your snake needs food to grow
    -- to find food in your head's surroundings, call something like that:
    local food = findFood(100, 0.8)
    -- this will give you all food in maximum distance of 100 around your head,
Hubert Denkmair's avatar
Hubert Denkmair committed
27
    -- with a mass of at least 0.8
28
29
30
31
32
33
34

    -- you can iterate over the result:
    for i, item in food:pairs() do

        -- distance of the food item, relative to the center of your head
        local distance = item.dist

Daniel Albert's avatar
Daniel Albert committed
35
        -- direction to the food item, in radians (0..2*math.pi)
36
37
38
        -- 0 means "straight ahead", math.pi means "right behind you"
        local direction = item.d

Hubert Denkmair's avatar
Hubert Denkmair committed
39
40
41
42
        -- mass of the food item. you will grow this amount if you eat it.
        -- realistic values are 0 - 4
        local value = item.v

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
	end

    -- you should also look out for your enemies.
    -- to find snake segments around you, call:
    local segments = findSegments(100, false)

    -- in return, you get a list of
    -- all snake segments nearer than 100 to your head,
    -- in this case not including your own segments:
    for i, item in segments:pairs() do

        -- id of the bot the segment belongs to
        -- (you can compare this to self.id)
        local bot = item.bot

        -- distance to the center of the segment
        local distance = item.dist

Daniel Albert's avatar
Daniel Albert committed
61
        -- direction to the segment, in radians (0..2*math.pi)
62
63
64
65
66
67
68
        local direction = item.d

        -- radius of the segment
        local radius = item.r

        if distance<10 then
            -- you can send some log output to the web IDE, but it's rate limited.
Hubert Denkmair's avatar
Hubert Denkmair committed
69
            log(string.format("oh no, i'm going to die. distance: %.4f!", distance))
70
71
72
73
74
        end
	end

    return 0.002 -- this will lead us in a large circle, clockwise.
end