btetris_kp 0.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.
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "btetris_kp/core/piece"
4
+ require "btetris_kp/core/board"
5
+ require 'spec_helper'
6
+
7
+ module BTetrisKp
8
+ describe Board do
9
+ before :each do
10
+ @board = Board.new(BTetrisWindow.new, 20, 20)
11
+ end
12
+
13
+ it 'can initialize Board' do
14
+ @board.should(be_an_instance_of Board)
15
+ end
16
+
17
+ it 'initialization creates empty board' do
18
+ @board.board.each do |row|
19
+ row.each { |val| val.should eq 0 }
20
+ end
21
+ end
22
+
23
+ it 'can convert board to string' do
24
+ str = @board.to_s
25
+ str.size.should eq Const::PNR_VER * Const::PNR_HOR
26
+ str.each_char { |val| val.should eq '0' }
27
+ end
28
+
29
+ it 'can convert string to board' do
30
+ str = @board.to_s
31
+ str[0] = '1'
32
+ str[Const::PNR_VER * Const::PNR_HOR - 1] = '2'
33
+ @board.from_s!(str)
34
+ @board.board[0][0].should eq 1
35
+ @board.board[Const::PNR_VER - 1][Const::PNR_HOR - 1].should eq 2
36
+ end
37
+
38
+ it 'can tell if game is over' do
39
+ @board.game_over?.should eq false
40
+ @board.board[0].each_with_index { |val, y| @board.board[0][y] = 1 }
41
+ @board.game_over?.should eq true
42
+ end
43
+
44
+ it 'can clear full rows' do
45
+ @board.board[0].each_with_index { |val, y| @board.board[0][y] = 1 }
46
+ @board.board[3].each_with_index { |val, y| @board.board[3][y] = 1 }
47
+ cnt = @board.clear_rows!
48
+ cnt.should eq 2
49
+ @board.board[0][0].should eq 0
50
+ @board.board[3][0].should eq 0
51
+ end
52
+
53
+ it 'can move other rows correctly when clearing rows' do
54
+ @board.board[2].each_with_index { |val, y| @board.board[2][y] = 1 }
55
+ @board.board[0][0] = 1
56
+ @board.board[1][1] = 1
57
+ cnt = @board.clear_rows!
58
+ cnt.should eq 1
59
+ @board.board[1][0].should eq 1
60
+ @board.board[2][1].should eq 1
61
+ end
62
+
63
+ it 'can insert garbage rows at the bottom of the board' do
64
+ @board.insert_garbage!(2)
65
+ @board.board[Const::PNR_VER - 1].inject(:+).should_not eq 0
66
+ @board.board[Const::PNR_VER - 1].include?(0).should eq true
67
+ end
68
+
69
+ it 'can move other rows correctly when inserting garbage rows' do
70
+ @board.board[Const::PNR_VER - 1][0] = 1
71
+ @board.board[Const::PNR_VER - 2][0].should eq 0
72
+ @board.insert_garbage!(1)
73
+ @board.board[Const::PNR_VER - 2][0].should eq 1
74
+ end
75
+
76
+ it 'can drop piece to the bottom of the board' do
77
+ @board.cur_piece = Piece.new(@board.board, 0, 0, 0)
78
+ @board.piece_drop!
79
+ @board.cur_piece.set_on_board
80
+ @board.board[Const::PNR_VER - 1][0].should_not eq 0
81
+ end
82
+
83
+ it 'can tell if piece is stuck (cant move further down)' do
84
+ @board.cur_piece = Piece.new(@board.board, 0, 0, 0)
85
+ @board.piece_stuck?.should eq false
86
+ @board.piece_drop!
87
+ @board.piece_stuck?.should eq true
88
+
89
+ @board.cur_piece = Piece.new(@board.board, 0, 0, 0)
90
+ @board.board[2][0] = 1
91
+ @board.piece_stuck?.should eq true
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "btetris_kp/core/piece"
4
+ require "btetris_kp/core/board"
5
+ require 'spec_helper'
6
+
7
+ module BTetrisKp
8
+ describe Piece do
9
+ before :each do
10
+ @board = Board.new(Gosu::Window.new(800, 600, false), 20, 20)
11
+ end
12
+
13
+ it 'can initialize Piece' do
14
+ pi = Piece.new(@board.board, 10, 15, 0).should(be_an_instance_of Piece)
15
+ end
16
+
17
+ it 'can place any type of piece on empty board' do
18
+ (0...Const::TILES.size).each_with_index do |tile, index|
19
+ pi = Piece.new(@board.board, 0, 0, index)
20
+ pi.can_be_set?.should eq true
21
+ end
22
+ end
23
+
24
+ it 'can rotate any type of piece to both directions' do
25
+ (0...Const::TILES.size).each_with_index do |tile, index|
26
+ pi = Piece.new(@board.board, 4, 4, index)
27
+ pi.can_be_set?.should eq true
28
+ 3.times do
29
+ pi.rotate_right!
30
+ pi.can_be_set?.should eq true
31
+ end
32
+ 3.times do
33
+ pi.rotate_left!
34
+ pi.can_be_set?.should eq true
35
+ end
36
+ end
37
+ end
38
+
39
+ it 'can tell if piece can be placed on board or not' do
40
+ pi = Piece.new(@board.board, 0, 0, 0)
41
+ pi.can_be_set?.should eq true
42
+ @board.board[0][0] = 1
43
+ pi.can_be_set?.should eq false
44
+ end
45
+
46
+ it 'can move piece left' do
47
+ pi = Piece.new(@board.board, 4, 4, 0)
48
+ pi.move_left!
49
+ pi.can_be_set?.should eq true
50
+ end
51
+
52
+ it 'can move piece right' do
53
+ pi = Piece.new(@board.board, 4, 4, 0)
54
+ pi.move_right!
55
+ pi.can_be_set?.should eq true
56
+ end
57
+
58
+ it 'can move piece up' do
59
+ pi = Piece.new(@board.board, 4, 4, 0)
60
+ pi.move_up!
61
+ pi.can_be_set?.should eq true
62
+ end
63
+
64
+ it 'can move piece down' do
65
+ pi = Piece.new(@board.board, 4, 4, 0)
66
+ pi.move_down!
67
+ pi.can_be_set?.should eq true
68
+ end
69
+
70
+ it 'can not place piece on full board' do
71
+ @board.board.each_with_index do |row, x|
72
+ row.each_with_index do |val, y|
73
+ @board.board[x][y] = 1
74
+ end
75
+ end
76
+ pi = Piece.new(@board.board, 4, 4, 0)
77
+ pi.can_be_set?.should eq false
78
+ end
79
+
80
+ it 'can not place piece after moving on filled block' do
81
+ @board.board[0][0] = 1
82
+ pi = Piece.new(@board.board, 0, 1, 0)
83
+ pi.can_be_set?.should eq true
84
+ pi.move_left!
85
+ pi.can_be_set?.should eq false
86
+ end
87
+
88
+ it 'can not leave board borders when moving' do
89
+ pi = Piece.new(@board.board, 0, 0, 0)
90
+ pi.can_be_set?.should eq true
91
+ pi.move_left!
92
+ pi.can_be_set?.should eq false
93
+ pi.move_right!
94
+ pi.move_up!
95
+ pi.can_be_set?.should eq false
96
+ end
97
+
98
+ it 'can be set on board' do
99
+ pi = Piece.new(@board.board, 0, 0, 0)
100
+ pi.can_be_set?.should eq true
101
+ @board.board[0][0].should eq 0
102
+ pi.set_on_board
103
+ @board.board[0][0].should_not eq 0
104
+ end
105
+
106
+ it 'can be unset from board' do
107
+ pi = Piece.new(@board.board, 0, 0, 0)
108
+ pi.set_on_board
109
+ @board.board[0][0].should_not eq 0
110
+ pi.unset_on_board
111
+ @board.board[0][0].should eq 0
112
+ end
113
+ end
114
+ end
data/spec/game_spec.rb ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+
5
+ module BTetrisKp
6
+ describe GameState do
7
+ before :each do
8
+ @game = GameState.new(BTetrisWindow.new, 50, 50)
9
+ end
10
+
11
+ it 'can initialize GameState (window state used for playing game)' do
12
+ @game.should(be_an_instance_of GameState)
13
+ end
14
+
15
+ it 'can pause and unpause game' do
16
+ @game.pause!
17
+ @game.paused.should eq true
18
+ @game.pause!
19
+ @game.paused.should eq false
20
+ end
21
+
22
+ it 'can tell if game is over' do
23
+ @game.game_over.should eq false
24
+ @game.insert_garbage!(Const::PNR_VER - 1)
25
+ Const::GAME_SPEED.times { @game.update }
26
+ @game.game_over.should eq true
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require "btetris_kp/constants"
5
+
6
+ module BTetrisKp
7
+ describe MenuItem do
8
+ before :each do
9
+ @window = Gosu::Window.new(800, 600, false)
10
+ font = Gosu::Font.new(@window, Gosu.default_font_name, 10)
11
+ @set = false
12
+ @mi = MenuItem.new(@window, 'TEST MENU', 0, lambda { @set = true }, font, 50, 50)
13
+ end
14
+
15
+ it 'can initialize MenuItem' do
16
+ @mi.should(be_an_instance_of MenuItem)
17
+ end
18
+
19
+ it 'can tell if mouse is over' do
20
+ @window.mouse_x, @window.mouse_y = 0, 0
21
+ @mi.mouse_over?.should eq false
22
+ @window.mouse_x, @window.mouse_y = 0, 100
23
+ @mi.mouse_over?.should eq false
24
+ @window.mouse_x, @window.mouse_y = 400, 0
25
+ @mi.mouse_over?.should eq false
26
+ @window.mouse_x, @window.mouse_y = 400, 100
27
+ @mi.mouse_over?.should eq false
28
+ @window.mouse_x, @window.mouse_y = 55, 55
29
+ @mi.mouse_over?.should eq true
30
+ end
31
+
32
+ it 'can call procedure when clicked' do
33
+ @window.mouse_x, @window.mouse_y = 55, 55
34
+ @mi.clicked
35
+ @set.should eq true
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require "btetris_kp/gui/textfield"
5
+
6
+ module BTetrisKp
7
+ describe TextField do
8
+ before :each do
9
+ window = Gosu::Window.new(800, 600, false)
10
+ font = Gosu::Font.new(window, Gosu.default_font_name, 10)
11
+ @tf = TextField.new(window, font, 50, 50, '12345', /[^0-9]/, 100, 9)
12
+ end
13
+
14
+ it 'can initialize TextField' do
15
+ @tf.should(be_an_instance_of TextField)
16
+ end
17
+
18
+ it 'can filter text' do
19
+ @tf.filter('ah0j').should eq '0'
20
+ end
21
+
22
+ it 'can tell if mouse is over' do
23
+ @tf.mouse_over?(0,0).should eq false
24
+ @tf.mouse_over?(0,100).should eq false
25
+ @tf.mouse_over?(300,0).should eq false
26
+ @tf.mouse_over?(300,100).should eq false
27
+ @tf.mouse_over?(55,55).should eq true
28
+ end
29
+
30
+ it 'can set caret position depending on mouse click' do
31
+ @tf.move_caret(50)
32
+ @tf.caret_pos.should eq 0
33
+ end
34
+ end
35
+ end
data/spec/menu_spec.rb ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require "btetris_kp/btetris"
5
+
6
+ module BTetrisKp
7
+ describe MenuState do
8
+ before :each do
9
+ @ms = MenuState.new(BTetrisWindow.new)
10
+ end
11
+
12
+ it 'can initialize MenuState (window state used for main menu of the game)' do
13
+ @ms.should(be_an_instance_of MenuState)
14
+ end
15
+
16
+ it 'can generate background board' do
17
+ @ms.generate_back_board.should(be_an_instance_of Array)
18
+ end
19
+
20
+ it 'can generate menu' do
21
+ @ms.generate_menu.should(be_an_instance_of Array)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+
5
+ module BTetrisKp
6
+ # class used for testing socket connection messages
7
+ class TestSocket
8
+ attr_accessor :msg
9
+
10
+ def initialize(msg)
11
+ @msg = msg
12
+ end
13
+
14
+ def sendmsg_nonblock(s)
15
+ @msg = s
16
+ end
17
+
18
+ def recv_nonblock(cnt)
19
+ @msg
20
+ end
21
+ end
22
+
23
+ describe NetGameState do
24
+ it 'can initialize NetGameState (window state used for playing net game)' do
25
+ ng = NetGameState.new(BTetrisWindow.new, nil)
26
+ ng.should(be_an_instance_of NetGameState)
27
+ end
28
+
29
+ it 'can send pause message' do
30
+ s = TestSocket.new('')
31
+ ng = NetGameState.new(BTetrisWindow.new, s)
32
+ ng.send_msg(Const::MSG_PAUSE)
33
+ s.msg.should eq Const::MSG_PAUSE
34
+ end
35
+
36
+ it 'can send game over message' do
37
+ s = TestSocket.new('')
38
+ ng = NetGameState.new(BTetrisWindow.new, s)
39
+ ng.send_msg(Const::MSG_GAME_OVER)
40
+ s.msg.should eq Const::MSG_GAME_OVER
41
+ end
42
+
43
+ it 'can send message with board update' do
44
+ s = TestSocket.new('')
45
+ ng = NetGameState.new(BTetrisWindow.new, s)
46
+ ng.send_msg(Const::MSG_BOARD)
47
+ m = s.msg.split(":")
48
+ m[0].should eq Const::MSG_BOARD
49
+ b = Board.new(BTetrisWindow.new, 20, 20)
50
+ m[1].size.should eq Const::PNR_VER * Const::PNR_HOR
51
+ (m[1] =~ /^[0-9]+$/).should eq 0
52
+ end
53
+
54
+ it 'can send garbage message' do
55
+ s = TestSocket.new('')
56
+ ng = NetGameState.new(BTetrisWindow.new, s)
57
+ ng.send_msg(Const::MSG_GARBAGE)
58
+ m = s.msg.split(":")
59
+ m[0].should eq Const::MSG_GARBAGE
60
+ m[1].to_i.should eq 0
61
+ end
62
+
63
+ it 'can correctly interpret incoming message type' do
64
+ s = TestSocket.new(Const::MSG_PAUSE)
65
+ ng = NetGameState.new(BTetrisWindow.new, s)
66
+ ng.check_msg.should eq Const::MSG_PAUSE
67
+ s.msg = Const::MSG_GAME_OVER
68
+ ng.check_msg.should eq Const::MSG_GAME_OVER
69
+ s.msg = Const::MSG_BOARD
70
+ ng.check_msg.should eq Const::MSG_BOARD
71
+ s.msg = Const::MSG_GARBAGE
72
+ ng.check_msg.should eq Const::MSG_GARBAGE
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+
5
+ module BTetrisKp
6
+ describe NetJoinState do
7
+ before :each do
8
+ @nj = NetJoinState.new(BTetrisWindow.new)
9
+ end
10
+
11
+ it 'can initialize NetJoinState (window state used for joining net game)' do
12
+ @nj.should(be_an_instance_of NetJoinState)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+
5
+ module BTetrisKp
6
+ describe NetSetupState do
7
+ before :each do
8
+ @window = Gosu::Window.new(800, 600, false)
9
+ @nj = NetSetupState.new(@window)
10
+ end
11
+
12
+ it 'can initialize NetSetupState (window state used for creating net game)' do
13
+ @nj.should(be_an_instance_of NetSetupState)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ RSpec.configure do |config|
4
+ config.color_enabled = true
5
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: btetris_kp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Pavel Kocka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-05 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.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '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.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.14'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '2.14'
69
+ description: Battle Tetris
70
+ email:
71
+ - kockapav@gmail.com
72
+ executables:
73
+ - btetris_kp
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - Gemfile
79
+ - LICENSE.txt
80
+ - README.md
81
+ - Rakefile
82
+ - bin/btetris_kp
83
+ - btetris_kp.gemspec
84
+ - lib/btetris_kp.rb
85
+ - lib/btetris_kp/btetris.rb
86
+ - lib/btetris_kp/constants.rb
87
+ - lib/btetris_kp/core/board.rb
88
+ - lib/btetris_kp/core/piece.rb
89
+ - lib/btetris_kp/game.rb
90
+ - lib/btetris_kp/gui/menuitem.rb
91
+ - lib/btetris_kp/gui/textfield.rb
92
+ - lib/btetris_kp/menu.rb
93
+ - lib/btetris_kp/netgame.rb
94
+ - lib/btetris_kp/netjoin.rb
95
+ - lib/btetris_kp/netsetup.rb
96
+ - lib/btetris_kp/version.rb
97
+ - media/drop.ogg
98
+ - media/pop.ogg
99
+ - media/rotate.ogg
100
+ - media/title.png
101
+ - spec/btetris_spec.rb
102
+ - spec/core/board_spec.rb
103
+ - spec/core/piece_spec.rb
104
+ - spec/game_spec.rb
105
+ - spec/gui/menuitem_spec.rb
106
+ - spec/gui/textfield_spec.rb
107
+ - spec/menu_spec.rb
108
+ - spec/netgame_spec.rb
109
+ - spec/netjoin_spec.rb
110
+ - spec/netsetup_spec.rb
111
+ - spec/spec_helper.rb
112
+ homepage: https://github.com/kockapav/btetris_kp
113
+ licenses:
114
+ - MIT
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 2.2.1
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: Tetris for 2 players via lan
136
+ test_files:
137
+ - spec/btetris_spec.rb
138
+ - spec/core/board_spec.rb
139
+ - spec/core/piece_spec.rb
140
+ - spec/game_spec.rb
141
+ - spec/gui/menuitem_spec.rb
142
+ - spec/gui/textfield_spec.rb
143
+ - spec/menu_spec.rb
144
+ - spec/netgame_spec.rb
145
+ - spec/netjoin_spec.rb
146
+ - spec/netsetup_spec.rb
147
+ - spec/spec_helper.rb