Kaynağa Gözat

Initial Commit

master
Madiwka3 4 yıl önce
işleme
2782e3ed01
8 değiştirilmiş dosya ile 415 ekleme ve 0 silme
  1. +94
    -0
      class.lua
  2. +6
    -0
      debuggame.sh
  3. +24
    -0
      edible.lua
  4. BIN
      font.ttf
  5. +111
    -0
      life.lua
  6. +50
    -0
      main.lua
  7. +7
    -0
      readme.md
  8. +123
    -0
      simpleScale.lua

+ 94
- 0
class.lua Dosyayı Görüntüle

@@ -0,0 +1,94 @@
--[[
Copyright (c) 2010-2013 Matthias Richter
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
]]--
local function include_helper(to, from, seen)
if from == nil then
return to
elseif type(from) ~= 'table' then
return from
elseif seen[from] then
return seen[from]
end
seen[from] = to
for k,v in pairs(from) do
k = include_helper({}, k, seen) -- keys might also be tables
if to[k] == nil then
to[k] = include_helper({}, v, seen)
end
end
return to
end
-- deeply copies `other' into `class'. keys in `other' that are already
-- defined in `class' are omitted
local function include(class, other)
return include_helper(class, other, {})
end
-- returns a deep copy of `other'
local function clone(other)
return setmetatable(include({}, other), getmetatable(other))
end
local function new(class)
-- mixins
class = class or {} -- class can be nil
local inc = class.__includes or {}
if getmetatable(inc) then inc = {inc} end
for _, other in ipairs(inc) do
if type(other) == "string" then
other = _G[other]
end
include(class, other)
end
-- class implementation
class.__index = class
class.init = class.init or class[1] or function() end
class.include = class.include or include
class.clone = class.clone or clone
-- constructor call
return setmetatable(class, {__call = function(c, ...)
local o = setmetatable({}, c)
o:init(...)
return o
end})
end
-- interface for cross class-system compatibility (see https://github.com/bartbes/Class-Commons).
if class_commons ~= false and not common then
common = {}
function common.class(name, prototype, parent)
return new{__includes = {prototype, parent}}
end
function common.instance(class, ...)
return class(...)
end
end
-- the module
return setmetatable({new = new, include = include, clone = clone},
{__call = function(_,...) return new(...) end})

+ 6
- 0
debuggame.sh Dosyayı Görüntüle

@@ -0,0 +1,6 @@
rm game.love
rm game.zip
zip -r game *
mv game.zip game.love
love game.love
rm game.love

+ 24
- 0
edible.lua Dosyayı Görüntüle

@@ -0,0 +1,24 @@
edible = Class{}

function edible:init( y , x , fat )
self.RED = 255
self.GREEN = 255
self.BLUE = 255
self.x = x
self.y = y
self.width = fat
self.height = fat
self.fat = fat
self.dead = false
end

function edible:update(dt)

end


function edible:render()
love.graphics.setColor(self.fat*20/200, 0, 0, 1)
love.graphics.circle('line', self.x, self.y, self.fat)
love.graphics.setColor(255, 255, 255, 255)
end

BIN
font.ttf Dosyayı Görüntüle


+ 111
- 0
life.lua Dosyayı Görüntüle

@@ -0,0 +1,111 @@
life = Class{}

function life:init( y , x , fat )
self.RED = 255
self.GREEN = 255
self.BLUE = 255
self.x = x
self.y = y
self.width = fat
self.height = fat
self.fat = fat
self.dead = false
self.multiplycounter = 1
self.closest = 999999
end

function life:update(dt)
if not self.dead then
if self.fat - self.width < -self.width*0.3 then
self.dead = true
end
self.fat = self.fat - self.width*0.0001*dt
if not self:checkIfEating() then
self:lookForFood(dt)
end
if self.width > 30 then
table.insert(bugs, life(self.y+self.width, self.x+self.width, self.fat/2))
self.width = self.width/2
self.fat = self.fat/2
end


end
print(self.fat)
end
function life:lookForFood(dt)
self.closest = 9000000
local sx, sy = self.x, self.y
print("looking for food...")
for i, food in ipairs(edibles) do
if math.sqrt((self.x - food.x)^2 + (self.y-food.y)^2) < self.closest then
self.closest = math.sqrt((self.x - food.x)^2 + (self.y-food.y)^2)
sx, sy = food.x, food.y
print("going to " .. i)
end
end
self:goTo(sx, sy, dt)
end
function life:goTo(x, y, dt)
self.speed = (10 + self.fat * 0.5 )
if (x-self.x) ~= 0 then
self.m = (y-self.y)/(x-self.x)
if y-self.y > 0 then
self.m = math.abs(self.m)
elseif y-self.y < 0 and self.m > 0 then
self.m = -self.m
end
else
if y-self.y > 0 then
self.m = 1
elseif y-self.y < 0 then
self.m = -1
else
self.m = 0
end
end
if self.m > 1 or self.m < -1 then
self.speed = math.abs(self.speed / (self.m))
end
if (self.x < x) then
self.x = self.x + self.speed * dt
self.y = self.y + (self.speed* self.m * dt )
print("go right" .. self.fat ..x .. " " ..y )
elseif self.x > x then
self.x = self.x - self.speed* dt
self.y = self.y + (self.speed* self.m * dt )
print("go left" .. self.fat ..x .. " " ..y)
else
self.y = self.y + (self.speed* self.m * dt )
print("go vertical" .. self.fat ..x .. " " ..y)
end
--if (self.y < y) then
-- self.y = self.y + (10 * dt + self.fat * 0.5 * dt)
-- print("go down" .. self.fat)
--elseif self.y > y then
-- print("go up" .. self.fat)
-- self.y = self.y - (10 * dt + self.fat * 0.5 * dt)
--end
self.fat = self.fat - self.fat * self.width * 0.0003 * dt
print(self.m .. " " .. self.speed * self.m)
print((self.speed* self.m * dt ))
end
function life:checkIfEating()
for i, food in ipairs(edibles) do
if math.abs(self.x - food.x) < 10 and math.abs(self.y-food.y) < 10 then
self.fat = self.fat + food.fat
self.width = self.width + food.fat/2
table.remove(edibles, i)
print("yum")
return true
end
end
return false
end

function life:render()
love.graphics.setColor(self.RED, self.GREEN, self.BLUE, self.fat*20/200)
love.graphics.circle('fill', self.x, self.y, self.width)
love.graphics.setColor(255, 255, 255, 255)
end

+ 50
- 0
main.lua Dosyayı Görüntüle

@@ -0,0 +1,50 @@
VIRTUAL_WIDTH = 1280
VIRTUAL_HEIGHT = 720
WINDOW_WIDTH = 1280
WINDOW_HEIGHT = 720
Class = require 'class'
require 'simpleScale'
require 'life'
require 'edible'
bugs = {}
edibles = {}

function love.load()
math.randomseed(os.time())
smallfont = love.graphics.newFont("font.ttf", 25)
love.keyboard.setKeyRepeat(true)
simpleScale.setWindow(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, WINDOW_WIDTH, WINDOW_HEIGHT)
table.insert(bugs, life(VIRTUAL_HEIGHT/2, VIRTUAL_WIDTH/2, 10))
table.insert(edibles, edible(20, VIRTUAL_WIDTH/2+5, 4))
end
function love.update(dt)
love.window.setTitle(#bugs)
for i, bug in ipairs(bugs) do
bug:update(dt)
end
regulator()
end
function regulator()
for i, bug in ipairs(bugs) do
if bug.dead then
table.insert(edibles, edible(bug.y, bug.x, bug.fat))
table.remove(bugs, i)
end
end
if #edibles < #bugs/3 then
table.insert(edibles, edible(math.random(0, VIRTUAL_HEIGHT), math.random(0, VIRTUAL_WIDTH), 10))
end
end
function love.draw()
simpleScale.set()
love.graphics.clear(0,0,0,1)
for i, bug in ipairs(bugs) do
bug:render(dt)
end
for i, edible in ipairs(edibles) do
edible:render(dt)
end
love.graphics.setColor(1,1,1,1)
love.graphics.setFont(smallfont)
simpleScale.unSet()
end

+ 7
- 0
readme.md Dosyayı Görüntüle

@@ -0,0 +1,7 @@
# Kinda Life.

This is not a game, just a simulation I made because I had nothing better to do. Run in Lua, I guess you could use
```
./debuggame.sh
```
Although idk

+ 123
- 0
simpleScale.lua Dosyayı Görüntüle

@@ -0,0 +1,123 @@
simpleScale = {}
--Your Game's Aspect Ratio
local gAspectRatio
--The Window's Aspect Ratio
local wAspectRatio
--The scale between the game and the window's aspect ratio
simpleScale.scale = 1

local xt, yt = 0, 0, 1
local gameW, gameH, windowW, windowH = 800, 600, 800, 600

-- Declares your game's width and height, and sets the window size/settings
-- To be used instead of love.window.setMode
-- [gw] and [gh] are the width and height of the initial game
-- [sw] and [sh] (optional) are the width and height of the final window
-- [settings] (optional) are settings for love.window.setMode
function simpleScale.setWindow(gw, gh, sw, sh, settings)
sw = sw or gw
sh = sh or gh
gAspectRatio = gw/gh
gameW = gw
gameH = gh
simpleScale.updateWindow(sw, sh, settings)
end

-- Updates the Window size/settings
-- To be used instead of love.window.setMode
-- [sw] and [sh] are the width and height of the new Window
-- [settings] (optional) are settings for love.window.setMode
function simpleScale.updateWindow(sw, sh, settings)
love.window.setMode(sw, sh, settings)
windowW, windowH = love.graphics.getWidth(), love.graphics.getHeight()
wAspectRatio = windowW/windowH

--Window aspect ratio is TALLER than game
if gAspectRatio > wAspectRatio then
scale = windowW/gameW
xt = 0
yt = windowH/2 - (scale*gameH)/2

--Window aspect ratio is WIDER than game
elseif gAspectRatio < wAspectRatio then
scale = windowH/gameH
xt = windowW/2 - (scale*gameW)/2
yt = 0

--Window and game aspect ratios are EQUAL
else
scale = windowW/gameW

xt = 0
yt = 0
end
simpleScale.scale = scale
end

-- If you screen is resizable on drag, you'll need to call this to make sure
-- the appropriate screen values stay updated
-- You can call it on love.update() with no trouble
function simpleScale.resizeUpdate()
windowW, windowH = love.graphics.getWidth(), love.graphics.getHeight()
wAspectRatio = windowW/windowH

--Window aspect ratio is TALLER than game
if gAspectRatio > wAspectRatio then
scale = windowW/gameW
xt = 0
yt = windowH/2 - (scale*gameH)/2

--Window aspect ratio is WIDER than game
elseif gAspectRatio < wAspectRatio then
scale = windowH/gameH
xt = windowW/2 - (scale*gameW)/2
yt = 0

--Window and game aspect ratios are EQUAL
else
scale = windowW/gameW

xt = 0
yt = 0
end
simpleScale.scale = scale
end

-- Transforms the game's window relative to the entire window
-- Call this at the beginning of love.draw()
function simpleScale.set()
love.graphics.push()
love.graphics.translate(xt, yt)
love.graphics.scale(scale, scale)
end

-- Untransforms the game's window
-- Call this at the end of love.draw
-- You can optionally make the letterboxes a specific color by passing
-- [color] (optional) a table of color values
function simpleScale.unSet(color)
love.graphics.scale(1/scale, 1/scale)
love.graphics.translate(-xt, -yt)
love.graphics.pop()

--Draw the Letterboxes
local r,g,b,a = love.graphics.getColor()
local originalColor = love.graphics.getColor()
local boxColor
if color == nil then
boxColor = {0,0,0}
else
boxColor = color
end
love.graphics.setColor(boxColor)
--Horizontal bars
if gAspectRatio > wAspectRatio then
love.graphics.rectangle("fill", 0, 0, windowW, math.abs((gameH*scale - (windowH))/2))
love.graphics.rectangle("fill", 0, windowH, windowW, -math.abs((gameH*scale - (windowH))/2))
--Vertical bars
elseif gAspectRatio < wAspectRatio then
love.graphics.rectangle("fill", 0, 0, math.abs((gameW*scale - (windowW))/2),windowH)
love.graphics.rectangle("fill", windowW, 0, -math.abs((gameW*scale - (windowW))/2),windowH)
end
love.graphics.setColor(r,g,b,a)
end

Yükleniyor…
İptal
Kaydet