Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 1802 → Rev 1803

/programs/games/kox/trunk/data.inc
0,0 → 1,66
;#**************************
;#* X.0.X - DATA
;#************************** 21/10/2007
 
macro DATA_SECTION
{
; „€›… Žƒ€ŒŒ›
;-----------------------------------------------------------------------------
lootxt: db 'oops! - Looser...' ; los
text: db 'KOX v0.003 [ESC] - quit' ; winheader string
texts: db 'Congratulations! You are winner.' ; in window win
textend: db 'New' ;button id=200
px: dw 50 ;x,y -
py: dw 50 ; - for x_put/o_put
seed: dd 0 ;rnd
idx: dd 0 ;N cell
;============ X = Y ============= coords of cells
pole: dw 50, 50 ;+0 or - dd 50*65536+50
dw 100, 50 ;+4
dw 150, 50 ;+8
dw 50,100 ;+..
dw 100,100 ;+
dw 150,100 ;
dw 50,150 ;
dw 100,150 ;
dw 150,150 ;
pox: dd 0,0 ;POLE ( 3x3 )= 9 _bytes_: 'x' / 'o' / empty
pox_: db 0 ;9= 8+1
fill: db 0 ;turn counter 0..9
xwin: db 0 ;who is winner 0/1
owin: db 0 ;who is looser 0/1
poxl: dw 0 ;16 bits - x memory
pool: dw 0 ;16 bits - o memory
;----------------------------------------------------------------------------
oxwall: dw 100100100b,0010010010b,0001001001b ;vert.
dw 111000000b,0000111000b,0000000111b ;horiz
dw 100010001b,0001010100b ;diag -winning combinations
prav: ;==== ¯à ¢¨« -ª®¬¡¨­ æ¨¨=====
dw 000000110b,0 ;á¨âã æ¨ï - 室 ¢ á¨âã æ¨¨
dw 000000101b,1
dw 000000011b,2
dw 000110000b,3
dw 000101000b,4
dw 000011000b,5
dw 110000000b,6
dw 101000000b,7
dw 011000000b,8 ;horiz
 
dw 001001000b,0
dw 001000001b,3
dw 000001001b,6
dw 010010000b,1
dw 010000010b,4
dw 000010010b,7
dw 100100000b,2
dw 100000100b,5
dw 000100100b,8 ;vert
 
dw 000010001b,8
dw 100010000b,0
dw 100000001b,4
dw 000010100b,6
dw 001010000b,2
dw 001000100b,4 ;diag
 
}
/programs/games/kox/trunk/kox.asm
0,0 → 1,20
;************************************************
;* X-0-X / Kolibri OS /
;************************** 17/10/2007 **********
include 'main.inc'
include 'data.inc'
include 'macs.inc'
 
BeginProgram
 
SetEventMask 100111b
call rndseed
 
main_loop
 
Subroutines
 
DATA_SECTION
 
EndProgram
 
/programs/games/kox/trunk/kox.txt
0,0 → 1,27
Kox v0.003
----------------
Šà¥á⨪¨-­®«¨ª¨ ¢ ª®¬¬¥­â à¨ïå ­¥ ­ã¦¤ îâáï.
‚ᥠ¨£à «¨? ‚ᯮ¬¨­ ©â¥... - ¯ «ì楬 ­  § ¯®â¥¢è¥¬ á⥪«¥,
¬¥«®¬ ­  ¤®áª¥, ¯ «ª®© ­  á­¥£ã, ­  §¥¬«¥, àã窮©
­  ãப å ¢ ª«¥âç â®© â¥âà ¤¨...
’¥¯¥àì ¨ ¢ Š®«¨¡à¨.
 
–¥«ì ª ¦¤®£® ¨£à®ª  - ¯¥à¢ë¬ ¢ëáâநâì àï¤ ¨§ âà¥å ᢮¨å
䨣ãà (ªà¥á⨪®¢ ¨«¨ ­®«¨ª®¢) å®¤ï ¯®®ç¥à¥¤­® ­  ¯®«¥ 3x3.
Šâ® ¯¥à¢ë© - â®â ¢ë¨£à «.
 
‚ë ¨£à ¥â¥ ªà¥á⨪ ¬¨, ­®«¨ª ¬¨ - ¢ è ᮯ¥à­¨ª, ª®¬¯ìîâ¥à.
Ž­ ¤®áâ â®ç­® 㬥­, 蠭ᮢ ¢ë¨£à âì - ­¥ ®ç¥­ì ¬­®£®.
 
à¨« £ î ¨á室­ë© ⥪áâ ­   áᥬ¡«¥à¥, ¤¥« ©â¥ á ­¨¬ çâ® å®â¨â¥.
Ž­ á«¥£ª  ®¯â¨¬¨§¨à®¢ ­ (¯® à §¬¥àã) ­® १¥à¢ë ¥é¥ ¥áâì.
Œ®¦¥â ¯®å㤥âì ¥é¥ ¡ ©â ­  ¤¢¥áâ¨...
 
Œ®¦­® ¥é¥ ã«ãçè¨âì  «£®à¨â¬ ¨áªãá⢥­­®£® ¨­â¥««¥ªâ 
(§ âª­ãâì ¯®á«¥¤­îî ¤ëàªã, ç⮡ë ìë«  ­¨ç¥©­ ï ᬥàâì)
¢â®àë¬ å®¤®¬ 室¨âì ¢ 㣮« (¯à®¯ã᪠âì ­¥ç¥â­ë© idx)
¥á«¨ ®â¢¥â¨â ¢ ¯à®â¨¢®¯®«®¦­ë© - á­®¢  ¢ 㣮«.
Œ­¥ «¥­¨¢® ¤®¡ ¢«ïâì ­¥áª®«ìª® ¤¥áï⪮¢ ¡ ©â ¨§-§  1 室 .
ˆ â ª ­¥¯«®å® ¢à®¤¥...
 
== 21/10/2007 == board.kolibrios.org
/programs/games/kox/trunk/macs.inc
0,0 → 1,317
;************************************
;******** Œ€ŠŽ‘› *******************
;************************************
;------------------------------------
; constants
;-----------------------梥â:0xRRGGBB
cBLACK = 0x000000 ; ç¥à­ë©
cRED = 0xFF0000 ; ªà á­ë©
cYELLOW = 0xFFFF00 ; ¦¥«âë©
cGREEN = 0x00FF00 ; §¥«¥­ë©
cNAVY = 0x0000FF ; ᨭ¨©
cMAGENTA = 0xFF00FF ; ¬ «¨­®¢ë©
cBLUE = 0x00FFFF ; £®«ã¡®©
cWHITE = 0xFFFFFF ; ¡¥«ë©
cBROWN = 0x554433 ; ª®à¨ç­¥¢ë©
 
;-------------------------------
cMAGENTAl = 0xB800B8 ; magenta light
cVIOLETl = 0xF800F8 ; 䨮«¥â®¢ë© ᢥâ«
 
macro BeginProgram
{
use32
org 0x0
 
db 'MENUET01'
dd 0x01
dd __start
dd __end
dd 0x10000 ;__memory
dd 0x10000 ;__stack
dd 0x0 ; dd __params
dd 0x0
__start:
}
 
macro EndProgram
{
align 32
rb 256
__end:
;org 0x10000
__stack:
__memory:
}
 
 
macro LoopBegin lab,begi
{
push ecx ; ECX->STACK store old
mov ecx,begi
lab:
push ecx ; ECX->STACK counter store
}
 
macro LoopEnd lab,endi
{
pop ecx ;ECX<-STACK counter restore
inc ecx
cmp ecx,endi
jne lab
pop ecx ;ECX<-STACK restore old
}
 
macro SetEventMask mmm
{
mov eax,40
mov ebx,mmm
int 0x40
}
 
macro Subroutines
{
;------------------------------------------------------------------------------
rndseed:
mov eax,26
mov ebx,9
int 0x40
mov dword[seed],eax
ret
rndnext:
mov eax,3
int 0x40
shr eax,16
add eax,dword[seed]
; not eax
ror eax,3
xor eax,0xdeadbeef
mov dword[seed],eax
ret
;============0========== word[px],word[py]
o_put:
mov ax,word[px]
shl eax,16 ;*65536
add eax,35 ;+35
mov ebx,eax ;posX*65536+dX ; [x0] *65536 + [dx]
mov ax,word[py] ;
shl eax,16 ;*65536
add eax,35 ;+35
mov ecx,eax ;posY*65536+dY ; [y0] *65536 + [dy]
mov edx,cB
mov eax,13 ; äã­ªæ¨ï 13 - box
int 0x40 ;BLACK BOX---------------
 
mov ax,word[px]
inc ax ;+1
inc ax ;+1
shl eax,16 ;*65536
add eax,31 ;3 ;+35
mov ebx,eax ;posX*65536+dX ; [x0] *65536 + [dx]
 
mov ax,word[py]
add eax,2
;inc eax
;inc eax
shl eax,16
add eax,31 ;3 ;-2
mov ecx,eax ;posY*65536+dY ; [y0] *65536 + [dy]
mov edx,cW
mov eax,13 ; äã­ªæ¨ï 13 - box
int 0x40 ;WHITE BOX----------
ret
;============X==========
x_put:
;xor eax,eax
mov ax,word[px]
shl eax,16 ;*65536
add ax,word[px]
add eax,35 ;+35
mov ebx,eax ;posX*65536+dX
 
xor eax,eax
mov ax,word[py]
shl eax,16 ;*65536
add ax,word[py]
add eax,35 ;+35
mov ecx,eax ;posX*65536+dX
mov edx,cB
mov eax,38 ; äã­ªæ¨ï 38 - line \
int 0x40
;------------------------------xx
xor eax,eax
mov ax,word[px]
inc eax
shl eax,16 ;*65536
add ax,word[px]
add eax,36 ;+35+1
mov ebx,eax ;posX*65536+dX
xor eax,eax
mov ax,word[py]
shl eax,16 ;*65536
add ax,word[py]
add eax,35 ;+35
mov ecx,eax ;posX*65536+dX ; [x0] *65536 + [dx]
mov edx,cB
mov eax,38 ; äã­ªæ¨ï 38 - line \\
int 0x40
;---------------------------------
xor eax,eax
mov ax,word[px]
shl eax,16 ;*65536
mov ebx,eax ;posX*65536 = .BX
 
xor eax,eax
mov ax,word[px]
add eax,35
add ebx,eax ;---------------------------BX
 
xor eax,eax
mov ax,word[py]
add eax,35
shl eax,16 ;*65536
add ax,word[py] ;+y
mov ecx,eax ;(posY+35)*65536+posY = .CX
mov edx,cB ; 梥â : ç¥à­ë©
mov eax,38 ; äã­ªæ¨ï 38 - line /
int 0x40
;----------------------------------------
xor eax,eax
mov ax,word[px]
inc ax
shl eax,16 ;*65536
mov ebx,eax ;posX*65536 = .BX
 
xor eax,eax
mov ax,word[px]
add eax,36 ;+35+1
add ebx,eax ;---------------------------BX
 
xor eax,eax
mov ax,word[py]
add eax,35
shl eax,16 ;*65536
add ax,word[py] ;+y
mov ecx,eax ;(posY+35)*65536+posY = .CX
mov edx,cB
mov eax,38 ; äã­ªæ¨ï 38 - line //
int 0x40
ret
;------------------------------------Ž‚…Š€ H  ¢ë¨£àëè­ãî á¨âã æ¨î-----x
x_win: xor ecx,ecx
xor ebx,ebx
xor eax,eax
lx0: mov bx,word[poxl] ;áà ¢­¨âì ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ X
mov esi,ecx
shl esi,1 ;*2
mov ax,word[oxwall+esi] ; next pattern
and ebx,eax ;á ¯®¡¥¤­ë¬¨ , ¥á«¨ å®âì ®¤­  ᮢ¯ ¤ ¥â -
sub eax,ebx
jz wx ;¯®¡¥¤  -> set byte xwin=1
inc ecx
cmp ecx,8 ;横« ecx < 8
jb lx0
g00: ;­¥â ᮢ¯ ¤¥­¨©
ret
wx:
inc byte[xwin] ;mov byte[xwin],1
ret
;------------------------------------Ž‚…Š€ H  ¢ë¨£àëè­ãî á¨âã æ¨î-----0
o_win: xor ecx,ecx
xor ebx,ebx
xor eax,eax
lo0: mov bx,word[pool] ;áà ¢­¨âì ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ O
mov esi,ecx
shl esi,1 ;*2
mov ax,word[oxwall+esi] ; next pattern
and ebx,eax ;á ¯®¡¥¤­ë¬¨ , ¥á«¨ å®âì ®¤­  ᮢ¯ ¤ ¥â -
sub eax,ebx
jz wo ;¯®¡¥¤  -> set byte owin=1
inc ecx
cmp ecx,8 ;横«
jb lo0
ret
wo: inc byte[owin] ;mov byte[owin],1
ret
;==================================COmbinations -0- =============
o_com: xor ecx,ecx
xor ebx,ebx
xor eax,eax
l000: mov bx,word[poxl] ; ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ X
; or bx,word[pool] ;+ ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ O
mov esi,ecx
shl esi,2 ;*4 -ᤢ¨£ -á«®¢
mov ax,word[prav+esi] ; á«¥¤ãî饥 ¯à ¢¨«®
and ebx,eax ; ¥á«¨ ­¥ ᮢ¯ ¤ ¥â -
sub eax,ebx
jnz @F ;next ecx
xor eax,eax
xor ebx,ebx
mov ax,word[prav+esi+2] ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
mov bl,byte[pox+eax]
cmp ebx,0 ;empty?
je g00d
@@:
inc ecx
cmp ecx,24 ;横« ¤® 24
jb l000
ret ;­¥â ᮢ¯ ¤¥­¨© - do nothing
g00d:
;¯à¨¬¥­¨âì ¥£®
xor eax,eax
mov ax,word[prav+esi+2] ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
mov esi,eax
mov dword[idx],esi ;á®åà ­¨¬ ¢ idx
ret
 
;==================================¯à¥¤¢ë¨£àëè­ ï ª®¬¡¨­ æ¨ï...
x_com: xor ecx,ecx
xor ebx,ebx
xor eax,eax
l111: mov bx,word[pool] ; ⥪ãéãî á¨âã æ¨î ­  ¯®«¥ O
mov esi,ecx
shl esi,2 ;*4 -ᤢ¨£ -á«®¢
mov ax,word[prav+esi] ; á«¥¤ãî饥 ¯à ¢¨«®
and ebx,eax ; ¥á«¨ ­¥ ᮢ¯ ¤ ¥â -
sub eax,ebx
jnz @F ;next ecx
xor eax,eax
xor ebx,ebx
mov ax,word[prav+esi+2] ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
mov bl,byte[pox+eax]
cmp ebx,0 ;empty?
je g11d
@@:
inc ecx
cmp ecx,24 ;横« ¤® 24
jb l111
ret ;­¥â ᮢ¯ ¤¥­¨© - do nothing
 
g11d:
;¯à¨¬¥­¨âì ¥£®
xor eax,eax
mov ax,word[prav+esi+2] ;esi<-¨§ â ¡«¨æë ¯à ¢¨«
mov esi,eax
mov dword[idx],esi ;á®åà ­¨¬ ¢ idx
ret
}
 
macro playing_field
{
pole_x0:
mov eax,38 ; func 38
mov edx,cB ; the color is black
 
mov ebx,92*65536+92 ;x
mov ecx,42*65536+192 ;y
int 0x40 ;- line vert 1
mov ebx,142*65536+142 ;x
mov ecx,42*65536+192 ;y
int 0x40 ;- line vert 2
mov ebx,42*65536+192 ;x
mov ecx,92*65536+92 ;y
int 0x40 ;- line horiz 1
mov ebx,42*65536+192 ;x
mov ecx,142*65536+142 ;y
int 0x40 ;- line horiz 2
}
/programs/games/kox/trunk/main.inc
0,0 → 1,290
;#**************************
;#* X-0-X = MAIN()
;#************************** 21/10/2007
cB equ cBLACK
cW equ cWHITE
 
macro main_loop
{
 
; äã­ªæ¨ï ®âà¨á®¢ª¨ ®ª­ 
;========================================
draw_window:
mov eax,12 ; äã­ªæ¨ï 12: á®®¡é¨âì á¨á⥬¥
mov ebx,1 ; ¯®¤äã­ªæ¨ï 1, ­ ç «® ¯¥à¥à¨á®¢ª¨
int 0x40
; ===== ŽŠŽ !!!
mov eax,0 ; äã­ªæ¨ï 0: ®¯à¥¤¥«¨âì ¨ ¢ë¢¥á⨠®ª­®
mov ebx,100*65536+250 ; [x ­ ç «ì­ë©] *65536 + [x à §¬¥à]
mov ecx,ebx ;,100*65536+250 ; [y ­ ç «ì­ë©] *65536 + [y à §¬¥à]
mov edx,0x02FFFFFF
 
mov esi,0x808899AA ; 梥⠧ £®«®¢ª  RRGGBB
mov edi,0xFFAAcc ; 梥â à ¬ª¨ RRGGBB
int 0x40
; €„ˆ‘œ ¢ § £®«®¢ª¥ KOX v0.001
mov eax,4 ; äã­ªæ¨ï 4: ­ ¯¨á âì ⥪áâ ¢ ®ª­¥
mov ebx,8*65536+8 ; [x ­ ç «ì­ë©] *65536 + [y ­ ç «ì­ë©]
mov ecx,0x00224422 ; 梥â ⥪áâ  RRGGBB
mov edx,text ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
mov esi,texts-text ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
int 0x40
;-----------------------------------#-----------------------------------------
; SCENE OF GAME - PLAY YARD - BOARD - DESK - PLAYING FIELD
;---------------
playing_field ;macro in macs.inc
;-------------------------------------------------------------------------------
; ----ŠŽŠˆ----
;-------------------------------------------------------------------------------
;buttons:
mov eax,8 ; äã­ªæ¨ï 8: ®¯à¥¤¥«¨âì ¨ ¢ë¢¥á⨠ª­®¯ªã
mov ebx,230*65536+12 ; [x ­ ç «ì­ë©] *65536 + [x à §¬¥à]
mov ecx,5*65536+12 ; [y ­ ç «ì­ë©] *65536 + [y à §¬¥à]
mov edx,100 ; ¨¤¥­â¨ä¨ª â®à ª­®¯ª¨ =100
mov esi,0xFF6611 ; 梥⠪­®¯ª¨ RRGGBB
int 0x40 ; ===ŠŽŠ€ ‡€Š›’ˆŸ ŽŠ€===
;--------------------------------------------
mov eax,8 ;
mov ebx,200*65536+35 ; ;
mov ecx,25*65536+20 ;
mov edx,200 ;== NEW GAME ==
mov esi,0xCC66CC
int 0x40
;--------------------------------------------
mov eax,4 ; ­ ¯¨á âì ⥪áâ ­  ª­®¯ª¥ NEW
mov ebx,210*65536+30
mov ecx,cB
mov edx,textend
mov esi,3
int 0x40
endbut:
mov eax,12
mov ebx,2
int 0x40
;============================= draw_window: END
event_wait:
mov eax,23 ;==‘Ž›’ˆŸ==
mov ebx,100 ;¦¤ âì ᥪ㭤ã
int 0x40
;-------------------------------------------------------------------------------
; ⨯ ᮡëâ¨ï ¢®§¢à éñ­ ¢ eax, ¤ «¥¥ ¯à®¢¥à塞, ª ª®¥ ᮡë⨥ ¯à®¨§®è«®
;-------------------------------------------------------------------------------
cmp eax,1 ; § ¯à®á ­  ¯¥à¥à¨á®¢ªã?
je redraw
cmp eax,2 ; ­ ¦ â  ª« ¢¨è  ª« ¢¨ âãàë?
je key
cmp eax,3 ; ­ ¦ â  ª­®¯ª  ¢ ®ª­¥ ¯à®£à ¬¬ë?
je button
cmp eax,6 ; mouse - click or move?
je MOUSE
jmp event_wait ; ¢®§¢à é ¥¬áï ª ­ ç «ã 横«  ®¦¨¤ ­¨ï ᮡë⨩
; ¥á«¨ ᮡë⨩ ­¥â
;-------------------------------------------------------------------------------
; ®¡à ¡®âª  ᮡë⨩
;-------------------------------------------------------------------------------
redraw:
call draw_window ; ¢ë§ë¢ ¥¬ äã­ªæ¨î draw_window ¨
jmp event_wait ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
key:
mov eax,2 ; áç¨â뢠¥¬ ª®¤ ­ ¦ â®© ª« ¢¨è¨. ‚®§¢à é¥­ ¢ ah.
int 0x40 ; Š« ¢¨è  ¤®«¦­  ¡ëâì ¯à®ç¨â ­  ¤«ï ®ç¨á⪨
cmp ah,27
je clos0 ; exit on ESC
jmp event_wait ; ¢®§¢à â ª event_wait
button:
mov eax,17 ; áç¨â뢠¥¬ ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
int 0x40 ; ¢®§¢à é¥­ ¢ ah.
;-------------------------------------------------------------------------------
; ᬮâਬ, ª ª ï ª­®¯ª  ¡ë«  ­ ¦ â  ¨ ᮮ⢥âáâ¢ãî騬 ®¡à §®¬ ॠ£¨à㥬.
;-------------------------------------------------------------------------------
cmp ah,100 ; ª­®¯ª  á id=100("§ ªàëâì")?
jne noclose ;
clos0: ;
mov eax,-1 ; äã­ªæ¨ï -1: § ¢¥àè¨âì ¯à®£à ¬¬ã
int 0x40 ;
noclose: ; ª­®¯ª  id=200( "New" )
mov dword[pox],0
mov dword[pox+4],0 ;clear memory
mov dword[pox_],0 ;rest and other stuff
mov word[poxl],0 ; bits of pole X
mov word[pool],0 ; bits of pole O
;mov byte[fill],0 ; ®¡­ã«ï¥¬ áç¥â稪 室®¢
;mov byte[xwin],0 ; flag - x winner
;mov byte[owin],0 ; flag - o winner
jmp redraw ; ç¨á⮥ ¨£à®¢®¥ ¯®«¥ ==>>
;-------------------------------------------------------------------------------
; ᬮâਬ, £¤¥ ¡ë«  ­ ¦ â  ¬ëèì
;-------------------------------------------------------------------------------
MOUSE:
mov eax,37 ; ¬ëèìî..
mov ebx,2
int 0x40
cmp eax,0 ; ..­¨ç¥£® ­¥ ­ ¦ â® - ¦¤ âì ᮡë⨩
je event_wait
;­ ¦ â  ª­®¯ª  ¬ëè¨
mov eax,37 ; cursor coords
mov ebx,1
int 0x40 ;eax=x*65536+y
mov [px],eax ;[px][py] - ª®®à¤¨­ â  ⪭ã⮣® ¬¥áâ 
 
xor eax,eax
g11: ;1st cell======
cmp word[px],92
ja g12 ;>92
cmp word[py],92
ja g12 ;>92
 
;mov dword[idx],0 ;N=(0..8)
jmp puts
 
g12: ;2nd cell========
inc al
cmp word[py],145
ja g13 ;>142
cmp word[px],92
ja g13 ;>92
;mov dword[idx],1 ;N=(0..8)
jmp puts
g13: ;3=========
inc al
cmp word[px],92
ja g21 ;>92
;mov dword[idx],2 ;N=(0..8)
jmp puts
g21: ;4========
inc al
cmp word[px],145
ja g22
cmp word[py],92
ja g22
;mov dword[idx],3 ;N=(0..8)
jmp puts
g22: ;5=======
inc al
cmp word[px],145
ja g23
cmp word[py],145
ja g23
;mov dword[idx],4 ;N=(0..8)
jmp puts
g23: ;6=======
inc al
cmp word[px],142
ja g31 ;>142
;mov dword[idx],5 ;N=(0..8)
jmp puts
g31: ;7=======
inc al
cmp word[py],92
ja g32
;mov dword[idx],6 ;N=(0..8)
jmp puts
g32: ;8======
inc al
cmp word[py],145
ja g33
;mov dword[idx],7 ;N=(0..8)
jmp puts
g33: ;9======
inc al
;mov dword[idx],8 ;N=(0..8)
 
puts: ;㦥 ®¯à¥¤¥«¨«¨ ª«¥âªã
push eax
pop dword[idx]
mov esi,dword[idx] ;
cmp byte[pox+esi],0 ;¯®«¥ ᢮¡®¤­®? (0-᢮¡®¤­®¥ ¯®«¥)
jne event_wait ;¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
 
shl esi,2 ;*4
mov eax,dword[pole+esi]
mov dword[px],eax ;x coord from tabl ->px
;mov ax,word[pole+esi+2]
;mov word[py],ax ;y coord from tabl ->py
 
call x_put ;"X"
 
mov esi,dword[idx] ;esi - cell number =0..8
mov byte[pox+esi],'x'
inc byte[fill] ;turn+1
 
xor eax,eax ;eax=0
inc eax ;bit=1 eax=1
mov ecx,dword[idx] ; esi=n
shl ax,cl ; <<n-bit bit[n]=1
or word[poxl],ax ;set bit in [poxl]
 
call x_win ;¯à®¢¥àª  ¢ë¨£àëè  •
cmp byte[xwin],1 ;ä« £ ¯®¡¥¤ë ãáâ ­®¢«¥­?
jne del5 ;­¥â - ¯¥à¥áª®ª ­  delay
 
mov eax,4 ; äã­ª 4: ­ ¯¨á âì ⥪áâ 'WINNER!'
mov ebx,18*65536+215 ; [x ­ ç] *65536 + [y ­ ç]
mov ecx,0x10FF22FF ; 梥â ⥪áâ  RRGGBB
mov edx,texts ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
mov esi,textend-texts ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
int 0x40 ;
jmp event_wait ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
 
;===========================================================
del5: mov eax,5 ;=== delay 0,5 sec ===
mov ebx,50
int 0x40
 
cmp byte[fill],8 ;¢á¥ ¯®«ï § ­ïâë - 室¨âì ­¥ªã¤ 
jnb event_wait ;¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï - ª®­¥æ.
 
rnew: ;
call rndnext ; á«ãç ©­®¥ ç¨á«® ¢ eax
and eax, 0111b ; eax = 0..7
mov esi,eax ; eax->esi
call rndnext ; á«ãç ©­®¥ ç¨á«® ¢ eax
and eax, 01b ; eax= 0..1
add esi,eax ; esi+=eax
;esi=0..8 - index
cmp byte[pox+esi],0 ;á«ãç ©­®¥ ¯®«¥ ᢮¡®¤­®?
jne rnew ;­¥â - ­®¢®¥ á«ãç ©­®¥ ç¨á«®
 
cmp byte[pox+4],0 ;業âà ᢮¡®¤¥­?
jne @F ;­¥â - á«ãç ©­ë© 室 (㦥 ¢ esi)
mov esi,4 ;¤  - 室¨¬ ¢ 業âà (4) ¢¬¥áâ® á«ãç.
@@:
mov dword[idx],esi ;á®åà ­¨¬ ¢ idx
;esi=0..8 - index
call o_com ;¯à®¢¥àª  24åê ª®¬¡¨­ æ¨© XX0
call x_com ;¯à®¢¥àª  24åê ª®¬¡¨­ æ¨© 00*
 
mov esi,dword[idx] ;idx-¨­¤¥ªá ª«¥âª¨(0..8) ªã¤  室
shl esi,2 ; esi*4 - ¯®«¥ á®á⮨⠨§ § ¯¨á¥© ¯® dword
mov eax,dword[pole+esi] ;
mov dword[px],eax ;x coord from tabl ->px
; mov ax,word[pole+esi+2] ;
; mov word[py],ax ;y coord from tabl ->py
call o_put ; à¨á㥬 ­®«¨ª 'O'
 
mov esi,dword[idx]
mov byte[pox+esi],'o'
inc byte[fill] ;turn++
 
xor eax,eax ;eax=0
inc eax ;bit=1 eax=1
mov ecx,dword[idx] ; ecx=n
shl ax,cl ; <<n-bit bit[n]=1
or word[pool],ax ;set bit in [pool]
 
call o_win
cmp byte[owin],1
jne event_wait
 
mov eax,4 ; äã­ª 4: ­ ¯¨á âì ⥪áâ 'LOOSER!'
mov ebx,48*65536+215 ; [x ­ ç] *65536 + [y ­ ç]
mov ecx,0x10FF22FF ; 梥â ⥪áâ  RRGGBB
mov edx,lootxt ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
mov esi,text-lootxt ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
int 0x40 ;
jmp event_wait ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
;===========================================--
;
}
 
 
/programs/games/kox/trunk
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property
/programs/games/kox/.
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property