Long if blocks make my brain hurt

This commit is contained in:
Empathic Qubit 2021-03-07 02:36:09 -05:00
parent d0d7b71054
commit 9c0c1014c0
2 changed files with 86 additions and 79 deletions

View file

@ -369,23 +369,25 @@ function _M.getInputs()
return inputs, inputDeltaDistance
end
_M.areaLoadedQueue = {}
function _M.onceAreaLoaded(handler)
table.insert(_M.areaLoadedQueue, handler)
end
function _M.clearJoypad()
for b = 1,#config.ButtonNames do
input.set(0, b - 1, 0)
end
end
local areaLoadedQueue = {}
function _M.onceAreaLoaded(handler)
table.insert(areaLoadedQueue, handler)
end
function processAreaLoad()
for i=#_M.areaLoadedQueue,1,-1 do
table.remove(_M.areaLoadedQueue, i)()
for i=#areaLoadedQueue,1,-1 do
table.remove(areaLoadedQueue, i)()
end
end
memory2.BUS:registerwrite(0xb517b2, processAreaLoad)
function _M.registerHandlers()
memory2.BUS:registerwrite(0xb517b2, processAreaLoad)
end
return _M

View file

@ -9,6 +9,8 @@ local game = dofile(base.."/game.lua")
local mathFunctions = dofile(base.."/mathFunctions.lua")
local util = dofile(base.."/util.lua")
game.registerHandlers()
loadRequested = false
saveRequested = false
lastBoth = 0
@ -854,82 +856,85 @@ function mainLoop (species, genome)
local lives = game.getLives()
timeout = timeout - 1
local krem = game.getKremCoins() - startKrem
if krem > lastKrem then
lastKrem = krem
timeout = timeoutConst + 60 * 5
end
-- Continue if we haven't timed out
local timeoutBonus = pool.currentFrame / 4
if timeout + timeoutBonus <= 0 then
local bananas = game.getBananas() - startBananas
local coins = game.getCoins() - startCoins
local krem = game.getKremCoins() - startKrem
local kong = game.getKong()
if krem > lastKrem then
lastKrem = krem
timeout = timeoutConst + 60 * 5
end
print(string.format("Bananas: %d, coins: %d, Krem: %d, KONG: %d", bananas, coins, krem, kong))
local bananaCoinsFitness = (krem * 100) + (kong * 60) + (bananas * 50) + (coins * 0.2)
if (bananas + coins) > 0 then
print("Bananas, Coins, KONG added " .. bananaCoinsFitness .. " fitness")
end
local hitPenalty = partyHitCounter * 100
local powerUpBonus = powerUpCounter * 100
local most = 0
if not vertical then
for k,v in pairs(rightmost) do
most = most + v
end
most = most - pool.currentFrame / 2
else
for k,v in pairs(upmost) do
most = most + v
end
most = most - pool.currentFrame / 2
end
local fitness = bananaCoinsFitness - hitPenalty + powerUpBonus + most + game.getJumpHeight() / 100
if startLives < lives then
local ExtraLiveBonus = (lives - startLives)*1000
fitness = fitness + ExtraLiveBonus
print("ExtraLiveBonus added " .. ExtraLiveBonus)
end
-- FIXME sus
--[[
if rightmost > 4816 then
fitness = fitness + 1000
print("!!!!!!Beat level!!!!!!!")
end
-- ]]
if fitness == 0 then
fitness = -1
end
genome.fitness = fitness
if fitness > pool.maxFitness then
pool.maxFitness = fitness
writeFile(saveLoadFile .. ".gen" .. pool.generation .. ".pool")
end
print("Gen " .. pool.generation .. " species " .. pool.currentSpecies .. " genome " .. pool.currentGenome .. " fitness: " .. fitness)
pool.currentSpecies = 1
pool.currentGenome = 1
while fitnessAlreadyMeasured() do
nextGenome()
end
initializeRun(function()
mainLoop(species, genome)
end)
if timeout + timeoutBonus > 0 then
mainLoop(species, genome)
return
end
-- Timeout calculations beyond this point
-- Manipulating the timeout value won't have
-- any effect
local bananas = game.getBananas() - startBananas
local coins = game.getCoins() - startCoins
local kong = game.getKong()
mainLoop(species, genome)
print(string.format("Bananas: %d, coins: %d, Krem: %d, KONG: %d", bananas, coins, krem, kong))
local bananaCoinsFitness = (krem * 100) + (kong * 60) + (bananas * 50) + (coins * 0.2)
if (bananas + coins) > 0 then
print("Bananas, Coins, KONG added " .. bananaCoinsFitness .. " fitness")
end
local hitPenalty = partyHitCounter * 100
local powerUpBonus = powerUpCounter * 100
local most = 0
if not vertical then
for k,v in pairs(rightmost) do
most = most + v
end
most = most - pool.currentFrame / 2
else
for k,v in pairs(upmost) do
most = most + v
end
most = most - pool.currentFrame / 2
end
local fitness = bananaCoinsFitness - hitPenalty + powerUpBonus + most + game.getJumpHeight() / 100
if startLives < lives then
local ExtraLiveBonus = (lives - startLives)*1000
fitness = fitness + ExtraLiveBonus
print("ExtraLiveBonus added " .. ExtraLiveBonus)
end
-- FIXME sus
--[[
if rightmost > 4816 then
fitness = fitness + 1000
print("!!!!!!Beat level!!!!!!!")
end
-- ]]
if fitness == 0 then
fitness = -1
end
genome.fitness = fitness
if fitness > pool.maxFitness then
pool.maxFitness = fitness
writeFile(saveLoadFile .. ".gen" .. pool.generation .. ".pool")
end
print("Gen " .. pool.generation .. " species " .. pool.currentSpecies .. " genome " .. pool.currentGenome .. " fitness: " .. fitness)
pool.currentSpecies = 1
pool.currentGenome = 1
while fitnessAlreadyMeasured() do
nextGenome()
end
initializeRun(function()
mainLoop(species, genome)
end)
end)
end