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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 425a26d38d0419d50ff8cb0126faaa1caaf6d1e0
4
+ data.tar.gz: f8f2deaa630c4a9bd247656156d7869aa2725142
5
+ SHA512:
6
+ metadata.gz: ae3785d6fd1403caefa5074b9e10fde7da908ad09338bcdce001e32de21c5e464aa8cd5062d977573c109afa4b386457345286bbd5a222dd1bf6da8b099c1f57
7
+ data.tar.gz: e0eb2eda6ba106b60420ce7ea59a58c0c89f9af787fe8212660c98fa87514bdd912f1f7590bfd3e7b1b4169d5ba92a389dbb3af94aaf9197077e6df20263142d
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ *~
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in btetris_kp.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 TODO: Pavel Kocka
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # BtetrisKp
2
+
3
+ Battle Tetris - tetris game for 2 player via lan
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'btetris_kp'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install btetris_kp
18
+
19
+ ## Usage
20
+
21
+ run btetris_kp
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/btetris_kp ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'btetris_kp/btetris'
4
+
5
+ BTetrisKp::BTetrisWindow.new.show
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'btetris_kp/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "btetris_kp"
8
+ spec.version = BtetrisKp::VERSION
9
+ spec.authors = ["Pavel Kocka"]
10
+ spec.email = ["kockapav@gmail.com"]
11
+ spec.description = %q{Battle Tetris}
12
+ spec.summary = %q{Tetris for 2 players via lan}
13
+ spec.homepage = "https://github.com/kockapav/btetris_kp"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
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.3"
22
+ spec.add_development_dependency "rake", "~> 0"
23
+ spec.add_development_dependency "gosu", "~> 0.7"
24
+ spec.add_development_dependency "rspec", "~> 2.14"
25
+ end
@@ -0,0 +1,37 @@
1
+ require 'gosu'
2
+ require 'btetris_kp/menu'
3
+ require 'btetris_kp/constants'
4
+
5
+ module BTetrisKp
6
+ # Main class maintaining game window,
7
+ # drawing, updating and reacting to key events
8
+ class BTetrisWindow < Gosu::Window
9
+ attr_accessor :state
10
+
11
+ def initialize
12
+ super(Const::GAME_WIDTH, Const::GAME_HEIGHT, false)
13
+ self.caption = Const::GAME_CAPTION
14
+ @state = MenuState.new(self)
15
+ end
16
+
17
+ # propagates update event to current window state
18
+ def update
19
+ @state.update
20
+ end
21
+
22
+ # propagates draw event to current window state
23
+ def draw
24
+ @state.draw
25
+ end
26
+
27
+ # propagates button_down event to current window state
28
+ def button_down(id)
29
+ @state.button_down(id)
30
+ end
31
+
32
+ # shows or hides default system cursor depending on state
33
+ def needs_cursor?
34
+ @state.needs_cursor?
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,197 @@
1
+ module BTetrisKp
2
+ # module with constants, colors, tile shapes
3
+ module Const
4
+ # Game window Const
5
+ GAME_WIDTH = 800
6
+ GAME_HEIGHT = 600
7
+ GAME_CAPTION = 'Battle tetris'
8
+ PAUSE_CAPTION = 'Paused!'
9
+ GAME_OVER_CAPTION = 'Game over!'
10
+ GAME_WON_CAPTION = 'You WIN!'
11
+ GAME_LOST_CAPTION = 'You LOOSE!'
12
+
13
+ # File paths
14
+ PATH = File.dirname(File.expand_path(__FILE__))
15
+ PATH_IMAGE_TITLE = File.join(PATH, '../../media/title.png')
16
+ PATH_SND_DROP = File.join(PATH, '../../media/drop.ogg')
17
+ PATH_SND_POP = File.join(PATH, '../../media/pop.ogg')
18
+ PATH_SND_ROTATE = File.join(PATH, '../../media/rotate.ogg')
19
+
20
+ # Menu item captions
21
+ MENU_NEW = 'New game'
22
+ MENU_CREATE = 'Create net game'
23
+ MENU_JOIN = 'Join net game'
24
+ MENU_QUIT = 'Quit'
25
+
26
+ # Net captions
27
+ IP_CAPTION = 'IP:'
28
+ PORT_CAPTION = 'Port:'
29
+ CONNECTING = 'Connecting...'
30
+ DEF_IP = '127.0.0.1'
31
+ DEF_PORT = ''
32
+ SERVER_WAIT = 'Waiting for client to connect...'
33
+ SERVER_PORT = 'Used port: '
34
+
35
+ # Game Const
36
+ GAME_SPEED = 60
37
+ DROP_SPEED = 5
38
+ TURN_SPEED = 8
39
+ GAME_WON = 1
40
+ GAME_LOST = -1
41
+ GAME_ON = 0
42
+
43
+ # Size of board in pieces
44
+ PNR_HOR = 10
45
+ PNR_VER = 20
46
+
47
+ # TextInput Const
48
+ BORDER_GAP = 5
49
+
50
+ # Network Const
51
+ GOT_NO_MESSAGE = '0'
52
+ MSG_PAUSE = '1'
53
+ MSG_GAME_OVER = '2'
54
+ MSG_BOARD = '3'
55
+ MSG_GARBAGE = '4'
56
+ MSG_WELCOME = '5'
57
+
58
+ # Color Const
59
+ BOARD_BACK_CLR = Gosu::Color.new(0xFF101010)
60
+ BOARD_CLR = Gosu::Color.new(0xFFB8B8B8)
61
+ CARET_CLR = Gosu::Color.new(0xFFFFFFFF)
62
+ MENU_ITEM_CLR = Gosu::Color.new(0xFFFFFFFF)
63
+ MENU_ITEM_MO_CLR = Gosu::Color.new(0xFFCCFF33)
64
+ # NR of colors shouldnt be higher then 9, (board#from_s)
65
+ TILE_COLORS_NR = 8
66
+ TILE_COLORS = [0,
67
+ Gosu::Color.new(0xFFC80000),
68
+ Gosu::Color.new(0xFF0000CC),
69
+ Gosu::Color.new(0xFF990066),
70
+ Gosu::Color.new(0xFF99FF00),
71
+ Gosu::Color.new(0xFFCCFF00),
72
+ Gosu::Color.new(0xFFFF6600),
73
+ Gosu::Color.new(0xFF00FF99),
74
+ Gosu::Color.new(0xFFFFFF00)]
75
+ TILE_BRIGHT_CLR = [0,
76
+ Gosu::Color.new(0xFFE00000),
77
+ Gosu::Color.new(0xFF0033CC),
78
+ Gosu::Color.new(0xFF990099),
79
+ Gosu::Color.new(0xFF99FF33),
80
+ Gosu::Color.new(0xFFCCFF33),
81
+ Gosu::Color.new(0xFFFF6633),
82
+ Gosu::Color.new(0xFF00FFCC),
83
+ Gosu::Color.new(0xFFFFFF33)]
84
+ TILE_SHADOW_CLR = [0,
85
+ Gosu::Color.new(0xFF700000),
86
+ Gosu::Color.new(0xFF000099),
87
+ Gosu::Color.new(0xFF990033),
88
+ Gosu::Color.new(0xFF99CC00),
89
+ Gosu::Color.new(0xFFCCCC00),
90
+ Gosu::Color.new(0xFFFF3300),
91
+ Gosu::Color.new(0xFF00CC99),
92
+ Gosu::Color.new(0xFFFFCC00)]
93
+
94
+ TILES =
95
+ [
96
+ [
97
+ [
98
+ [1, 1],
99
+ [1, 1]
100
+ ]
101
+ ],
102
+ [
103
+ [
104
+ [1, 1, 1],
105
+ [0, 1, 0]
106
+ ],
107
+ [
108
+ [0, 1],
109
+ [1, 1],
110
+ [0, 1]
111
+ ],
112
+ [
113
+ [0, 1, 0],
114
+ [1, 1, 1]
115
+ ],
116
+ [
117
+ [1, 0],
118
+ [1, 1],
119
+ [1, 0]
120
+ ]
121
+ ],
122
+ [
123
+ [
124
+ [1, 1, 0],
125
+ [0, 1, 1]
126
+ ],
127
+ [
128
+ [0, 1],
129
+ [1, 1],
130
+ [1, 0]
131
+ ]
132
+ ],
133
+ [
134
+ [
135
+ [0, 1, 1],
136
+ [1, 1, 0]
137
+ ],
138
+ [
139
+ [1, 0],
140
+ [1, 1],
141
+ [0, 1]
142
+ ]
143
+ ],
144
+ [
145
+ [
146
+ [1, 1, 1, 1]
147
+ ],
148
+ [
149
+ [1],
150
+ [1],
151
+ [1],
152
+ [1]
153
+ ]
154
+ ],
155
+ [
156
+ [
157
+ [1, 0, 0],
158
+ [1, 1, 1]
159
+ ],
160
+ [
161
+ [1, 1],
162
+ [1, 0],
163
+ [1, 0]
164
+ ],
165
+ [
166
+ [1, 1, 1],
167
+ [0, 0, 1]
168
+ ],
169
+ [
170
+ [0, 1],
171
+ [0, 1],
172
+ [1, 1]
173
+ ]
174
+ ],
175
+ [
176
+ [
177
+ [0, 0, 1],
178
+ [1, 1, 1]
179
+ ],
180
+ [
181
+ [1, 0],
182
+ [1, 0],
183
+ [1, 1]
184
+ ],
185
+ [
186
+ [1, 1, 1],
187
+ [1, 0, 0]
188
+ ],
189
+ [
190
+ [1, 1],
191
+ [0, 1],
192
+ [0, 1]
193
+ ]
194
+ ]
195
+ ]
196
+ end
197
+ end
@@ -0,0 +1,223 @@
1
+ require 'btetris_kp/menu'
2
+ require 'btetris_kp/core/piece'
3
+
4
+ module BTetrisKp
5
+ # class representing one tetris board
6
+ class Board
7
+ attr_accessor :board, :cur_piece
8
+
9
+ def initialize(window, posx, posy)
10
+ @window = window
11
+ @tile_size = @window.width / 30
12
+
13
+ # board corners position
14
+ @posx = posx
15
+ @posx2 = posx + Const::PNR_HOR * @tile_size
16
+ @posy = posy
17
+ @posy2 = posy + Const::PNR_VER * @tile_size
18
+
19
+ # initializes board array and current piece
20
+ @board = Array.new(Const::PNR_VER) { Array.new(Const::PNR_HOR, 0) }
21
+ @cur_piece = Piece.new(@board, 0, Const::PNR_HOR / 3 + 1, rand(Const::TILES.size))
22
+ end
23
+
24
+ # generates new piece,
25
+ # current piece is set on board and replaced by new one
26
+ def new_piece!
27
+ @cur_piece.set_on_board
28
+ @cur_piece = Piece.new(@board, 0, Const::PNR_HOR / 3 + 1, rand(Const::TILES.size))
29
+ end
30
+
31
+ # checks whether piece can move down
32
+ def piece_stuck?
33
+ @cur_piece.move_down!
34
+ can_be_set = @cur_piece.can_be_set?
35
+ @cur_piece.move_up!
36
+ !can_be_set
37
+ end
38
+
39
+ # moves piece left
40
+ def piece_left!
41
+ @cur_piece.move_left!
42
+ @cur_piece.move_right! unless @cur_piece.can_be_set?
43
+ end
44
+
45
+ # moves piece right
46
+ def piece_right!
47
+ @cur_piece.move_right!
48
+ @cur_piece.move_left! unless @cur_piece.can_be_set?
49
+ end
50
+
51
+ # moves piece down faster
52
+ def piece_down!
53
+ @cur_piece.move_down!
54
+ @cur_piece.move_up! unless @cur_piece.can_be_set?
55
+ end
56
+
57
+ # rotates piece, returns true when successful
58
+ def piece_rotate!
59
+ @cur_piece.rotate_right!
60
+ return true if @cur_piece.can_be_set?
61
+ @cur_piece.rotate_left!
62
+ false
63
+ end
64
+
65
+ # drops peace down as far as possible
66
+ def piece_drop!
67
+ @cur_piece.move_down! while @cur_piece.can_be_set?
68
+ @cur_piece.move_up!
69
+ end
70
+
71
+ # next step of game, returns count of cleared rows
72
+ def next_step!
73
+ cnt = 0
74
+ @cur_piece.move_down!
75
+ unless @cur_piece.can_be_set?
76
+ @cur_piece.move_up!
77
+ new_piece!
78
+ cnt = clear_rows!
79
+ end
80
+ cnt
81
+ end
82
+
83
+ # copies content of one row into another
84
+ # r1 - source row, r2 - destination row
85
+ def copy_row(r1, r2)
86
+ if r1 < 0
87
+ @board[r2].each_with_index { |val, index| @board[r2][index] = 0 }
88
+ else
89
+ @board[r1].each_with_index { |val, index| @board[r2][index] = val }
90
+ end
91
+ end
92
+
93
+ # fills row randomly with blocks and spaces
94
+ # atleast one block has to be empty space
95
+ def fill_row_randomly(index)
96
+ @board[index].each_with_index do |val, x|
97
+ @board[index][x] = rand(Const::TILE_COLORS_NR + 1)
98
+ end
99
+ @board[index][rand(Const::PNR_HOR)] = 0
100
+ end
101
+
102
+ # inserts garbage in board depending on count of cleared rows
103
+ def insert_garbage!(cnt)
104
+ for index in cnt.upto(Const::PNR_VER - 1)
105
+ copy_row(index, index - cnt)
106
+ end
107
+ for index in (Const::PNR_VER - cnt).upto(Const::PNR_VER - 1)
108
+ fill_row_randomly(index)
109
+ end
110
+ end
111
+
112
+ # moves down all rows with smaller index then row_index,
113
+ # removing row at row_index content in the process
114
+ def clear_row!(row_index)
115
+ for index in row_index.downto(0) do
116
+ copy_row(index - 1, index)
117
+ end
118
+ end
119
+
120
+ # clears rows that are full, returns number of cleared rows
121
+ def clear_rows!
122
+ cnt = 0
123
+ @board.each_with_index do |row, index|
124
+ unless row.include?(0)
125
+ clear_row!(index)
126
+ cnt += 1
127
+ end
128
+ end
129
+ cnt
130
+ end
131
+
132
+ # checks if game is over
133
+ def game_over?
134
+ !@cur_piece.can_be_set?
135
+ end
136
+
137
+ # draws board border and background
138
+ def draw_background
139
+ @window.draw_quad(@posx, @posy, Const::BOARD_BACK_CLR,
140
+ @posx2, @posy, Const::BOARD_BACK_CLR,
141
+ @posx, @posy2, Const::BOARD_BACK_CLR,
142
+ @posx2, @posy2, Const::BOARD_BACK_CLR)
143
+ @window.draw_line(@posx - 1, @posy - 1, Const::BOARD_CLR,
144
+ @posx2 + 1, @posy - 1, Const::BOARD_CLR)
145
+ @window.draw_line(@posx2 + 1, @posy - 1, Const::BOARD_CLR,
146
+ @posx2 + 1, @posy2 + 1, Const::BOARD_CLR)
147
+ @window.draw_line(@posx - 1, @posy - 1, Const::BOARD_CLR,
148
+ @posx - 1, @posy2 + 1, Const::BOARD_CLR)
149
+ @window.draw_line(@posx - 1, @posy2 + 1, Const::BOARD_CLR,
150
+ @posx2 + 1, @posy2 + 1, Const::BOARD_CLR)
151
+ end
152
+
153
+ # draws block on board
154
+ def draw_block(x, y, val)
155
+ unless val == 0
156
+ x1 = @posx + x * @tile_size
157
+ x2 = @posx + (x + 1) * @tile_size
158
+ y1 = @posy + y * @tile_size
159
+ y2 = @posy + (y + 1) * @tile_size
160
+
161
+ @window.draw_quad(x1, y1, Const::TILE_COLORS[val],
162
+ x2, y1, Const::TILE_COLORS[val],
163
+ x1, y2, Const::TILE_COLORS[val],
164
+ x2, y2, Const::TILE_COLORS[val])
165
+
166
+ @window.draw_line(x2 - 1, y1 + 1, Const::TILE_SHADOW_CLR[val],
167
+ x2 - 1, y2 - 1, Const::TILE_SHADOW_CLR[val])
168
+ @window.draw_line(x1 + 1 , y2 - 1, Const::TILE_SHADOW_CLR[val],
169
+ x2 - 1, y2 - 1, Const::TILE_SHADOW_CLR[val])
170
+ @window.draw_line(x2, y1, Const::TILE_SHADOW_CLR[val],
171
+ x2, y2, Const::TILE_SHADOW_CLR[val])
172
+ @window.draw_line(x1, y2, Const::TILE_SHADOW_CLR[val],
173
+ x2, y2, Const::TILE_SHADOW_CLR[val])
174
+
175
+ @window.draw_line(x1, y1, Const::TILE_BRIGHT_CLR[val],
176
+ x2, y1, Const::TILE_BRIGHT_CLR[val])
177
+ @window.draw_line(x1, y1, Const::TILE_BRIGHT_CLR[val],
178
+ x1, y2, Const::TILE_BRIGHT_CLR[val])
179
+ @window.draw_line(x1 + 1, y1 + 1, Const::TILE_BRIGHT_CLR[val],
180
+ x2 - 1, y1 + 1, Const::TILE_BRIGHT_CLR[val])
181
+ @window.draw_line(x1 + 1, y1 + 1, Const::TILE_BRIGHT_CLR[val],
182
+ x1 + 1, y2 - 1, Const::TILE_BRIGHT_CLR[val])
183
+ end
184
+ end
185
+
186
+ # draws board and all blocks on it
187
+ def draw
188
+ draw_background
189
+ @cur_piece.set_on_board
190
+ @board.each_with_index do |row, y|
191
+ row.each_with_index do |val, x|
192
+ draw_block(x, y, val)
193
+ end
194
+ end
195
+ @cur_piece.unset_on_board
196
+ end
197
+
198
+ # loads board content from string
199
+ # !!! (expects board to contain only nrs from 0 to 9) !!!
200
+ def from_s!(state)
201
+ @board = state.split('').map { |i| i.to_i }.each_slice(Const::PNR_HOR).to_a
202
+ end
203
+
204
+ # returns string of board with current piece
205
+ def get_board_s
206
+ @cur_piece.set_on_board
207
+ s = to_s
208
+ @cur_piece.unset_on_board
209
+ s
210
+ end
211
+
212
+ # converts board content to string
213
+ def to_s
214
+ s = ''
215
+ @board.each do |row|
216
+ row.each do |val|
217
+ s << val.to_s
218
+ end
219
+ end
220
+ s
221
+ end
222
+ end
223
+ end
@@ -0,0 +1,79 @@
1
+ require 'btetris_kp/constants'
2
+
3
+ module BTetrisKp
4
+ # class representing actual piece in game
5
+ class Piece
6
+ def initialize(board, posx, posy, piece_nr)
7
+ @board = board
8
+ @posx = posx
9
+ @posy = posy
10
+ @nr = piece_nr
11
+ @rot = 0
12
+ @color = rand(Const::TILE_COLORS_NR) + 1
13
+ @piece = Const::TILES[@nr][@rot]
14
+ end
15
+
16
+ # moves piece one block to the left
17
+ def move_left!
18
+ @posy -= 1
19
+ end
20
+
21
+ # moves piece one block to the right
22
+ def move_right!
23
+ @posy += 1
24
+ end
25
+
26
+ # moves piece one block up
27
+ def move_up!
28
+ @posx -= 1
29
+ end
30
+
31
+ # moves piece one block down
32
+ def move_down!
33
+ @posx += 1
34
+ end
35
+
36
+ # rotates piece left
37
+ def rotate_left!
38
+ @rot = (@rot - 1) % Const::TILES[@nr].size
39
+ @piece = Const::TILES[@nr][@rot]
40
+ end
41
+
42
+ # rotates piece right
43
+ def rotate_right!
44
+ @rot = (@rot + 1) % Const::TILES[@nr].size
45
+ @piece = Const::TILES[@nr][@rot]
46
+ end
47
+
48
+ # returns true if there is no collision with peace on board
49
+ def can_be_set?
50
+ return false if @posx < 0 || @posy < 0
51
+ @piece.each_with_index do |row, x|
52
+ row.each_with_index do |val, y|
53
+ return false if @posx + x > Const::PNR_VER - 1 ||
54
+ @posy + y > Const::PNR_HOR - 1
55
+ return false if @board[@posx + x][@posy + y] > 0 && val > 0
56
+ end
57
+ end
58
+ true
59
+ end
60
+
61
+ # sets peace on board
62
+ def set_on_board
63
+ @piece.each_with_index do |row, x|
64
+ row.each_with_index do |val, y|
65
+ @board[@posx + x][@posy + y] = @color if val == 1
66
+ end
67
+ end
68
+ end
69
+
70
+ # unsets peace from board
71
+ def unset_on_board
72
+ @piece.each_with_index do |row, x|
73
+ row.each_with_index do |val, y|
74
+ @board[@posx + x][@posy + y] = 0 if val == 1
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end