Другие языки программирования и технологии

помогите написать программу любой игры в ассемблере с блок-схемой. спасибо

Крестики-нолики, MASM.

.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

Игорь Николаев
Игорь Николаев
51 590
Лучший ответ