pacmanx 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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