Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --# Main
- -- Code 14d - Sheep
- -- Bruce Elliott
- -- May 2013
- -- A slight modification of a program by
- -- gunnar_z in April 2012
- supportedOrientations(LANDSCAPE_RIGHT)
- displayMode(FULLSCREEN)
- local WorldWidth, WorldHeight = 16, 16
- local MaxGrass = 3
- local MaxSheep = 15
- local MaxFed = 7
- -- cw = math.floor(WIDTH / WorldWidth)
- -- ch = math.floor(HEIGHT / WorldHeight)
- local world = {}
- local sheep = {}
- local nsheep = MaxSheep
- local function initWorld()
- local x, y
- for x = 1, WorldWidth do
- world[x] = {}
- for y = 1, WorldHeight do
- world[x][y] = math.random(MaxGrass + 1) - 1
- end
- end
- end
- local function drawWorld()
- local x, y
- background(131, 90, 29, 255)
- pushStyle()
- strokeWidth(0)
- rectMode(CORNER)
- cw = math.floor(WIDTH / WorldWidth)
- ch = math.floor(HEIGHT / WorldHeight)
- for x = 1, WorldWidth do
- for y = 1, WorldHeight do
- if math.floor(world[x][y]) > 0 then
- fill(0, 50 * world[x][y] + 100, 0, 255)
- rect((x - 1) * cw, (y - 1) * ch, cw, ch)
- end
- end
- end
- popStyle()
- end
- local function updateWorld()
- local x, y
- for x = 1, WorldWidth do
- for y = 1, WorldHeight do
- --world[x][y] = world[x][y] + 0.05
- world[x][y] = world[x][y] + 0.1
- if world[x][y] > MaxGrass then
- world[x][y] = MaxGrass
- end
- end
- end
- end
- local function drawSheep(x1, y1)
- strokeWidth(3)
- stroke(0, 0, 0, 255)
- fill(255, 255, 255, 255)
- ellipse((x1 - 0.5) * cw, (y1 - 0.5) * ch, ch)
- end
- local function makeSheep(x, y)
- local fed = MaxFed
- local asheep = function()
- while fed > 0 do
- if math.floor(world[x][y]) > 0 then
- fed = fed + 1
- if fed > MaxFed then
- fed = MaxFed
- end
- world[x][y] = world[x][y] - 1
- else
- fed = fed - 1
- local n = math.random(4)
- if n == 1 then
- x = x + 1
- elseif n == 2 then
- y = y + 1
- elseif n == 3 then
- x = x - 1
- else
- y = y - 1
- end
- if x < 1 then
- x = 1
- elseif x > WorldWidth then
- x = WorldWidth
- end
- if y < 1 then
- y = 1
- elseif y > WorldWidth then
- y = WorldWidth
- end
- end
- drawSheep(x, y)
- coroutine.yield()
- end
- end
- return coroutine.create(asheep)
- end
- function setup()
- local n
- initWorld()
- for n = 1, MaxSheep do
- sheep[n] = makeSheep(math.random(WorldWidth), math.random(WorldHeight))
- end
- end
- function draw()
- local dead = {}
- local n
- drawWorld()
- if nsheep > 0 then
- for n = 1, nsheep do
- local ok, err = coroutine.resume(sheep[n])
- if not ok then
- -- print(err)
- dead[#dead + 1] = n
- end
- end
- for n = 1, #dead do
- -- print("sheep died")
- table.remove(sheep, dead[n])
- nsheep = nsheep - 1
- end
- updateWorld()
- else
- font("AcademyEngravedLetPlain")
- fontSize(82)
- fill(0, 0, 0, 255)
- text("all sheep died", WIDTH / 2, HEIGHT / 2)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement