Problem with Tetris game I am making

Blitz3D Forums/Blitz3D Beginners Area/Problem with Tetris game I am making

Okay, it seems to be working now.

For anyone who's interested here is the code I came up with. Cursors move and rotate.

Any suggestions on improvements so far welcome.

[CODE]
;;;;;;;;;;;;;;;;;;;;
; ;
; Main starts here ;
; ;
;;;;;;;;;;;;;;;;;;;;

Dim Grid(11,20)
; Cube,Gridx,Gridy,Left,Right,Down,Rotate,Realx,Realy
Dim Block(4,9)

Timer = InitGame()

While Not KeyHit(1)

Frames = WaitTimer(Timer)

For k = 1 To Frames

MoveShape()

UpdateWorld

Next

RenderWorld

Flip

Wend

;;;;;;;;;;;;;;;;;;;;
; ;
; Main ends here ;
; ;
;;;;;;;;;;;;;;;;;;;;


Function InitGame()

Graphics3D 800,600

SetBuffer BackBuffer()

Camera = CreateCamera()
CameraViewport Camera,0,0,GraphicsWidth(),GraphicsHeight()

Light = CreateLight()

For a = 0 To 20 Step 2

x = -10 + a

BottomWall = CreateCube()
PositionEntity BottomWall,x,-20,30

Next

For a = 0 To 40 Step 2

y = 20 - a

LeftWall = CreateCube()
PositionEntity LeftWall,-12,y,30

RightWall = CreateCube()
PositionEntity RightWall,12,y,30

Next

NewShape()

Timer = CreateTimer(5)

Return Timer

End Function



Function NewShape()

SeedRnd = MilliSecs()

ShapeType = Rnd(1,7)

For a = 1 To 4

Block(a,1) = NewBlock(ShapeType,a)

Next

End Function



Function NewBlock(ShapeType,BlockNo)

If BlockNo = 1

aBlock = CreateCube()
PositionEntity aBlock,0,22,30
EntityColor aBlock,150,100,100

Else

aBlock = CreateCube(Block(1,1))
EntityColor aBlock,100,100,100

Select ShapeType
Case 1
Select BlockNo
Case 2
PositionEntity aBlock,0,2,0
Case 3
PositionEntity aBlock,0,4,0
Case 4
PositionEntity aBlock,0,6,0
End Select
Case 2
Select BlockNo
Case 2
PositionEntity aBlock,2,0,0
Case 3
PositionEntity aBlock,0,2,0
Case 4
PositionEntity aBlock,0,4,0
End Select
Case 3
Select BlockNo
Case 2
PositionEntity aBlock,-2,0,0
Case 3
PositionEntity aBlock,0,2,0
Case 4
PositionEntity aBlock,0,4,0
End Select
Case 4
Select BlockNo
Case 2
PositionEntity aBlock,0,2,0
Case 3
PositionEntity aBlock,0,4,0
Case 4
PositionEntity aBlock,2,2,0
End Select
Case 5
Select BlockNo
Case 2
PositionEntity aBlock,0,2,0
Case 3
PositionEntity aBlock,2,2,0
Case 4
PositionEntity aBlock,2,0,0
End Select
Case 6
Select BlockNo
Case 2
PositionEntity aBlock,2,0,0
Case 3
PositionEntity aBlock,2,2,0
Case 4
PositionEntity aBlock,4,2,0
End Select
Case 7
Select BlockNo
Case 2
PositionEntity aBlock,0,2,0
Case 3
PositionEntity aBlock,-2,2,0
Case 4
PositionEntity aBlock,2,0,0
End Select
End Select

End If

Return aBlock

End Function


Function MoveShape()

LBlocked = 0
RBlocked = 0
DBlocked = 0

;Rotate
If KeyHit(200)

TurnEntity Block(1,1),0,0,90

TurnBack = 0

For a = 1 To 4

TranslateToGrid(a)
CheckRotate(a)

If Block(a,7) = 1

TurnBack = 1

End If

Next

If TurnBack = 1

TurnEntity Block(1,1),0,0,-90

End If

End If

;CheckMovement
For a = 1 To 4

TranslateToGrid(a)
CheckMovement(a)

If Block(a,4) = 1

LBlocked = 1

End If

If Block(a,5) = 1

RBlocked = 1

End If

If Block(a,6) = 1

DBlocked = 1

End If

Next

x=0
y=-2

If KeyHit(203)

If Not LBlocked = 1

x = -2

End If

End If

If KeyHit(205)

If Not RBlocked = 1

x = 2

End If

End If

If DBlocked = 1

MoveToGrid()

CheckFull()

NewShape()

Else

TranslateEntity Block(1,1),x,y,0

End If

End Function

Function TranslateToGrid(BlockNo)

x = EntityX(Block(BlockNo,1),True)
y = EntityY(Block(BlockNo,1),True)

a = x/2 + 6
b = y/2 + 10

Block(BlockNo,2) = a
Block(BlockNo,3) = b
Block(BlockNo,8) = x
Block(BlockNo,9) = y

End Function


Function CheckMovement(BlockNo)

Blockx = Block(BlockNo,2)
Blocky = Block(BlockNo,3)

For a = 4 To 6

Block(BlockNo,a) = 0

Next

;CheckLeft

If Blockx = 1

Block(BlockNo,4) = 1

Else

If Blocky <= 20

If Not Grid(Blockx-1,Blocky-1) = 0

Block(BlockNo,4) = 1

End If

End If

End If

;CheckRight

If Blockx = 11

Block(BlockNo,5) = 1

Else

If Blocky <= 20

If Not Grid(Blockx+1,Blocky-1) = 0

Block(BlockNo,5) = 1

End If

End If

End If

;CheckDown

If Blocky = 1

Block(BlockNo,6) = 1

Else

If Blocky <= 21

If Not Grid(Blockx,Blocky-1) = 0

Block(BlockNo,6) = 1

End If

End If

End If

End Function

Function MoveToGrid()

For a = 1 To 4

If Not Block(a,3) > 20

Grid( Block(a,2),Block(a,3) ) = CreateCube()
PositionEntity Grid( Block(a,2),Block(a,3) ),Block(a,8),Block(a,9),30
EntityColor Grid( Block(a,2),Block(a,3) ),100,100,100

Else

GameOver()

End If

Next

FreeEntity Block(1,1)

End Function

Function CheckFull()

For r = 1 To 20

Full = 1

For c = 1 To 11

If Grid(c,r) = 0

Full = 0

End If

Next

If Full = 1

For c = 1 To 11

FreeEntity Grid(c,r)
Grid(c,r) = 0

Next

For s = r + 1 To 20

For c = 1 To 11

If Not Grid(c,s) = 0

TranslateEntity Grid(c,s),0,-2,0

Grid(c,s-1) = Grid(c,s)

Grid(c,s) = 0

End If

Next

Next

CheckFull()

End If

Next

End Function

Function GameOver()

ClearWorld

Stop

End Function

Function CheckRotate(BlockNo)

Blockx = Block(BlockNo,2)
Blocky = Block(BlockNo,3)

Block(BlockNo,7) = 0

If Blockx < 1 Or Blockx > 11 Or Blocky < 2

Block(BlockNo,7) = 1

End If

If Blocky < 20

If Not Grid(Blockx,Blocky) = 0

Block(BlockNo,7) = 1

End If

End If

End Function

[/CODE]