flonkerton 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,63 @@
1
+ require '../lib/flonkerton'
2
+ require 'extras/input_handler'
3
+ require 'extras/fill'
4
+ require 'extras/random_color'
5
+ include Gosu
6
+ include Flonkerton
7
+
8
+ module Example
9
+ class Logo
10
+ SPEED = 5
11
+
12
+ def initialize x = 0, y = 0
13
+ @image = Images[:gosu_logo]
14
+ @x = x
15
+ @y = y
16
+ end
17
+
18
+ def draw
19
+ @image.draw :x => @x, :y => @y
20
+ end
21
+
22
+ def move_right; @x += SPEED; end
23
+ def move_left; @x -= SPEED; end
24
+ def move_up; @y -= SPEED; end
25
+ def move_down; @y += SPEED; end
26
+ end
27
+
28
+ class GameScreen < Screen
29
+ include InputHandler
30
+ include FillScreen
31
+
32
+ def setup
33
+ @color = Color::BLUE
34
+ @font = Fonts[:default]
35
+ @logo = Logo.new(20, 30)
36
+ @input = { :up => [KbUp, KbW],
37
+ :down => [KbDown, KbS],
38
+ :left => [KbLeft, KbA],
39
+ :right => [KbRight, KbD],
40
+ :color => [KbReturn, KbSpace, KbBackspace] }
41
+ end
42
+
43
+ def button_down(id)
44
+ super # close
45
+ @color = Color.random if pressed?(:color)
46
+ end
47
+
48
+ def update
49
+ @logo.move_up if pressed?(:up)
50
+ @logo.move_down if pressed?(:down)
51
+ @logo.move_left if pressed?(:left)
52
+ @logo.move_right if pressed?(:right)
53
+ end
54
+
55
+ def draw
56
+ fill @color
57
+ @font.draw :text => 'Use WASD or Arrow Keys to move logo. SPACE to change color.', :x => 5, :y => 5
58
+ @logo.draw
59
+ end
60
+ end
61
+ end
62
+
63
+ Game.start
@@ -0,0 +1,38 @@
1
+ require '../lib/flonkerton'
2
+ require 'extras/fill'
3
+ include Gosu
4
+ include Flonkerton
5
+
6
+ module Example
7
+ class LogoScreen < Screen
8
+ def draw
9
+ Fonts[:default].draw :text => 'LOGO SCREEN - press Space',
10
+ :x => 10,
11
+ :y => 10
12
+ end
13
+
14
+ def button_down(id)
15
+ super # close
16
+ go_to(GameScreen) if id == KbSpace
17
+ end
18
+ end
19
+
20
+ class GameScreen < Screen
21
+ include FillScreen
22
+
23
+ def draw
24
+ fill
25
+ Fonts[:default].draw :text => 'GAME SCREEN - press Space',
26
+ :color => Color::BLACK,
27
+ :x => 10,
28
+ :y => 10
29
+ end
30
+
31
+ def button_down(id)
32
+ super # close
33
+ go_to(LogoScreen) if id == KbSpace
34
+ end
35
+ end
36
+ end
37
+
38
+ Game.start(Example::LogoScreen)
@@ -0,0 +1,72 @@
1
+ require '../lib/flonkerton'
2
+ require 'extras/actor'
3
+ require 'extras/mouse_border'
4
+ require 'extras/scrollable'
5
+ require 'extras/input_handler'
6
+ require 'extras/random_color'
7
+
8
+ include Gosu
9
+ include Flonkerton
10
+
11
+ module Example
12
+ Background = Class.new(Actor)
13
+ GosuLogo = Class.new(Actor)
14
+
15
+ class GameScreen < Screen
16
+ include Scrollable
17
+ include MouseBorder
18
+ include InputHandler
19
+
20
+ def setup
21
+ # Resources
22
+ @font = Fonts[:default]
23
+ @mouse = Images[:cursor]
24
+
25
+ # Configure InputHandler
26
+ @input = { :left => [KbA, KbLeft, GpLeft],
27
+ :right => [KbD, KbRight, GpRight],
28
+ :up => [KbW, KbUp, GpUp],
29
+ :down => [KbS, KbDown, GpDown] }
30
+
31
+ # Actors
32
+ @background = Background.new :scale => 2
33
+ @things = Array.new
34
+ 100.times do
35
+ @things << GosuLogo.new(:x => rand(width * 2),
36
+ :y => rand(height * 2),
37
+ :scale => [0.2, 0.4, 0.6, 0.8, 1].sample,
38
+ :color => Color.random,
39
+ :mode => [:default, :additive].sample)
40
+ end
41
+ end
42
+
43
+ def update
44
+ # Uses Scrollable, MouseBorder and InputHandler
45
+ scroll_right if mouse_on_right? or pressed?(:right)
46
+ scroll_left if mouse_on_left? or pressed?(:left)
47
+ scroll_up if mouse_on_top? or pressed?(:up)
48
+ scroll_down if mouse_on_bottom? or pressed?(:down)
49
+
50
+ # Random Game Logic
51
+ 20.times do
52
+ npc = @things.sample
53
+ npc.x += (-5..5).rand
54
+ npc.y += (-5..5).rand
55
+ end
56
+ end
57
+
58
+ def draw
59
+ # Actors receives viewport coordinates.
60
+ @background.draw(@viewport.x, @viewport.y)
61
+ @things.each do |thing|
62
+ thing.draw(@viewport.x, @viewport.y)
63
+ end
64
+
65
+ # Resources receives screen coordinates.
66
+ @mouse.draw :x => mouse_x, :y => mouse_y
67
+ @font.draw :text => 'Use Mouse, WASD or Arrow Keys to scroll...', :x => 5, :y => 5
68
+ end
69
+ end
70
+ end
71
+
72
+ Game.start
@@ -0,0 +1,43 @@
1
+ require '../lib/flonkerton'
2
+ include Gosu
3
+ include Flonkerton
4
+
5
+ module Example
6
+ class GameScreen < Screen
7
+
8
+ INSTRUCTIONS = ['Press Escape to quit',
9
+ 'Press Space to play Song',
10
+ 'Press Backspace to stop Song',
11
+ 'Press Enter to play Sample']
12
+
13
+ def setup
14
+ @font = Fonts[:default]
15
+ @song = Songs[:catch_me_song]
16
+ @beep = Samples[:select]
17
+ @song.volume = 0.2
18
+ end
19
+
20
+ def button_down(id)
21
+ super
22
+ @song.play if id == KbSpace
23
+ @song.stop if id == KbBackspace
24
+ @beep.play if id == KbReturn
25
+ end
26
+
27
+ def draw
28
+ write INSTRUCTIONS
29
+ end
30
+
31
+ protected
32
+
33
+ def write list, left_margin = 5, top_margin = 0, space = 20
34
+ list.each_with_index do |line, i|
35
+ @font.draw :text => line,
36
+ :x => left_margin,
37
+ :y => top_margin + i * space
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ Game.start
@@ -0,0 +1,30 @@
1
+ require '../lib/flonkerton'
2
+ include Flonkerton
3
+
4
+ module Example
5
+ class GameScreen < Screen
6
+
7
+ TILES = '.RWT' # Plain, Rock, Water, Tree
8
+
9
+ MAP = ['.R...TTT',
10
+ 'RR....TT',
11
+ '........',
12
+ '....WWWW',
13
+ '..WWWW..']
14
+
15
+ def setup
16
+ @tiles = Tiles[:tiles]
17
+ @size = @tiles.first.width
18
+ end
19
+
20
+ def draw
21
+ MAP.each_with_index do |line, y|
22
+ line.split('').each_with_index do |char, x|
23
+ @tiles[TILES.index(char)].draw :x => x * @size, :y => y * @size
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ Game.start
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "flonkerton"
3
+ s.version = "0.0.1"
4
+ s.summary = "Gosu toys for the bored rubyist."
5
+ s.description = "A simple framework that aims to improve your Gosu experience."
6
+ s.authors = ["Ariel H. Pillet"]
7
+ s.email = ["apillet@gmail.com"]
8
+ s.homepage = "http://github.com/apillet/flonkerton"
9
+ s.files = ["TODO", "README.md", "media/CREDITS", "Rakefile", "watchmen.rb", "config/defaults.yml", "examples/clip.rb", "examples/config/defaults.yml", "examples/extras/actor.rb", "examples/extras/fill.rb", "examples/extras/input_handler.rb", "examples/extras/mouse_border.rb", "examples/extras/random_color.rb", "examples/extras/scrollable.rb", "examples/font.rb", "examples/input.rb", "examples/screen.rb", "examples/scroll.rb", "examples/sound.rb", "examples/tiles.rb", "games/gosu_demo/config/defaults.yml", "games/gosu_demo/media/beep.wav", "games/gosu_demo/media/Space.png", "games/gosu_demo/media/star_25x25.png", "games/gosu_demo/media/starfighter.png", "games/gosu_demo/original.rb", "games/gosu_demo/play.rb", "lib/flonkerton.rb", "flonkerton.gemspec", "media/ArcadeClassic.ttf", "media/background.png", "media/catch_me_song.ogg", "media/cursor.png", "media/gosu_logo.png", "media/select.wav", "media/tiles_32x32.png", "test/integration_test.rb", "test/test_helper.rb", "test/unit_tests.rb"]
10
+
11
+ s.rubyforge_project = "flonkerton"
12
+ s.add_dependency "gosu", ">= 0.7.19"
13
+ s.add_development_dependency "protest", ">= 0.3.1"
14
+ s.add_development_dependency "rr", ">= 0.10.11"
15
+ s.add_development_dependency "watchr", ">= 0.6"
16
+ end
@@ -0,0 +1,39 @@
1
+ # Window
2
+ #
3
+ :width: 640
4
+ :height: 480
5
+ :caption: Gosu Tutorial Game
6
+ :font_size: 20
7
+ :fullscreen: false
8
+ :initial_screen: GosuTutorial::GameScreen
9
+
10
+ # Resources
11
+ #
12
+ :media_path: media
13
+ :fonts_ext: *.ttf
14
+ :songs_ext: *.ogg
15
+ :tiles_ext: *.png
16
+ :images_ext: *.png
17
+ :samples_ext: *.wav
18
+
19
+ # Defaults
20
+ #
21
+ :image:
22
+ :x: 0
23
+ :y: 0
24
+ :z: 0
25
+ :factor_x: 1
26
+ :factor_y: 1
27
+ :color: 0xffffffff
28
+ :mode: :default
29
+ :order: [:x, :y, :z, :factor_x, :factor_y, :color, :mode] # For 1.8.6 - Don't change this
30
+ :font:
31
+ :text: ''
32
+ :x: 0
33
+ :y: 0
34
+ :z: 0
35
+ :factor_x: 1
36
+ :factor_y: 1
37
+ :color: 0xffffffff
38
+ :mode: :default
39
+ :order: [:text, :x, :y, :z, :factor_x, :factor_y, :color, :mode] # For 1.8.6 - Don't change this
@@ -0,0 +1,137 @@
1
+ begin
2
+ # In case you use Gosu via RubyGems.
3
+ require 'rubygems'
4
+ rescue LoadError
5
+ # In case you don't.
6
+ end
7
+
8
+ require 'gosu'
9
+
10
+ module ZOrder
11
+ Background, Stars, Player, UI = *0..3
12
+ end
13
+
14
+ class Player
15
+ attr_reader :score
16
+
17
+ def initialize(window)
18
+ @image = Gosu::Image.new(window, "media/starfighter.png", false)
19
+ @beep = Gosu::Sample.new(window, "media/beep.wav")
20
+ @x = @y = @vel_x = @vel_y = @angle = 0.0
21
+ @score = 0
22
+ end
23
+
24
+ def warp(x, y)
25
+ @x, @y = x, y
26
+ end
27
+
28
+ def turn_left
29
+ @angle -= 4.5
30
+ end
31
+
32
+ def turn_right
33
+ @angle += 4.5
34
+ end
35
+
36
+ def accelerate
37
+ @vel_x += Gosu::offset_x(@angle, 0.5)
38
+ @vel_y += Gosu::offset_y(@angle, 0.5)
39
+ end
40
+
41
+ def move
42
+ @x += @vel_x
43
+ @y += @vel_y
44
+ @x %= 640
45
+ @y %= 480
46
+
47
+ @vel_x *= 0.95
48
+ @vel_y *= 0.95
49
+ end
50
+
51
+ def draw
52
+ @image.draw_rot(@x, @y, ZOrder::Player, @angle)
53
+ end
54
+
55
+ def collect_stars(stars)
56
+ stars.reject! do |star|
57
+ if Gosu::distance(@x, @y, star.x, star.y) < 35 then
58
+ @score += 10
59
+ @beep.play
60
+ true
61
+ else
62
+ false
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ class Star
69
+ attr_reader :x, :y
70
+
71
+ def initialize(animation)
72
+ @animation = animation
73
+ @color = Gosu::Color.new(0xff000000)
74
+ @color.red = rand(255 - 40) + 40
75
+ @color.green = rand(255 - 40) + 40
76
+ @color.blue = rand(255 - 40) + 40
77
+ @x = rand * 640
78
+ @y = rand * 480
79
+ end
80
+
81
+ def draw
82
+ img = @animation[Gosu::milliseconds / 100 % @animation.size]
83
+ img.draw(@x - img.width / 2.0, @y - img.height / 2.0,
84
+ ZOrder::Stars, 1, 1, @color, :additive)
85
+ end
86
+ end
87
+
88
+ class GameWindow < Gosu::Window
89
+ def initialize
90
+ super(640, 480, false)
91
+ self.caption = "Gosu Tutorial Game"
92
+
93
+ @background_image = Gosu::Image.new(self, "media/Space.png", true)
94
+
95
+ @player = Player.new(self)
96
+ @player.warp(320, 240)
97
+
98
+ @star_anim = Gosu::Image::load_tiles(self, "media/star_25x25.png", 25, 25, false)
99
+ @stars = Array.new
100
+
101
+ @font = Gosu::Font.new(self, Gosu::default_font_name, 20)
102
+ end
103
+
104
+ def update
105
+ if button_down? Gosu::KbLeft or button_down? Gosu::GpLeft then
106
+ @player.turn_left
107
+ end
108
+ if button_down? Gosu::KbRight or button_down? Gosu::GpRight then
109
+ @player.turn_right
110
+ end
111
+ if button_down? Gosu::KbUp or button_down? Gosu::GpButton0 then
112
+ @player.accelerate
113
+ end
114
+ @player.move
115
+ @player.collect_stars(@stars)
116
+
117
+ if rand(100) < 4 and @stars.size < 25 then
118
+ @stars.push(Star.new(@star_anim))
119
+ end
120
+ end
121
+
122
+ def draw
123
+ @background_image.draw(0, 0, ZOrder::Background)
124
+ @player.draw
125
+ @stars.each { |star| star.draw }
126
+ @font.draw("Score: #{@player.score}", 10, 10, ZOrder::UI, 1.0, 1.0, 0xffffff00)
127
+ end
128
+
129
+ def button_down(id)
130
+ if id == Gosu::KbEscape then
131
+ close
132
+ end
133
+ end
134
+ end
135
+
136
+ window = GameWindow.new
137
+ window.show