W ramach ostatnich zajęć z tworzenia stron www które prowadzę z dzieciakami jako WowSchool, postanowiłem odejść trochę od standardowego planu zadań i pokazać im trochę programowania gier. A skłonił mnie do tego ten wpis, za który serdecznie dziękuję Oli Banasiak, z którym też szczerze polecam się zapoznać, żeby dowiedzieć się nieco więcej na temat samego silnika, jakim jest LÖVE. A ja dzisiaj skupię na czymś nieco innym, mianowicie pokażę jaki kodzik udało się wygenerować z dzieciakami w ciągu godziny, a także kilka obserwacji na temat programowania.
Pierwsza ważna informacja, w LÖVE piszemy korzystając z Lua. Nigdy wcześniej nie zetknąłem się z tym językiem programowania, nawet z nazwy, tym bardziej byłem ciekawy co to takiego. I cóż, w temacie tego co było mi potrzebne, poczułem się jak w domu. Tzn, jeśli zupełnie nie zmieniamy paradygmatu, to wszystkie języki (które znam) oferują coś takiego jak funkcje, czy tam metody. Instrukcje warunkowe, oraz pętle. I we wszystkich z którymi się zetknąłem zostało to zrealizowane ifami, forami, etc.. Różnice dotyczą najczęściej klamerek, średników i tego typu historii. Oraz głębiej na pewno różnic jest o wiele więcej, ale chodzi mi o to, że pisanie podstawowych komend nie różni się tak bardzo. Zresztą, spójrzcie na kodzik poniżej:
function love.load()
r1 = {
x = 10,
y = 100,
width = 100,
height = 100
}
r2 = {
x = 250,
y = 120,
width = 150,
height = 120
}
end
function love.draw()
local mode
if checkCollision(r1, r2) then
mode = "fill"
else
mode = "line"
end
--love.graphics.print("O jaka fajna gra! Powinna dostać oskara!", 0, 0)
--love.graphics.circle(mode, x, y, 50)
love.graphics.rectangle(mode, r1.x, r1.y, r1.width, r1.height)
love.graphics.rectangle(mode, r2.x, r2.y, r2.width, r2.height)
end
function love.update(dt)
if love.keyboard.isDown("right") then
r1.x = r1.x + 10
end
if love.keyboard.isDown("left") then
r1.x = r1.x - 10
end
if love.keyboard.isDown("up") then
r1.y = r1.y - 10
end
if love.keyboard.isDown("down") then
r1.y = r1.y + 10
end
end
function checkCollision(a, b)
local a_left = a.x
local a_right = a.x + a.width
local a_top = a.y
local a_bottom = a.y + a.height
local b_left = b.x
local b_right = b.x + b.width
local b_top = b.y
local b_bottom = b.y + b.height
if a_right > b_left and
a_left < b_right and
a_bottom > b_top and
a_top < b_bottom then
return true
else
return false
end
end
Czytając ją, nawet widząc ten język po raz pierwszy, wszystko wydaje się jasne, prawda?
A tak działa kodzik znajdujący się powyżej:
Podsumowując, chciałem bardzo polecić takie wycieczki krajoznawcze po za własny zakres zainteresowań. To działa naprawdę odświeżającą, nowy język, nowe problemy, a do tego jakaś mała, szybko dająca efekty biblioteczka i czysta zabawa. Wiedzieliście np, że Lua umożliwia zwracanie większej liczby wartości, niż tylko jedna? Ciekawe, jak by wpłynęło to na programowanie, gdyby takie możliwości były dostępne w językach takich jak java, czy C#.

Comments are closed.
Z doświadczenia mogę powiedzieć, że zwracanie wielu wartości rzadko przydatne. Do tego gdy się zwraca za dużo różnych rzeczy z jednej funkcji to się robi chaos, wtedy lepiej ubrać to w jakąś strukturę.