Die Idee, allein über die "Sprache" RGSS Spiele zu schreiben, hat mich auch schon sehr oft beschäftigt. Das dabei natürlich Dinge wie Plattformunabhängigkeit flöten gehen, damit muss man umgehen. Aber es hilft ungemein, die Sprache von Grund auf zu lernen. Ich habe da auch direkt mal ein Beispiel dabei: Eine sehr einfache Snake-Variante.
Download: Snake.rar
Code:
Code:
class Game
def main
@direction = 0
@tick = 0
@tick_max = 10
@parts = []
@parts[0] = Sprite.new
@parts[0].bitmap = Bitmap.new(16, 16)
@parts[0].bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(200, 200, 200))
@parts[0].x = 320
@parts[0].y = 240
@block = Sprite.new
@block.bitmap = Bitmap.new(16, 16)
@block.bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(255, 255, 255))
@block.x = rand(39)*16
@block.y = rand(29)*16
Graphics.transition
loop do
Graphics.update
Input.update
update
break if $scene != self
end
end
def update
@tick += 1
if @tick >= @tick_max
@tick = 0
case @direction
when 0
@parts[-1].y -= 16
reset if @parts[-1].y <= -16
when 1
@parts[-1].x += 16
reset if @parts[-1].x >= 640
when 2
@parts[-1].y += 16
reset if @parts[-1].y >= 480
when 3
@parts[-1].x -= 16
reset if @parts[-1].x <= -16
end
follow if @parts.length > 1
end
if Input.trigger?(Input::UP)
@direction = 0
elsif Input.trigger?(Input::RIGHT)
@direction = 1
elsif Input.trigger?(Input::DOWN)
@direction = 2
elsif Input.trigger?(Input::LEFT)
@direction = 3
end
if @parts[-1].x == @block.x && @parts[-1].y == @block.y
new_part
@block.x, @block.y = rand(39)*16, rand(29)*16
end
reset if crushing?
end
def reset
@parts.each{|p| p.dispose}
@parts = []
@parts[0] = Sprite.new
@parts[0].bitmap = Bitmap.new(16, 16)
@parts[0].bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(200, 200, 200))
@parts[0].x = 320
@parts[0].y = 240
@direction, @tick, @tick_max = 0, 0, 10
@block.x, @block.y = rand(39)*16, rand(29)*16
end
def new_part
@parts.unshift(Sprite.new)
@parts[0].bitmap = Bitmap.new(16, 16)
@parts[0].bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(255, 255, 255))
@parts[0].x = -16
@parts[0].y = -16
@tick_max -= 1 if (@parts.length % 5 == 0) && @tick_max > 2
end
def follow
for i in 0..@parts.length-3
@parts[i].x = @parts[i+1].x
@parts[i].y = @parts[i+1].y
end
case @direction
when 0
x = @parts[-1].x
y = @parts[-1].y + 16
when 1
x = @parts[-1].x - 16
y = @parts[-1].y
when 2
x = @parts[-1].x
y = @parts[-1].y - 16
when 3
x = @parts[-1].x + 16
y = @parts[-1].y
end
@parts[-2].x = x
@parts[-2].y = y
end
def crushing?
x = @parts[-1].x
y = @parts[-1].y
for i in 0..@parts.length-2
if @parts[i].x == x && @parts[i].y == y
return true
end
end
return false
end
end
(Bitte keine Kommentare zu meinem schlechten Schreibstil - Ist schon relativ alt.)
Wenn Interesse da ist, kann ich das sehr gerne näher erläutern.