Schiffe versenken mit Lua

expeehaa

Mitglied
19 Juni 2015
305
1.272
1.065
github.com
Huhu.
Ich bin derzeit am programmieren von Schiffe versenken für meinen Taschenrechner, den wir in der Schule nutzen (TI nSpire CX CAS). Funktioniert soweit alles so, wie ich es will, nur macht mir eine Sache Probleme. Ich schaffe es nicht, die Schiffe des Computerspielers zufällig zu platzieren.
Mein Code (Ausschnitt):
Code:
local fieldLength = 13
local length = 140
local ships = {}
local enemyShips = {}
local shipSizes = {5,4,4,3,3,3,2,2,2,2}

local Ship = class() ...

...

function placeEnemyShips()
    local i = 1
    local count = 0
    local lastShip
    while i < #shipSizes+1 do
        print(tostring(count).."|"..tostring(i))
        local nShip = getEnemyShip(i, shipSizes[i])
        if nShip == nil or lastShip == nShip then
            i = i - 2
        else
            enemyShip[i-1] = lastShip
            lastShip = nShip
            if i-1 == #shipSizes then
                enemyShip[i] = nShip
            end
        end
        i = i + 1
        count = count + 1
    end
end

function getEnemyShip(id, blocks)
    local nShip = Ship(id, blocks, 3*w/4-length/2+math.floor(math.random(0,9))*(fieldLength+1), h/2-length/2+math.floor(math.random(0,9))*(fieldLength+1))
    if tonumber(math.random()) then
        nShip:rotate()
    end
    local i = 0
    local abort = false
    while not (nShip:isPlaceable() and nShip:isOnGrid(3*w/4-length/2, (h-length)/2)) and not abort do
        nShip:move(3*w/4-length/2+math.floor(math.random(0,9))*(fieldLength+1), h/2-length/2+math.floor(math.random(0,9))*(fieldLength+1))
        i = i + 1
        if i > 20 then
            nShip:rotate()
        elseif i > 40 then
            abort = true
        end
    end
    
    if abort then
        return nil
    end
    return nShip
end
Wenn ich das am PC ausführe, sagt der Emulator gar nichts mehr, er scheint in einer Endlosschleife gefangen zu sein. Ich hab schon andere Methoden versucht, aber die obige ist die letzte abgespeicherte. Die Methoden der Klasse Ship funktionieren alle. Ich führe alle Tests zur Einhaltung der Schiffsplatzierungsregeln mit Pixelpositionsvergleichen durch, die funktionieren auch. Ich habe somit keine 2d-Arrays mit den Schiffsplatzierungen! Was ich vermute, ist, dass ich irgendwas bei den Bedingungen der Schleifen falsch gemacht habe, aber was das ist, erschließt sich mir nicht.
Kann mir da jemand helfen bzw. einen anderen Ansatz geben?
 
bau dir eine random funktion
mach dir ein paar zahlen

und fülle die schiffe in positionen (die zufalls zahlen) ein

du musst halt dafür sorgen das es auch zufällige zahlen für länge (form) und orientierung (richtung) hat
 

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop