-
Notifications
You must be signed in to change notification settings - Fork 0
/
Tetris_20161215_164544.BAS.bak
141 lines (109 loc) · 5.05 KB
/
Tetris_20161215_164544.BAS.bak
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
136
137
138
139
140
141
' *****************************************************************************************
' PROGRAMA: BLOCKS
' VERSÃO: 1.0
' AUTOR: FÁBIO MOURA DE OLIVEIRA
' DATA: 14/12/2016
' DESCRIÇÃO: ESTE PROGRAMA É UM JOGO DE COMPUTADOR SEMELHANTE AO JOGO CLÁSSICO BLOCKS.
' *****************************************************************************************
#COMPILE EXE
#DIM ALL
#INCLUDE "win32api.inc"
' Nomenclatura do jogo:
' Tabuleiro: É o local onde os blocos são inseridos.
' Célula: Interseção entre linha e coluna do tabuleiro.
' Bloco: Um conjunto de células conectadas a uma outra célula vizinha
' formando um imagem.
' Peça: Região, geralmente, em forma quadrática, em que um bloco reside.
' Constantes do jogo
%CELULAS_POR_LINHA = 50
%CELULAS_POR_COLUNA = 10
%CELULAS_TOTAIS = %CELULAS_POR_LINHA * %CELULAS_POR_COLUNA
%CELULA_LARGURA = 10
%CELULA_ALTURA = 10
%CELULA_COR_BORDA = %RGB_BLACK
%CELULA_COR_PREENCHIMENTO = %RGB_WHITE
%BLOCO_LARGURA = 10
%BLOCO_ALTURA = 10
%BLOCO_LINHAS = 3
%BLOCO_COLUNAS = 3
' Indica as coordenadas do canto superior em pixel.
%TABULEIRO_TOPO = 10
%TABULEIRO_ESQUERDA = 10
%TABULEIRO_COR_DE_FUNDO = %RGB_ROYALBLUE
%TABULEIRO_COR_DA_GRADE = %RGB_WHITE
%TABULEIRO_ESPACO_HORIZONTAL_ENTRE_CELULAS = 5
%TABULEIRO_ESPACO_VERTICAL_ENTRE_CELULAS = 5
%JOGO_LARGURA = 700
%JOGO_ALTURA = 700
type celulaPeca
celulas(1 to %BLOCO_LINHAS, 1 to %BLOCO_COLUNAS) as long
celulaCorPreenchimento as long
end type
' Vamos guarda as informações pertinentes a uma única célula.
type celulaTabuleiro
X_Superior_Esquerda as long ' Posição X do canto superior esquerdo da célula.
Y_Superior_Esquerda as long ' Posição Y do canto superior esquerdo da célula.
X_Inferior_Direita as long ' Posicao X do canto inferior direito da célula.
Y_Inferior_Direita as long ' Posicao Y do canto inferior direito da célula.
celulaStatus as long ' Indica se a célula já está ocupada: 0, significa não ocupada
celulaCorPreenchimento as long ' Se a célula está ocupada, indica a cor do preenchimento.
end type
FUNCTION PBMAIN () AS LONG
dim tabuleiro (1 to %CELULAS_POR_LINHA, 1 TO %CELULAS_POR_COLUNA) as celulaTabuleiro
' Cria 5 peças.
Dim pecas(1 to 5) as celulaPeca
'
local janelaBloco as long, bitmapbloco as long
graphic window new "Blocks v1.0 - Autor Fábio Moura", 0, 0, %JOGO_LARGURA, %JOGO_ALTURA to janelaBloco
Graphic bitmap new 500, 500 to bitmapBloco
' Anexa contexto gráfico.
graphic attach janelaBloco, 0, redraw
do
TabuleiroDesenhar()
loop while asc(graphic$(INKEY$)) <> 27
END FUNCTION
' ********************************************************
' Desenha o tabuleiro do jogo
' A posição onde o tabuleiro é posicionado
' é definido pelas constantes:
' %TABULEIRO_TOPO e %TABULEIRO_ESQUERDA
' ********************************************************
sub TabuleiroDesenhar()
local linha, coluna as long
local celulaXSuperiorEsquerda as long
local celulaYSuperiorEsquerda as long
local celulaXInferiorDireita as long
local celulaYInferiorDireita as long
' Define as coordenadas iniciais.
celulaXSuperiorEsquerda = %TABULEIRO_ESQUERDA
celulaYSuperiorEsquerda = %TABULEIRO_TOPO
celulaXInferiorDireita = celulaXSuperiorEsquerda + %CELULA_LARGURA
celulaYInferiorDireita = celulaYSuperiorEsquerda + %CELULA_ALTURA
' Desenhar células.
for linha = 1 to %CELULAS_POR_LINHA
FOR coluna = 1 to %CELULAS_POR_COLUNA
GRAPHIC BOx (celulaXSuperiorEsquerda, celulaYSuperiorEsquerda) - _
(celulaXInferiorDireita, celulaYInferiorDireita), , %CELULA_COR_BORDA, %CELULA_COR_PREENCHIMENTO
' Indica onde a próxima célula na horizontal, será desenhada.
celulaXSuperiorEsquerda = celulaXSuperiorEsquerda + %CELULA_LARGURA + %TABULEIRO_ESPACO_HORIZONTAL_ENTRE_CELULAS
' A posição y da célula superior esquerda e célula inferior direita não precisa ser alterada.
celulaXInferiorDireita = celulaXSuperiorEsquerda + %CELULA_LARGURA
next coluna
' Devemos resetar a posição x do canto superior da célula para a posição x
' do lado esquerdo do tabuleiro.
celulaXSuperiorEsquerda = %TABULEIRO_ESQUERDA
' e a posição x do canto inferior direito da célula será igual
' a soma da posição x do lado esquerdo da célula + a largura da célula
celulaXInferiorDireita = celulaXSuperiorEsquerda + %CELULA_LARGURA
' Como aqui, iremos avançar para a próxima linha, então, devemos calcular a nova posição
' y de onde a célula estará posicionada.
' Há dois posições de y, uma para o canto superior esquerdo e outro para o canto inferior direito.
' A nova posição y da célula será igual a atual posição de y superior esquerda mais
' o espaçamento entre células na vertical no tabuleiro mais a altura da célual
celulaYSuperiorEsquerda = celulaYSuperiorEsquerda + %CELULA_ALTURA + %TABULEIRO_ESPACO_VERTICAL_ENTRE_CELULAS
' A posição y da célula inferior direita será igual a soma da célula 'celulaYSuperiorEsquerda' mais
' a altura da célula.
celulaYInferiorDireita = celulaYSuperiorEsquerda + %CELULA_ALTURA
NEXT linha
GRAPHIC REDRAW
end sub