.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib
Print proto stdcall:dword
Inkey proto
ReadKey proto
SetXY proto stdcall:dword
OutChar proto stdcall:dword,:dword
.data
Numbers db 1,2,3,8,9,4,7,6,5
Prompt db 'Ваш ход: ',32,32,8,0
Res1 db 'Ничья',32,32,32,32,32,0
Res2 db 'Вы проиграли',0
.data?
hStdOut dd ?
Busy dw ?
V2 dd ?
V7 dd ?
V8 dd ?
.stack 100h
.code
N85685229:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hStdOut,eax
mov ecx,9
mov eax,1
@@:
call CellToNum
or edx,30h
invoke OutChar,edx,eax
inc al
loop @B
mov word ptr Busy,0
invoke OutChar,'X',9
invoke ReadKey
call Turn
test eax,1
jz @F
mov eax,V2
call Turn
dec eax
mov V8,eax
jmp Fail2
@@:
mov eax,V7
call Turn
mov eax,V7
call Turn
dec dword ptr V2
invoke OutChar,'X',V2
invoke SetXY,10002h
invoke Print,addr Res1
Quit:
invoke Inkey
invoke ExitProcess,0
Turn proc
dec eax
jnz @F
mov eax,8
@@:
mov V2,eax
invoke OutChar,'X',eax
invoke ReadKey
mov V7,eax
mov eax,V2
sub eax,4
jz @F
ja Turn2
@@:
add eax,8
Turn2:
mov V8,eax
sub eax,V7
jnz Fail
invoke OutChar,'X',V2
mov eax,V2
ret
Turn endp
Fail:
add esp,4
Fail2:
invoke OutChar,'X',V8
invoke SetXY,10002h
invoke Print,addr Res2
jmp Quit
Print proc param:dword
invoke lstrlenA,param
invoke WriteConsole,hStdOut,param,eax,0,0
ret
Print endp
ReadKey proc
local Key:dword
invoke SetXY,10002h
invoke Print,addr Prompt
@@: invoke crt__getch
mov Key,eax
sub al,'1'
jb @B
cmp al,9
ja @B
mov cl,Numbers[eax]
mov edi,ecx
mov ax,8000h
rol ax,cl
test Busy,ax
jnz @B
invoke crt__putch,Key
mov eax,edi
invoke OutChar,'O',eax
mov eax,edi
ret
ReadKey endp
CellToNum proc
push ecx
lea edi,Numbers
mov ecx,-1
repne scasb
neg ecx
dec ecx
mov edx,ecx
pop ecx
ret
CellToNum endp
SetXY proc param:dword
local XY:COORD
push eax
mov eax,param
mov XY,eax
invoke SetConsoleCursorPosition,hStdOut,dword ptr XY
pop eax
ret
SetXY endp
OutChar proc param1:dword, param2:dword
pusha
mov eax,param2
call CellToNum
mov ax,8000h
mov cl,byte ptr param2
rol ax,cl
or Busy,ax
mov eax,edx
dec eax
cdq
mov bx,3
div bx
shl dx,2
shl eax,17
mov ax,dx
add eax,30003h
invoke SetXY,eax
invoke crt__putch,param1
popa
ret
OutChar endp
Inkey proc
invoke crt__kbhit
test eax,eax
jz Inkey
ret
Inkey endp
end N85685229
