I am making a puzzle game and wanted to make a background that scrolls while you play from the left side of the screen to the right side of the screen. I am using Lettercore’s seamless pattern tiles.
I wanted this code to choose a random pattern and tile the background everytime you open the game. This worked fine until i tried making it scroll. now the background just doesn’t exist. please help
import "CoreLibs/graphics"
import "CoreLibs/sprites"
import "CoreLibs/object"
import "CoreLibs/timer"
pd = playdate
gfx = pd.graphics
sfx = playdate.sound
sprite = gfx.sprite
shapeTiles = gfx.imagetable.new('images/ShapeTiles')
score = 0
solvedRows = {}
solvedColumns = {}
backgroundTiles = {}
local scrollSpeed = 1
local scrollX = 0
--MAKES IMAGE DATA FOR THE BACKGROUND
local pattern = gfx.image.new('images/pattern/'.. math.random(1,10))
patternW, patternL = pattern:getSize()
for i = 0, 240/patternL+2 do
for j = 0,400/patternW+2 do
table.insert(backgroundTiles, {x = patternW*j,y = patternL*i})
end
end
--
border = sprite.new(gfx.image.new('images/Frame'))
border:moveTo(32*3+32,32*3+32)
border:setScale(1.5,1.5)
border:add()
playdate.getSystemMenu():addMenuItem("Restart game", function()
restartGame()
end)
playdate.graphics.setLineWidth(3)
pd.display.setInverted(true)
solveSound = sfx.sampleplayer.new("sounds/Solved")
selectSound = sfx.sampleplayer.new("sounds/Select")
swapSound = sfx.sampleplayer.new("sounds/Swap")
import "tile"
import "cursor"
tileGrid = {
tile(1,1),tile(2,1),tile(3,1),tile(4,1),tile(5,1),
tile(1,2),tile(2,2),tile(3,2),tile(4,2),tile(5,2),
tile(1,3),tile(2,3),tile(3,3),tile(4,3),tile(5,3),
tile(1,4),tile(2,4),tile(3,4),tile(4,4),tile(5,4),
tile(1,5),tile(2,5),tile(3,5),tile(4,5),tile(5,5)
}
cursorSprite = cursor(3,3)
function getTile(x, y)
return tileGrid[(y - 1) * 5 + x]
end
function gridToScreen(x, y)
return 32 * x + 32, 32 * y + 32
end
function getRow(y)
local row = {}
for x = 1, 5 do
table.insert(row, getTile(x, y))
end
return row
end
function getColumn(x)
local col = {}
for y = 1, 5 do
table.insert(col, getTile(x, y))
end
return col
end
function solveColumn(x)
for i = 1,5 do
getColumn(x)[i]:reroll()
end
score += 1
end
function solveRow(x)
for i = 1,5 do
getRow(x)[i]:reroll()
end
score += 1
end
function restartGame()
for i = 1, #tileGrid do
tileGrid[i]:reroll()
end
score = 0
end
function pd.update()
--SCROLLING EVERY UPDATE
scrollX = (scrollX + scrollSpeed) % patternW
for i = 1, #backgroundTiles do
local drawX = backgroundTiles[i].x - scrollX
pattern:drawAnchored(drawX, backgroundTiles[i].y, 0, 0)
end
--
gfx.sprite.update()
if cursorSprite.selectedTile then
local x1, y1 = gridToScreen(cursorSprite.selectedTile.tileX, cursorSprite.selectedTile.tileY)
local x2, y2 = gridToScreen(cursorSprite.tileX, cursorSprite.tileY)
gfx.setColor(gfx.kColorXOR)
gfx.drawLine(x1, y1, x2, y2)
gfx.setColor(gfx.kColorBlack)
end
gfx.setColor(gfx.kColorWhite)
gfx.fillRect(0,0,150,20)
gfx.drawText("Score: *".. score.."*", 0, 0, gfx.kAlignLeft)
pd.drawFPS(380,0)
-- Check columns
for i = 1, 5 do
--shape
local shapeSet = {}
for j = 1, 5 do
shapeSet[getColumn(i)[j].shape] = true
end
local shapeCount = 0
for _ in pairs(shapeSet) do shapeCount += 1 end
if shapeCount == 1 or shapeCount == 5 then
--pattern
local patternSet = {}
for j = 1, 5 do
patternSet[getColumn(i)[j].pattern] = true
end
local patternCount = 0
for _ in pairs(patternSet) do patternCount += 1 end
if patternCount == 1 or patternCount == 5 then
print("column " .. i .. " solved")
table.insert(solvedColumns, i)
solveSound:play()
end
end
end
-- Now check rows separately
for i = 1, 5 do
--shape
local shapeSet = {}
for j = 1, 5 do
shapeSet[getRow(i)[j].shape] = true
end
local shapeCount = 0
for _ in pairs(shapeSet) do shapeCount += 1 end
if shapeCount == 1 or shapeCount == 5 then
--pattern
local patternSet = {}
for j = 1, 5 do
patternSet[getRow(i)[j].pattern] = true
end
local patternCount = 0
for _ in pairs(patternSet) do patternCount += 1 end
if patternCount == 1 or patternCount == 5 then
print("row " .. i .. " solved")
table.insert(solvedRows, i)
solveSound:play()
end
end
end
-- Solve after detection
for _, i in ipairs(solvedRows) do
solveRow(i)
end
solvedRows = {}
for _, i in ipairs(solvedColumns) do
solveColumn(i)
end
solvedColumns = {}
end