Long repetetive text, not sure how to compile better (beginner)?

,

On windows and not entirely sure how to compile this better so its not so long and repetetive?
Basically Im making it so whenever you turn the crank the spoon image changes to look like its stirring the pot image. It works but is soo messy! If you know how to shorten this please explain in easy terms because I'm a beginner still. Or just let me know what term to research would help as well!

import "CoreLibs/object"

import "CoreLibs/graphics"

import "CoreLibs/sprites"

import "CoreLibs/timer"

local gfx <const> = playdate.graphics

local playerSprite = nil

local potSprite = nil

spoonSprite = nil

degrees = nil

function myGameSetUp()

    local playerImage = gfx.image.new("Images/cursor")

    assert( playerImage )

    playerSprite = gfx.sprite.new( playerImage )

    playerSprite:moveTo( 100, 120 )

    playerSprite:add()

    local potImage = gfx.image.new("Images/pot")

    assert( potImage )

    potSprite = gfx.sprite.new( potImage )

    potSprite:moveTo( 275, 120 )

    potSprite:add()

    spoonImage1 = gfx.image.new("Images/1")

    assert(spoonImage1)

    spoonImage2 = gfx.image.new("Images/2")

    assert(spoonImage2)

    spoonImage3 = gfx.image.new("Images/3")

    assert(spoonImage3)

    spoonImage4 = gfx.image.new("Images/4")

    assert(spoonImage4)

    spoonImage5 = gfx.image.new("Images/5")

    assert(spoonImage5)

    spoonImage6 = gfx.image.new("Images/6")

    assert(spoonImage6)

    spoonImage7 = gfx.image.new("Images/7")

    assert(spoonImage7)

    spoonImage8 = gfx.image.new("Images/8")

    assert(spoonImage8)

    spoonImage9 = gfx.image.new("Images/9")

    assert(spoonImage9)

    spoonImage10 = gfx.image.new("Images/10")

    assert(spoonImage10)

    spoonImage11 = gfx.image.new("Images/11")

    assert(spoonImage11)

    spoonImage12 = gfx.image.new("Images/12")

    assert(spoonImage12)

    spoonImage13 = gfx.image.new("Images/13")

    assert(spoonImage13)

    spoonImage14 = gfx.image.new("Images/14")

    assert(spoonImage14)

    spoonImage15 = gfx.image.new("Images/15")

    assert(spoonImage15)

    spoonImage16 = gfx.image.new("Images/16")

    assert(spoonImage16)

    spoonSprite = gfx.sprite.new(spoonImage)

    spoonSprite:moveTo(275,120)

    spoonSprite:add()

   

end

myGameSetUp()

function playdate.update()

    if playdate.buttonJustPressed( playdate.kButtonUp ) then

        playerSprite:moveBy( 0, -20 )

    end

    if playdate.buttonJustPressed( playdate.kButtonRight ) then

        playerSprite:moveBy( 20, 0 )

    end

    if playdate.buttonJustPressed( playdate.kButtonDown ) then

        playerSprite:moveBy( 0, 20 )

    end

    if playdate.buttonJustPressed( playdate.kButtonLeft ) then

        playerSprite:moveBy( -20, 0 )

    end

   degrees = playdate.getCrankPosition()

   if degrees > 0 and degrees < 11.25 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage1)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

   if degrees > 11.25 and degrees < 33.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage2)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 33.75 and degrees < 56.25 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage3)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 56.25 and degrees < 78.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage4)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 78.75 and degrees < 101.25 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage5)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 101.25 and degrees < 123.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage6)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 123.75 and degrees < 146.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage7)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 146.75 and degrees < 168.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage8)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 168.75 and degrees < 191.25 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage9)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 191.25 and degrees < 213.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage10)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 213.75 and degrees < 236.25 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage11)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 236.23 and degrees < 258.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage12)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 258.75 and degrees < 281.25 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage13)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 281.25 and degrees < 303.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage14)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 303.75 and degrees < 326.75 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage15)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    if degrees > 326.75 and degrees < 348.25 then

        spoonSprite:remove()

        spoonSprite = gfx.sprite.new(spoonImage16)

        spoonSprite:moveTo(275,120)

        spoonSprite:add()

    end

    gfx.sprite.update()

    playdate.timer.updateTimers()

end

Some thoughts:

use an image table to load all your spoon images at once, rather than separately. You would need to combine the images into one PNG, or an animated GIF, see https://sdk.play.date/inside-playdate/#C-graphics.imagetable

spoonImage = gfx.imagetable.new("Images/spoon")
assert(spoonImage)

then it's easy to pick an image out of that collection based on the crank value

degrees = playdate.getCrankPosition()
frame = math.floor( -11.25 + (degrees/22.5) ) % 360
spoonSprite:setImage(spoonImage[1 + frame])
  • math.floor converts to integer
  • -11.25 offsets our angle as you wish
  • (degrees/22.5) gets us a number between 0 and 16
  • % 360 makes sure all result wraps in the range 0 to 359

the result of this code is not quite what you're after, but it's close and will give you a start.

Also, you don't need to remove a sprite and re-add it to change it's image, you can just update the image on it.