Infon Battle Arena
Eine Einführung

Infon

http://infon.dividuum.de/

Florian Wesch
fw@dividuum.de

Worum geht es?

Infon ist ein Client/Server Realtime Multiplayer Programmier Spiel mit viel Gewusel

Ziel des Spiels

Die Welt

Futter

The Viecher

Es gibt 3 verschiedene Arten:

Typ 0: Kann 10000 Futtereinheiten essen. Kann sich in alle anderen Typen umwandeln. Wird mit abnehmender Gesundheit langsamer. Kann Typ 2 angreifen
Typ 1: Kann alle anderen Arten angreifen. Sehr robust. Kann 20000 Futter aufnehmen.
Typ 2: Kann fliegen. Schwach, dafuer sehr schnell.

Die unterschiedlichen Zustände

Der Client

SDL Renderer

...

Spielen

Verbinden

...

Grundlagen

Lua

Hello World

...

Beispiel Botcode - The Hello Bot

function Creature:main()
    self:screen_message("hello")
    self:sleep(1000)
    self:screen_message("world")
    self:sleep(1000)
end
    

Random Walker

function Creature:main()
    local x1, y1, x2, y2 = world_size()
    while not self:set_path(math.random(x2 - x1) + x1,
                            math.random(y2 - y1) + y1) do
    end
    self:begin_walk_path()
    while self:is_walking() do
        self:wait_for_next_round()
    end
end
    

self:wait_for_next_round()

wait_for_next_round() example

function Creature:sleep(msec)
    local time = game_time()
    while time + msec > game_time() do
        self:wait_for_next_round()
    end
end
    

Creature Thread Status

<creature 5 [15488,5760] type 0, health 91, food 0, state idle>:
------------------------------
thread status  : suspended
stack traceback:
 ./player-highlevel.lua:254: in function 'wait_for_next_round'
 ./player-highlevel.lua:223: in function 'sleep'
 [string "paste 104 from client 10"]:3: in function 'main'
 ./player-highlevel.lua:229: in function <./player-highlevel.lua:227>
    

Kämpfen

Attacking

function Creature:attack(target)
    if not self:set_target(target) then
        return false
    end
    if not self:begin_attacking() then
        return false
    end
    while self:is_attacking() do
        self:wait_for_next_round()
    end
    return true
end
    

Weitere Fähigkeiten

Event Handler 1

Beim Auftreten einiger Ereignisse werden Event Handler der jeweils betroffenen Kreatur aufgerufen:

Event Handler 2

Des weiteren können globale Funktionen definiert werden, um auf Spielereignisse zu reagieren:

Lowlevel

function Creature:begin_walk_path()
    return set_state(self.id, CREATURE_WALK)
end
    

Probleme 1

function Creature:main()
    while true do 
        self:wait_for_next_round()
    end
end
    

Probleme 2

Debugging

Weitere Informationen

Und jetzt?

That's all folks!

Fragen?

Have fun!