-
Notifications
You must be signed in to change notification settings - Fork 40
brAInless
hajo4 edited this page Feb 22, 2014
·
1 revision
Example-AI from https://github.com/maxxst/trAInsported-starterkit
--AI by maxxst
rememberPassengers = {}
rememberMap = nil
-- Wird aufgerufen, wenn das Spiel startet
function ai.init(map, money)
print("Initialized! Hello World!")
print("I got " .. money .. " credits to spend!!")
print("map size:", map.height, map.width)
rememberMap = map
while money >= 25 do -- Ein Zug kostet 25 Credits
buyTrain(random(map.width), random(map.height))
money = money - 25
end
end
-- Wird aufgerufen, wenn genug geld für einen neuen Zug da ist
function ai.enoughMoney(money)
x = random(rememberMap.width)
y = random(rememberMap.height)
buyTrain(x, y)
end
-- Wird aufgerufen, wenn eine Richtungswahl ansteht
-- train [table]
-- possibleDirections [table]
function ai.chooseDirection(train, possibleDirections)
return chooseAlmostBrainless(train, possibleDirections)
end
-- Wird aufgerufen, wenn der Zug blockiert wird
-- (Beispielsweise durch einen anderen Zug)
function ai.blocked(train, possibleDirections, lastDirection)
return chooseRandom(train, possibleDirections)
end
-- Wird aufgerufen, wenn der Zug an einem Passagier vorbeikommt
function ai.foundPassengers(train, passengers)
if train.passenger then return nil end
return passengers[1]
end
-- Wird aufgerufen, wenn der Zug am Ziel des Passagiers ankommt
function ai.foundDestination(train)
print("get off!")
dropPassenger(train)
print("Money: " .. getMoney())
end
-- Wird aufgerufen, wenn ein neuer Fahrgast erscheint
function ai.newPassenger(name, x, y, destX, destY)
print("Neuer Fahrgast: " .. name)
rememberPassengers[name] = {x=x,y=y,destX=destX,destY=destY}
end
-- ------------
-- LOCAL HELPER
-- ------------
-- Wenn ein Passagier an Board ist wird versucht diesen ans Ziel zu bringen
function chooseAlmostBrainless(train, possibleDirections)
if train.passenger then
print("train.passenger destination:", train.passenger.destX, train.passenger.destY)
print("train.pos:", train.x, train.y)
tbl = {}
if possibleDirections["N"] and (train.passenger.destY+1 < train.y) then
tbl[#tbl+1] = "N"
end
if possibleDirections["S"] and (train.passenger.destY-1 > train.y) then
tbl[#tbl+1] = "S"
end
if possibleDirections["E"] and (train.passenger.destX+1 > train.x) then
tbl[#tbl+1] = "E"
end
if possibleDirections["W"] and (train.passenger.destX-1 < train.x) then
tbl[#tbl+1] = "W"
end
if #tbl > 0 and (random(100) > 10) then
return tbl[random(#tbl)]
end
end
return chooseRandom(train, possibleDirections)
end
-- wählt zufällig aus den möglichen Richtungen eine aus
function chooseRandom(train, possibleDirections)
tbl = {}
for dir,bool in pairs(possibleDirections) do
tbl[#tbl+1] = dir
end
return tbl[random(#tbl)]
end