File: tetrixpiece.rb

package info (click to toggle)
qtruby 4%3A4.8.4-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 4,564 kB
  • sloc: ruby: 24,603; cpp: 23,004; makefile: 63; sh: 8
file content (135 lines) | stat: -rw-r--r-- 3,608 bytes parent folder | download | duplicates (6)
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
=begin
**
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
**
** This file is part of the example classes of the Qt Toolkit.
**
** This file may be used under the terms of the GNU General Public
** License version 2.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file.  Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
** http://www.trolltech.com/products/qt/opensource.html
**
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://www.trolltech.com/products/qt/licensing.html or contact the
** sales department at sales@trolltech.com.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**

** Translated to QtRuby by Richard Dale
=end
    
class TetrixPiece
    
    NoShape = 0
    ZShape = 1
    SShape = 2
    LineShape = 3
    TShape = 4
    SquareShape = 5
    LShape = 6
    MirroredLShape = 7
    
    def initialize()
        @coordsTable = [
            [ [ 0, 0 ],   [ 0, 0 ],   [ 0, 0 ],   [ 0, 0 ] ],
            [ [ 0, -1 ],  [ 0, 0 ],   [ -1, 0 ],  [ -1, 1 ] ],
            [ [ 0, -1 ],  [ 0, 0 ],   [ 1, 0 ],   [ 1, 1 ] ],
            [ [ 0, -1 ],  [ 0, 0 ],   [ 0, 1 ],   [ 0, 2 ] ],
            [ [ -1, 0 ],  [ 0, 0 ],   [ 1, 0 ],   [ 0, 1 ] ],
            [ [ 0, 0 ],   [ 1, 0 ],   [ 0, 1 ],   [ 1, 1 ] ],
            [ [ -1, -1 ], [ 0, -1 ],  [ 0, 0 ],   [ 0, 1 ] ],
            [ [ 1, -1 ],  [ 0, -1 ],  [ 0, 0 ],   [ 0, 1 ] ] ]
        @coords = [[0, 0], [0, 0], [0, 0], [0, 0]]

        self.shape = NoShape
    end

    def shape() return @pieceShape end
    def x(index) return @coords[index][0] end
    def y(index) return @coords[index][1] end

    def setX(index, x) @coords[index][0] = x end
    def setY(index, y) @coords[index][1] = y end
    
    def setRandomShape()
        self.shape = Kernel.rand(7) + 1
    end
    
    def shape=(shape)
        (0...4).each do |i|
            (0...2).each do |j|
                @coords[i][j] = @coordsTable[shape][i][j]
            end
        end
        @pieceShape = shape
    end
    
    def pieceShape=(shape)
        @pieceShape = shape
    end

    def minX()
        min = @coords[0][0]
        (1...4).each do |i|
            min = [min, @coords[i][0]].min
        end
        return min
    end
    
    def maxX()
        max = @coords[0][0]
        (1...4).each do |i|
            max = [max, @coords[i][0]].max
        end
        return max
    end
    
    def minY()
        min = @coords[0][1]
        (1...4).each do |i|
            min = [min, @coords[i][1]].min
        end
        return min
    end
    
    def maxY()
        max = @coords[0][1]
        (1...4).each do |i|
            max = [max, @coords[i][1]].max
        end
        return max
    end
    
    def rotatedLeft()
        if @pieceShape == SquareShape
            return self
        end
    
        result = TetrixPiece.new
        result.pieceShape = @pieceShape
        (0...4).each do |i|
            result.setX(i, y(i))
            result.setY(i, -x(i))
        end
        return result
    end
    
    def rotatedRight()
        if @pieceShape == SquareShape
            return self
        end
    
        result = TetrixPiece.new
        result.pieceShape = @pieceShape
        (0...4).each do |i|
            result.setX(i, -y(i))
            result.setY(i, x(i))
        end
        return result
    end
end