-
Notifications
You must be signed in to change notification settings - Fork 0
/
piece.go
98 lines (86 loc) · 1.77 KB
/
piece.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main
type Piece struct {
blocks [] /*y*/ [] /*x*/ *Block
}
var PieceTri Piece = Piece{
blocks: [][]*Block{
{nil, &Block01, nil},
{nil, &Block01, &Block01},
{nil, &Block01, nil},
},
}
var PieceL1 Piece = Piece{
blocks: [][]*Block{
{nil, &Block02, nil},
{nil, &Block02, nil},
{nil, &Block02, &Block02},
},
}
var PieceL2 Piece = Piece{
blocks: [][]*Block{
{nil, &Block02, nil},
{nil, &Block02, nil},
{&Block02, &Block02, nil},
},
}
var PieceZ1 Piece = Piece{
blocks: [][]*Block{
{&Block02, nil, nil},
{&Block02, &Block02, nil},
{nil, &Block02, nil},
},
}
var PieceZ2 Piece = Piece{
blocks: [][]*Block{
{nil, nil, &Block02},
{nil, &Block02, &Block02},
{nil, &Block02, nil},
},
}
var PieceCube Piece = Piece{
blocks: [][]*Block{
{&Block03, &Block03},
{&Block03, &Block03},
},
}
var PieceBar Piece = Piece{
blocks: [][]*Block{
{nil, &Block04, nil, nil},
{nil, &Block04, nil, nil},
{nil, &Block04, nil, nil},
{nil, &Block04, nil, nil},
},
}
func (piece *Piece) GetBlocks() [][]*Block {
return piece.blocks
}
func (piece *Piece) GetSize() uint {
return uint(len(piece.blocks))
}
/*
** Assuming piece's shapes are square.
*/
func (piece *Piece) RotateRight() {
var result [][]*Block
var size uint = piece.GetSize()
result = make([][]*Block, size)
for y := uint(0); y < size; y++ {
result[y] = make([]*Block, size)
for x := uint(0); x < size; x++ {
result[y][x] = piece.blocks[size-x-1][y]
}
}
piece.blocks = result
}
func (piece *Piece) RotateLeft() {
var result [][]*Block
var size uint = piece.GetSize()
result = make([][]*Block, size)
for y := uint(0); y < size; y++ {
result[y] = make([]*Block, size)
for x := uint(0); x < size; x++ {
result[y][x] = piece.blocks[x][size-y-1]
}
}
piece.blocks = result
}