pacmanx 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +19 -0
  5. data/Rakefile +2 -0
  6. data/bin/pacmanx +7 -0
  7. data/bin/pacman~ +7 -0
  8. data/lib/pacman/animated_object.rb +10 -0
  9. data/lib/pacman/cage.rb +14 -0
  10. data/lib/pacman/controller.rb +127 -0
  11. data/lib/pacman/ghost.rb +41 -0
  12. data/lib/pacman/ghosts_controller.rb +253 -0
  13. data/lib/pacman/ghosts_renderer.rb +70 -0
  14. data/lib/pacman/level.rb +62 -0
  15. data/lib/pacman/level_builder.rb +129 -0
  16. data/lib/pacman/level_renderer.rb +100 -0
  17. data/lib/pacman/levels/level1.lvl +98 -0
  18. data/lib/pacman/media/bg2_2.jpg +0 -0
  19. data/lib/pacman/media/blinky_down.png +0 -0
  20. data/lib/pacman/media/blinky_left.png +0 -0
  21. data/lib/pacman/media/blinky_right.png +0 -0
  22. data/lib/pacman/media/blinky_up.png +0 -0
  23. data/lib/pacman/media/clyde_down.png +0 -0
  24. data/lib/pacman/media/clyde_left.png +0 -0
  25. data/lib/pacman/media/clyde_right.png +0 -0
  26. data/lib/pacman/media/clyde_up.png +0 -0
  27. data/lib/pacman/media/inky_down.png +0 -0
  28. data/lib/pacman/media/inky_left.png +0 -0
  29. data/lib/pacman/media/inky_right.png +0 -0
  30. data/lib/pacman/media/inky_up.png +0 -0
  31. data/lib/pacman/media/pacman_down.png +0 -0
  32. data/lib/pacman/media/pacman_left.png +0 -0
  33. data/lib/pacman/media/pacman_right.png +0 -0
  34. data/lib/pacman/media/pacman_up.png +0 -0
  35. data/lib/pacman/media/pellet.png +0 -0
  36. data/lib/pacman/media/pinky_down.png +0 -0
  37. data/lib/pacman/media/pinky_left.png +0 -0
  38. data/lib/pacman/media/pinky_right.png +0 -0
  39. data/lib/pacman/media/pinky_up.png +0 -0
  40. data/lib/pacman/media/power_pellet.png +0 -0
  41. data/lib/pacman/media/wall.png +0 -0
  42. data/lib/pacman/pacman.rb +4 -0
  43. data/lib/pacman/pellet.rb +16 -0
  44. data/lib/pacman/player.rb +12 -0
  45. data/lib/pacman/version.rb +4 -0
  46. data/lib/pacman/wall.rb +8 -0
  47. data/pacman_classes.png +0 -0
  48. data/pacmanx.gemspec +24 -0
  49. data/spec/level_builder_spec.rb +111 -0
  50. data/spec/level_spec.rb +69 -0
  51. data/spec/spec_helper.rb +7 -0
  52. metadata +141 -0
Binary file
@@ -0,0 +1,4 @@
1
+ require_relative 'controller'
2
+
3
+ game = Pacman::Game.new
4
+ game.show
@@ -0,0 +1,16 @@
1
+ module Pacman
2
+ # object which can be taken
3
+ class Item
4
+ def passable?
5
+ true
6
+ end
7
+ end
8
+
9
+ # collection pellet
10
+ class Pellet < Item
11
+ end
12
+
13
+ # freezing pellet
14
+ class PowerPellet < Item
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module Pacman
2
+ # model class of pacman
3
+ class Player < AnimatedObject
4
+ def initialize(direction, x, y)
5
+ super()
6
+ @direction = direction
7
+ @x, @y = x, y
8
+ end
9
+
10
+ attr_accessor :direction, :x, :y
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ # Pacman module
2
+ module Pacman
3
+ VERSION = '1.0.1'
4
+ end
@@ -0,0 +1,8 @@
1
+ module Pacman
2
+ # model of wall
3
+ class Wall
4
+ def passable?
5
+ false
6
+ end
7
+ end
8
+ end
Binary file
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pacman/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "pacmanx"
8
+ spec.version = Pacman::VERSION
9
+ spec.authors = ["fajmanjir"]
10
+ spec.email = ["fajmanjir@fit.cvut.cz"]
11
+ spec.summary = %q{Pacman eXtreme edition}
12
+ spec.description = %q{Pacman eXtreme edition - classic Pacman, but a bit more challenging.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_runtime_dependency "gosu", ">= 0.8.6"
24
+ end
@@ -0,0 +1,111 @@
1
+
2
+ # !/bin/ruby
3
+ # -*- encoding : utf-8 -*-
4
+ require_relative 'spec_helper'
5
+ require_relative '../lib/pacman/controller'
6
+
7
+ # Pacman module
8
+ module Pacman
9
+ describe LevelBuilder do
10
+ describe 'DSL' do
11
+ let(:dsl1) do
12
+ <<-EOS
13
+ resize 10, 8
14
+ EOS
15
+ end
16
+ it 'resizes maze' do
17
+ level = described_class.build(dsl1)
18
+ expect(level.width).to eq 10
19
+ expect(level.height).to eq 8
20
+ end
21
+
22
+ let(:dsl2) do
23
+ <<-EOS
24
+ resize 4, 3
25
+ wall
26
+ wall
27
+ skip 3
28
+ wall
29
+ EOS
30
+ end
31
+
32
+ it '#add_wall and #skip' do
33
+ level = described_class.build(dsl2)
34
+ expect(level[0][0].instance_of?(Wall)).to be true
35
+ expect(level[0][1].instance_of?(Wall)).to be true
36
+ expect(level[0][2]).to be nil
37
+ expect(level[1][0]).to be nil
38
+ expect(level[1][1].instance_of?(Wall)).to be true
39
+ expect(level[1][2]).to be nil
40
+ end
41
+
42
+ let(:dsl3) do
43
+ <<-EOS
44
+ resize 4, 2
45
+ goto 2, 0
46
+ wall
47
+ goto 3, 1
48
+ wall
49
+ EOS
50
+ end
51
+
52
+ it '#goto and place to the last position' do
53
+ level = described_class.build(dsl3)
54
+ expect(level[0][2].instance_of?(Wall)).to be true
55
+ expect(level[1][2]).to be nil
56
+ expect(level[0][3]).to be nil
57
+ expect(level[1][3].instance_of?(Wall)).to be true
58
+ end
59
+
60
+ let(:dsl4) do
61
+ <<-EOS
62
+ resize 4, 2
63
+ pellet
64
+ pellet
65
+ skip 1
66
+ power_pellet
67
+ pellet
68
+ wall
69
+ EOS
70
+ end
71
+
72
+ it '#pellet and #power_pellet' do
73
+ level = described_class.build(dsl4)
74
+ expect(level[0][0].instance_of?(Pellet)).to be true
75
+ expect(level[0][1].instance_of?(Pellet)).to be true
76
+ expect(level[0][2]).to be nil
77
+ expect(level[0][3].instance_of?(PowerPellet)).to be true
78
+ expect(level[1][0].instance_of?(Pellet)).to be true
79
+ end
80
+
81
+ let(:dsl5) do
82
+ <<-EOS
83
+ resize 4, 2
84
+ goto 2, 1
85
+ player :left
86
+ EOS
87
+ end
88
+
89
+ it '#player set position' do
90
+ level = described_class.build(dsl5)
91
+ expect(level.player.instance_of?(Player)).to be true
92
+ expect(level.player.direction).to be :left
93
+ end
94
+
95
+ let(:dsl6) do
96
+ <<-EOS
97
+ resize 7, 4
98
+ goto 1, 1
99
+ cage
100
+ wall
101
+ EOS
102
+ end
103
+
104
+ it '#cage at specified position' do
105
+ level = described_class.build(dsl6)
106
+ expect(level.get(1, 1).instance_of?(Cage)).to be true
107
+ expect(level.get(2, 1).instance_of?(Wall)).to be true
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,69 @@
1
+
2
+ # !/bin/ruby
3
+ # -*- encoding : utf-8 -*-
4
+ require_relative 'spec_helper'
5
+ require_relative '../lib/pacman/controller'
6
+
7
+ # Pacman module
8
+ module Pacman
9
+ describe Level do
10
+ subject(:level) { Level.new }
11
+
12
+ describe 'iteration' do
13
+ it 'method #resize' do
14
+ expect(level.methods.include?(:resize)).to be true
15
+ level.resize(9, 8)
16
+ expect(level.width).to eq 9
17
+ expect(level.height).to eq 8
18
+ end
19
+
20
+ it 'has method #each' do
21
+ expect(level.methods.include?(:each)).to be true
22
+ end
23
+
24
+ it '#each without block' do
25
+ expect(level.each.instance_of?(Enumerator)).to be true
26
+ expect(level.each.size).to eq 0
27
+ level.resize(10, 5)
28
+ expect(level.each.size).to eq 5
29
+ expect(level[0].size).to eq 10
30
+ end
31
+
32
+ it '#each with a block' do
33
+ level.resize(6, 4)
34
+ count = 0
35
+ level.each do |row|
36
+ row.each do |_col|
37
+ count += 2
38
+ end
39
+ end
40
+ expect(count).to eq 6 * 4 * 2
41
+ end
42
+
43
+ it 'has method #each_with_position' do
44
+ expect(level.methods.include?(:each_with_position)).to be true
45
+ level.resize(3, 4)
46
+ positions = []
47
+
48
+ count = 0
49
+ level.each_with_position do |x, y, _obj|
50
+ count += 1
51
+ fail('should not repeat elements position') if positions.include?("#{x},#{y}")
52
+ positions << "#{x},#{y}"
53
+ end
54
+ expect(count).to be 3 * 4
55
+ end
56
+ end
57
+
58
+ describe 'accessing:' do
59
+ let(:data) { [11, 12] }
60
+ it 'access row via [] and []=' do
61
+ level.resize(2, 2)
62
+ level[1] = data
63
+ expect(level[0]).to eq [nil, nil]
64
+ expect(level[1]).to eq data
65
+ end
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ RSpec.configure do |c|
4
+ c.color = true
5
+ c.formatter = :documentation
6
+ c.tty = true
7
+ end
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pacmanx
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - fajmanjir
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gosu
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.8.6
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.6
55
+ description: Pacman eXtreme edition - classic Pacman, but a bit more challenging.
56
+ email:
57
+ - fajmanjir@fit.cvut.cz
58
+ executables:
59
+ - pacmanx
60
+ - pacman~
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - bin/pacmanx
69
+ - bin/pacman~
70
+ - lib/pacman/animated_object.rb
71
+ - lib/pacman/cage.rb
72
+ - lib/pacman/controller.rb
73
+ - lib/pacman/ghost.rb
74
+ - lib/pacman/ghosts_controller.rb
75
+ - lib/pacman/ghosts_renderer.rb
76
+ - lib/pacman/level.rb
77
+ - lib/pacman/level_builder.rb
78
+ - lib/pacman/level_renderer.rb
79
+ - lib/pacman/levels/level1.lvl
80
+ - lib/pacman/media/bg2_2.jpg
81
+ - lib/pacman/media/blinky_down.png
82
+ - lib/pacman/media/blinky_left.png
83
+ - lib/pacman/media/blinky_right.png
84
+ - lib/pacman/media/blinky_up.png
85
+ - lib/pacman/media/clyde_down.png
86
+ - lib/pacman/media/clyde_left.png
87
+ - lib/pacman/media/clyde_right.png
88
+ - lib/pacman/media/clyde_up.png
89
+ - lib/pacman/media/inky_down.png
90
+ - lib/pacman/media/inky_left.png
91
+ - lib/pacman/media/inky_right.png
92
+ - lib/pacman/media/inky_up.png
93
+ - lib/pacman/media/pacman_down.png
94
+ - lib/pacman/media/pacman_left.png
95
+ - lib/pacman/media/pacman_right.png
96
+ - lib/pacman/media/pacman_up.png
97
+ - lib/pacman/media/pellet.png
98
+ - lib/pacman/media/pinky_down.png
99
+ - lib/pacman/media/pinky_left.png
100
+ - lib/pacman/media/pinky_right.png
101
+ - lib/pacman/media/pinky_up.png
102
+ - lib/pacman/media/power_pellet.png
103
+ - lib/pacman/media/wall.png
104
+ - lib/pacman/pacman.rb
105
+ - lib/pacman/pellet.rb
106
+ - lib/pacman/player.rb
107
+ - lib/pacman/version.rb
108
+ - lib/pacman/wall.rb
109
+ - pacman_classes.png
110
+ - pacmanx.gemspec
111
+ - spec/level_builder_spec.rb
112
+ - spec/level_spec.rb
113
+ - spec/spec_helper.rb
114
+ homepage: ''
115
+ licenses:
116
+ - MIT
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.2.2
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: Pacman eXtreme edition
138
+ test_files:
139
+ - spec/level_builder_spec.rb
140
+ - spec/level_spec.rb
141
+ - spec/spec_helper.rb