mirror of
https://github.com/mariiaan/Bugtris.git
synced 2026-05-14 10:11:20 +02:00
Restructure project
This commit is contained in:
@@ -128,15 +128,13 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EntryPointSymbol>main</EntryPointSymbol>
|
||||||
</Link>
|
</Link>
|
||||||
<MASM />
|
<MASM />
|
||||||
<MASM />
|
<MASM />
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="main.asm" />
|
<MASM Include="app.asm" />
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<MASM Include="main2.asm" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
|||||||
@@ -15,12 +15,7 @@
|
|||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="main.asm">
|
<MASM Include="app.asm">
|
||||||
<Filter>Quelldateien</Filter>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<MASM Include="main2.asm">
|
|
||||||
<Filter>Quelldateien</Filter>
|
<Filter>Quelldateien</Filter>
|
||||||
</MASM>
|
</MASM>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ GetClientRect PROTO
|
|||||||
GetTickCount PROTO
|
GetTickCount PROTO
|
||||||
PlaySoundA PROTO
|
PlaySoundA PROTO
|
||||||
Sleep PROTO
|
Sleep PROTO
|
||||||
|
MessageBoxA PROTO
|
||||||
|
KillTimer PROTO
|
||||||
|
|
||||||
RECT struct
|
RECT struct
|
||||||
left dd ?
|
left dd ?
|
||||||
@@ -51,12 +53,15 @@ RECT ends
|
|||||||
myClassName db "TestKlasse", 0
|
myClassName db "TestKlasse", 0
|
||||||
myWindowTitle db "Tetris", 0
|
myWindowTitle db "Tetris", 0
|
||||||
|
|
||||||
GRID_SIZE_X EQU 20
|
GRID_SIZE_X EQU 30
|
||||||
GRID_SIZE_Y EQU 30
|
GRID_SIZE_Y EQU 40
|
||||||
BLOCK_PIXEL_LENGTH EQU 24
|
BLOCK_PIXEL_LENGTH EQU 25
|
||||||
|
|
||||||
GRID_NUM_ELEMENTS EQU GRID_SIZE_X * GRID_SIZE_Y
|
GRID_NUM_ELEMENTS EQU GRID_SIZE_X * GRID_SIZE_Y
|
||||||
GRID_BYTE_SIZE EQU GRID_NUM_ELEMENTS
|
GRID_BYTE_SIZE EQU GRID_NUM_ELEMENTS
|
||||||
|
StrPoints db "Score: ", 0
|
||||||
|
StrGameOver db "You have lost.",0
|
||||||
|
StrGameOverCaption db "Game Over!",0
|
||||||
|
|
||||||
.const ; Win32 Definitions ---
|
.const ; Win32 Definitions ---
|
||||||
WS_OVERLAPPEDWINDOW EQU 13565952
|
WS_OVERLAPPEDWINDOW EQU 13565952
|
||||||
@@ -65,7 +70,7 @@ RECT ends
|
|||||||
WM_CREATE EQU 1
|
WM_CREATE EQU 1
|
||||||
WM_DESTROY EQU 2
|
WM_DESTROY EQU 2
|
||||||
WM_PAINT EQU 15
|
WM_PAINT EQU 15
|
||||||
WM_TIMER EQU 275
|
WM_TIMER EQU 275
|
||||||
WM_KEYDOWN EQU 256
|
WM_KEYDOWN EQU 256
|
||||||
WM_ERASEBACKGROUND EQU 014h
|
WM_ERASEBACKGROUND EQU 014h
|
||||||
VK_W EQU 110001h
|
VK_W EQU 110001h
|
||||||
@@ -73,18 +78,18 @@ RECT ends
|
|||||||
VK_S EQU 1F0001h
|
VK_S EQU 1F0001h
|
||||||
VK_D EQU 200001h
|
VK_D EQU 200001h
|
||||||
SND_ASYNC EQU 1
|
SND_ASYNC EQU 1
|
||||||
|
|
||||||
; Tetromino shape definitions
|
; Tetromino shape definitions
|
||||||
TETRO_0 db 2, 4, 1, "x x x xx" ; L
|
; width height color data
|
||||||
TETRO_1 db 2, 4, 2, " x x xxx" ; Reverse L
|
TETRO_0 db 2, 3, 1, "x x xx" ; L
|
||||||
TETRO_2 db 2, 2, 3, "xxxx" ; Block
|
TETRO_1 db 2, 3, 2, " x xxx" ; J
|
||||||
TETRO_3 db 4, 1, 4, "xxxx" ; Line
|
TETRO_2 db 2, 2, 3, "xxxx" ; Block
|
||||||
TETRO_4 db 3, 2, 5, " xxxx " ; snake from BL to TR
|
TETRO_3 db 4, 1, 4, "xxxx" ; Line
|
||||||
TETRO_5 db 3, 2, 6, "xx xx" ; snake from TR to BL
|
TETRO_4 db 3, 2, 5, " xxxx " ; S: snake from BL to TR
|
||||||
TETRO_6 db 3, 2, 7, " x xxx" ; penith
|
TETRO_5 db 3, 2, 6, "xx xx" ; Z: from TR to BL
|
||||||
|
TETRO_6 db 3, 2, 7, " x xxx" ; T
|
||||||
|
|
||||||
shapePoolStart:
|
shapePoolStart:
|
||||||
TETRO_SHAPE_POOL dq TETRO_0, TETRO_1, TETRO_2, TETRO_3, TETRO_4, TETRO_5, TETRO_6
|
TETRO_SHAPE_POOL dq TETRO_0, TETRO_1, TETRO_2, TETRO_3, TETRO_4, TETRO_5, TETRO_6, TETRO_3
|
||||||
; Tetromino shape pool
|
; Tetromino shape pool
|
||||||
TETRO_SHAPE_POOL_SIZE EQU ($-shapePoolStart) / 8
|
TETRO_SHAPE_POOL_SIZE EQU ($-shapePoolStart) / 8
|
||||||
colorPoolStart:
|
colorPoolStart:
|
||||||
@@ -110,6 +115,8 @@ RECT ends
|
|||||||
hdc dq ?
|
hdc dq ?
|
||||||
rndSeed dq ?
|
rndSeed dq ?
|
||||||
skipNextGL db ?
|
skipNextGL db ?
|
||||||
|
points dq ?
|
||||||
|
pointsBuf db 12 dup(?)
|
||||||
|
|
||||||
.code ; --------------------------
|
.code ; --------------------------
|
||||||
|
|
||||||
@@ -140,10 +147,12 @@ main PROC
|
|||||||
|
|
||||||
; mov rax, OFFSET TETRO_0
|
; mov rax, OFFSET TETRO_0
|
||||||
;mov qword ptr [TETRO_SHAPE_POOL], rax
|
;mov qword ptr [TETRO_SHAPE_POOL], rax
|
||||||
|
mov byte ptr [pointsBuf], '0'
|
||||||
|
|
||||||
call InitPlayField
|
call InitPlayField
|
||||||
|
|
||||||
call LoadRandomTetromino
|
call LoadRandomTetromino
|
||||||
|
call UpdatePointsString
|
||||||
|
|
||||||
mov rcx, 0
|
mov rcx, 0
|
||||||
mov rdx, 0
|
mov rdx, 0
|
||||||
@@ -152,7 +161,7 @@ main PROC
|
|||||||
mov rdx, 0
|
mov rdx, 0
|
||||||
call GetTetroState
|
call GetTetroState
|
||||||
|
|
||||||
|
mov qword ptr [points], 0
|
||||||
mov byte ptr [playerPosX], 0
|
mov byte ptr [playerPosX], 0
|
||||||
mov byte ptr [playerPosY], 0
|
mov byte ptr [playerPosY], 0
|
||||||
|
|
||||||
@@ -310,6 +319,40 @@ RandomRange PROC
|
|||||||
ret
|
ret
|
||||||
RandomRange ENDP
|
RandomRange ENDP
|
||||||
|
|
||||||
|
; Unsigned integer to string
|
||||||
|
; rsi -> Target string address (must support at least 10 bytes)
|
||||||
|
; rax -> Integer value to be interpreted (32 bit)
|
||||||
|
IntToStr PROC
|
||||||
|
push rax ; Preserve
|
||||||
|
push r9 ; String index
|
||||||
|
push r10 ; Temporary register for digit character
|
||||||
|
push r11 ; Register for divison, holds the base
|
||||||
|
push rdx ; Holds the remainder
|
||||||
|
|
||||||
|
mov r8, 0
|
||||||
|
mov r9, 9 ; We start at the end of the string because little endian
|
||||||
|
mov r11, 10 ; The base we operate in
|
||||||
|
itos_loop:
|
||||||
|
cmp r9, -1 ; Check if we did the whole number (32 bit -> 8 bytes)
|
||||||
|
je itos_ret
|
||||||
|
|
||||||
|
mov rdx, 0
|
||||||
|
idiv r11
|
||||||
|
|
||||||
|
add rdx, '0' ; Convert to ASCII
|
||||||
|
mov byte ptr [rsi + r9], dl ; Move charater into the string
|
||||||
|
dec r9 ; Increase the string index
|
||||||
|
|
||||||
|
jmp itos_loop
|
||||||
|
itos_ret:
|
||||||
|
pop rdx
|
||||||
|
pop r11
|
||||||
|
pop r10
|
||||||
|
pop r9
|
||||||
|
pop rax
|
||||||
|
ret
|
||||||
|
IntToStr ENDP
|
||||||
|
|
||||||
LoadRandomTetromino PROC
|
LoadRandomTetromino PROC
|
||||||
push rcx
|
push rcx
|
||||||
push rdx
|
push rdx
|
||||||
@@ -1048,32 +1091,44 @@ _loop_break:
|
|||||||
MoveAllRowsDown ENDP
|
MoveAllRowsDown ENDP
|
||||||
|
|
||||||
; (in) rcx row to clear
|
; (in) rcx row to clear
|
||||||
ClearRow PROC
|
; ClearRow PROC
|
||||||
push r8
|
; push r8
|
||||||
xor r8, r8
|
; xor r8, r8
|
||||||
_loop:
|
; _loop:
|
||||||
cmp r8, GRID_SIZE_X
|
; cmp r8, GRID_SIZE_X
|
||||||
je _loop_break
|
; je _loop_break
|
||||||
|
;
|
||||||
push rcx
|
; push rcx
|
||||||
push rdx
|
; push rdx
|
||||||
push r8
|
; push r8
|
||||||
mov rdx, rcx
|
; mov rdx, rcx
|
||||||
mov rcx, r8
|
; mov rcx, r8
|
||||||
mov r8, 0
|
; mov r8, 0
|
||||||
call SetFieldState
|
; call SetFieldState
|
||||||
pop r8
|
; pop r8
|
||||||
pop rdx
|
; pop rdx
|
||||||
pop rcx
|
; pop rcx
|
||||||
|
;
|
||||||
inc r8
|
; inc r8
|
||||||
jmp _loop
|
; jmp _loop
|
||||||
|
;
|
||||||
_loop_break:
|
; _loop_break:
|
||||||
pop r8
|
; pop r8
|
||||||
|
;
|
||||||
|
; ret
|
||||||
|
; ClearRow ENDP
|
||||||
|
|
||||||
|
UpdatePointsString PROC
|
||||||
|
push rsi
|
||||||
|
push rax
|
||||||
|
mov rax, qword ptr [points]
|
||||||
|
lea rsi, pointsBuf
|
||||||
|
call IntToStr
|
||||||
|
|
||||||
|
pop rax
|
||||||
|
pop rsi
|
||||||
ret
|
ret
|
||||||
ClearRow ENDP
|
UpdatePointsString ENDP
|
||||||
|
|
||||||
CheckRowClear PROC
|
CheckRowClear PROC
|
||||||
push rcx
|
push rcx
|
||||||
@@ -1090,12 +1145,22 @@ innerloop:
|
|||||||
test rax, rax
|
test rax, rax
|
||||||
jz loop_continue
|
jz loop_continue
|
||||||
inc r8
|
inc r8
|
||||||
call ClearRow
|
;call ClearRow
|
||||||
call MoveAllRowsDown
|
call MoveAllRowsDown
|
||||||
jmp innerloop
|
jmp innerloop
|
||||||
|
|
||||||
loop_continue:
|
loop_continue:
|
||||||
; todo attrib points with combo in r8
|
push rax
|
||||||
|
push rdx
|
||||||
|
mov rax, r8
|
||||||
|
mul rax
|
||||||
|
mov r8, rax
|
||||||
|
pop rdx
|
||||||
|
pop rax
|
||||||
|
|
||||||
|
add qword ptr [points], r8
|
||||||
|
call UpdatePointsString
|
||||||
|
|
||||||
dec rcx
|
dec rcx
|
||||||
jmp _loop
|
jmp _loop
|
||||||
|
|
||||||
@@ -1128,7 +1193,23 @@ GamePaint PROC
|
|||||||
|
|
||||||
call RenderPlayer
|
call RenderPlayer
|
||||||
|
|
||||||
|
sub rsp, 16
|
||||||
|
mov rcx, [hdc]
|
||||||
|
mov rdx, 10
|
||||||
|
mov r8, 10
|
||||||
|
lea r9, OFFSET strPoints
|
||||||
|
mov dword ptr [rsp + 32], 6
|
||||||
|
call TextOutA
|
||||||
|
|
||||||
|
mov rcx, [hdc]
|
||||||
|
mov rdx, 60
|
||||||
|
mov r8, 10
|
||||||
|
lea r9, OFFSET pointsBuf
|
||||||
|
add r9, 5
|
||||||
|
mov dword ptr [rsp + 32], 5
|
||||||
|
call TextOutA
|
||||||
|
|
||||||
|
add rsp, 16
|
||||||
|
|
||||||
mov rcx, [hwndWindow]
|
mov rcx, [hwndWindow]
|
||||||
mov rdx, ps
|
mov rdx, ps
|
||||||
@@ -1319,14 +1400,44 @@ MovePlayerDown PROC
|
|||||||
mov byte ptr [playerPosY], 0
|
mov byte ptr [playerPosY], 0
|
||||||
call LoadRandomTetromino
|
call LoadRandomTetromino
|
||||||
|
|
||||||
|
push r10
|
||||||
decollide_loop:
|
decollide_loop:
|
||||||
|
inc r10
|
||||||
|
cmp r10, 2048
|
||||||
|
jge decollide_gameOver
|
||||||
call IsPlayerJammed
|
call IsPlayerJammed
|
||||||
test rax, rax
|
test rax, rax
|
||||||
jz decollide_break
|
jz decollide_break
|
||||||
dec [playerPosX]
|
dec [playerPosX]
|
||||||
jmp decollide_loop
|
jmp decollide_loop
|
||||||
|
|
||||||
|
decollide_gameOver:
|
||||||
|
push rcx
|
||||||
|
push rdx
|
||||||
|
push r8
|
||||||
|
push r9
|
||||||
|
|
||||||
|
mov rcx, 0
|
||||||
|
mov rdx, 1
|
||||||
|
sub rsp, 32
|
||||||
|
call KillTimer
|
||||||
|
add rsp, 32
|
||||||
|
mov rcx, 0
|
||||||
|
lea rdx, strGameOver
|
||||||
|
lea r8, strGameOverCaption
|
||||||
|
mov r9, 0
|
||||||
|
sub rsp, 32
|
||||||
|
;scall MessageBoxA
|
||||||
|
add rsp, 32
|
||||||
|
mov rcx, 0
|
||||||
|
call ExitProcess
|
||||||
|
pop r9
|
||||||
|
pop r8
|
||||||
|
pop rdx
|
||||||
|
pop rcx
|
||||||
|
|
||||||
decollide_break:
|
decollide_break:
|
||||||
|
pop r10
|
||||||
cleanup:
|
cleanup:
|
||||||
ret
|
ret
|
||||||
MovePlayerDown ENDP
|
MovePlayerDown ENDP
|
||||||
Reference in New Issue
Block a user