Play my Tic-Tac-Toe game on the netlify page.

2D, 3D, game, games, online game, game development, game engine, programming, OpenGL, Open AI, math, graphics, design, graphic, graphics, game development, game engine, programming, web development, web art, web graphic, arts, tutorial, tutorials,


; mouse_crosshair.asm
format PE GUI 4.0
entry start
include "win32a.inc"
WM_MOUSEMOVE = 0x0200
section '.data' data readable writeable
szClass db "MouseGraph",0
szTitle db "Mouse Crosshair Demo",0
mouseX dd 0
mouseY dd 0
fmt db "X=%d Y=%d",0
buffer db 64 dup(0)
rc RECT
ps PAINTSTRUCT
wc WNDCLASSEX
msg MSG
section '.code' code readable executable
start:
invoke GetModuleHandle,0
mov [wc.hInstance],eax
mov [wc.cbSize],sizeof.WNDCLASSEX
mov [wc.style],CS_HREDRAW or CS_VREDRAW
mov [wc.lpfnWndProc],WndProc
mov [wc.cbClsExtra],0
mov [wc.cbWndExtra],0
mov [wc.hIcon],0
mov [wc.hIconSm],0
mov [wc.lpszMenuName],0
mov [wc.lpszClassName],szClass
mov [wc.hbrBackground],COLOR_WINDOW+1
invoke LoadCursor,0,IDC_ARROW
mov [wc.hCursor],eax
invoke RegisterClassEx,wc
invoke CreateWindowEx,0,szClass,szTitle,\
WS_VISIBLE+WS_OVERLAPPEDWINDOW,\
200,200,800,600,0,0,[wc.hInstance],0
msg_loop:
invoke GetMessage,msg,0,0,0
test eax,eax
jz exit
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
exit:
invoke ExitProcess,0
; ---------------------------------------------------------
proc WndProc hWnd,uMsg,wParam,lParam
cmp [uMsg],WM_MOUSEMOVE
je .mouse
cmp [uMsg],WM_PAINT
je .paint
cmp [uMsg],WM_DESTROY
je .destroy
.def:
invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
ret
; ---------------- WM_MOUSEMOVE ----------------
.mouse:
mov eax,[lParam]
and eax,0FFFFh
mov [mouseX],eax
mov eax,[lParam]
shr eax,16
and eax,0FFFFh
mov [mouseY],eax
invoke InvalidateRect,[hWnd],0,TRUE
ret
; ---------------- WM_PAINT ----------------
.paint:
invoke BeginPaint,[hWnd],ps
mov esi,eax ; hdc
; clean client
invoke GetClientRect,[hWnd],rc
invoke FillRect,esi,rc,COLOR_WINDOW+1
; pen red
invoke CreatePen,PS_SOLID,1,0x0000FF
mov ebx,eax
invoke SelectObject,esi,ebx
; ---------------- linie verticala (cruce) ----------------
mov eax,[mouseX] ; X constant
mov edx,[rc.bottom] ; Y max (jos)
invoke MoveToEx,esi,eax,0,0
invoke LineTo,esi,eax,edx
; ---------------- line ----------------
mov eax,[mouseY] ; Y constant
mov edx,[rc.right] ; X max (dreapta)
invoke MoveToEx,esi,0,eax,0
invoke LineTo,esi,edx,eax
; punct în intersec?ie
mov eax,[mouseX]
mov edx,[mouseY]
invoke Ellipse,esi,eax-4,edx-4,eax+4,edx+4
; text coordonate
invoke wsprintf,buffer,fmt,[mouseX],[mouseY]
invoke lstrlen,buffer
invoke TextOut,esi,10,10,buffer,eax
invoke EndPaint,[hWnd],ps
ret
; ---------------- WM_DESTROY ----------------
.destroy:
invoke PostQuitMessage,0
ret
endp
section '.idata' import data readable
library kernel32,"KERNEL32.DLL",\
user32,"USER32.DLL",\
gdi32,"GDI32.DLL"
include "api/kernel32.inc"
include "api/user32.inc"
include "api/gdi32.inc"

