/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 |