Subversion Repositories Kolibri OS

Rev

Rev 2734 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;#**************************
  2. ;#*    X-0-X    =  MAIN()
  3. ;#************************** 21/10/2007
  4. cB     equ cBLACK
  5. cW     equ cWHITE
  6.  
  7. macro main_loop
  8. {
  9.  
  10. ; äã­ªæ¨ï ®âà¨á®¢ª¨ ®ª­ 
  11. ;========================================
  12. draw_window:
  13.         mov     eax,12                ; äã­ªæ¨ï 12:     á®®¡é¨âì á¨á⥬¥
  14.         mov     ebx,1                 ; ¯®¤äã­ªæ¨ï 1,  ­ ç «® ¯¥à¥à¨á®¢ª¨
  15.         int     0x40
  16.                                       ; =====  ŽŠŽ !!!
  17.         mov     eax,0                 ; äã­ªæ¨ï 0: ®¯à¥¤¥«¨âì ¨ ¢ë¢¥á⨠®ª­®
  18.         mov     ebx,100*65536+250     ; [x ­ ç «ì­ë©] *65536 + [x à §¬¥à]
  19.         mov     ecx,ebx  ;,100*65536+250     ; [y ­ ç «ì­ë©] *65536 + [y à §¬¥à]
  20.         mov     edx,0x02FFFFFF
  21.  
  22.         mov     esi,0x808899AA        ; 梥⠧ £®«®¢ª  RRGGBB
  23.         mov     edi,0xFFAAcc          ; 梥â à ¬ª¨ RRGGBB
  24.         int     0x40
  25.                                       ; €„ˆ‘œ ¢ § £®«®¢ª¥ KOX v0.001
  26.         mov     eax,4                 ; äã­ªæ¨ï 4: ­ ¯¨á âì ⥪áâ ¢ ®ª­¥
  27.         mov     ebx,8*65536+8         ; [x ­ ç «ì­ë©] *65536 + [y ­ ç «ì­ë©]
  28.         mov     ecx,0x00224422        ; 梥â ⥪áâ  RRGGBB
  29.         mov     edx,text              ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
  30.         mov     esi,texts-text        ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
  31.         int     0x40
  32. ;-----------------------------------#-----------------------------------------
  33. ; SCENE OF GAME - PLAY YARD - BOARD - DESK - PLAYING FIELD
  34. ;---------------
  35.  playing_field                        ;macro in macs.inc
  36. ;-------------------------------------------------------------------------------
  37. ;                              ----ŠŽŠˆ----
  38. ;-------------------------------------------------------------------------------
  39. ;buttons:
  40.         mov     eax,8                 ; äã­ªæ¨ï 8: ®¯à¥¤¥«¨âì ¨ ¢ë¢¥á⨠ª­®¯ªã
  41.         mov     ebx,230*65536+12      ; [x ­ ç «ì­ë©] *65536 + [x à §¬¥à]
  42.         mov     ecx,5*65536+12        ; [y ­ ç «ì­ë©] *65536 + [y à §¬¥à]
  43.         mov     edx,100               ; ¨¤¥­â¨ä¨ª â®à ª­®¯ª¨  =100
  44.         mov     esi,0xFF6611          ; 梥⠪­®¯ª¨ RRGGBB
  45.         int     0x40                  ; ===ŠŽŠ€ ‡€Š›’ˆŸ ŽŠ€===
  46. ;--------------------------------------------
  47.         mov     eax,8                 ;
  48.         mov     ebx,200*65536+35 ;    ;
  49.         mov     ecx,25*65536+20       ;
  50.         mov     edx,200               ;== NEW GAME ==
  51.         mov     esi,0xCC66CC
  52.         int     0x40
  53. ;--------------------------------------------
  54.         mov     eax,4                 ;  ­ ¯¨á âì ⥪áâ ­  ª­®¯ª¥ NEW
  55.         mov     ebx,210*65536+30
  56.         mov     ecx,cB
  57.         mov     edx,textend
  58.         mov     esi,3
  59.         int     0x40
  60.  endbut:
  61.         mov     eax,12
  62.         mov     ebx,2
  63.         int     0x40
  64. ;============================= draw_window: END
  65.  event_wait:
  66.         mov     eax,23        ;==‘Ž›’ˆŸ==
  67.         mov     ebx,100       ;¦¤ âì ᥪ㭤ã
  68.         int     0x40
  69. ;-------------------------------------------------------------------------------
  70. ; ⨯ ᮡëâ¨ï ¢®§¢à éñ­ ¢ eax, ¤ «¥¥ ¯à®¢¥à塞, ª ª®¥ ᮡë⨥ ¯à®¨§®è«®
  71. ;-------------------------------------------------------------------------------
  72.         cmp     eax,1        ; § ¯à®á ­  ¯¥à¥à¨á®¢ªã?
  73.         je      redraw
  74.         cmp     eax,2        ; ­ ¦ â  ª« ¢¨è  ª« ¢¨ âãàë?
  75.         je      key
  76.         cmp     eax,3        ; ­ ¦ â  ª­®¯ª  ¢ ®ª­¥ ¯à®£à ¬¬ë?
  77.         je      button
  78.         cmp     eax,6        ; mouse - click or move?
  79.         je      MOUSE
  80.         jmp     event_wait   ; ¢®§¢à é ¥¬áï ª ­ ç «ã 横«  ®¦¨¤ ­¨ï ᮡë⨩
  81.                              ; ¥á«¨ ᮡë⨩  ­¥â
  82. ;-------------------------------------------------------------------------------
  83. ;  ®¡à ¡®âª  ᮡë⨩
  84. ;-------------------------------------------------------------------------------
  85. redraw:
  86.         call    draw_window  ; ¢ë§ë¢ ¥¬ äã­ªæ¨î draw_window ¨
  87.         jmp     event_wait   ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  88. key:
  89.         mov     eax,2        ; áç¨â뢠¥¬ ª®¤ ­ ¦ â®© ª« ¢¨è¨. ‚®§¢à é¥­ ¢ ah.
  90.         int     0x40         ; Š« ¢¨è  ¤®«¦­  ¡ëâì ¯à®ç¨â ­  ¤«ï ®ç¨á⪨
  91.         cmp     ah,27
  92.         je      clos0        ; exit on ESC
  93.         jmp     event_wait   ; ¢®§¢à â ª event_wait
  94. button:
  95.         mov     eax,17       ; áç¨â뢠¥¬ ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  96.         int     0x40         ; ¢®§¢à é¥­ ¢ ah.
  97. ;-------------------------------------------------------------------------------
  98. ; ᬮâਬ, ª ª ï ª­®¯ª  ¡ë«  ­ ¦ â  ¨ ᮮ⢥âáâ¢ãî騬 ®¡à §®¬ ॠ£¨à㥬.
  99. ;-------------------------------------------------------------------------------
  100.         cmp     ah,100         ; ª­®¯ª  á id=100("§ ªàëâì")?
  101.         jne     noclose        ;
  102.   clos0:                       ;
  103.         mov     eax,-1         ; äã­ªæ¨ï -1: § ¢¥àè¨âì ¯à®£à ¬¬ã
  104.         int     0x40           ;
  105.   noclose:                     ; ª­®¯ª  id=200( "New" )
  106.         mov dword[pox],0
  107.         mov dword[pox+4],0     ;clear memory
  108.         mov dword[pox_],0      ;rest and other stuff
  109.         mov word[poxl],0       ; bits of pole X
  110.         mov word[pool],0       ; bits of pole O
  111.         ;mov byte[fill],0       ; ®¡­ã«ï¥¬ áç¥â稪 室®¢
  112.         ;mov byte[xwin],0       ; flag - x winner
  113.         ;mov byte[owin],0       ; flag - o winner
  114.         jmp     redraw         ; ç¨á⮥ ¨£à®¢®¥ ¯®«¥ ==>>
  115. ;-------------------------------------------------------------------------------
  116. ; ᬮâਬ, £¤¥ ¡ë«  ­ ¦ â  ¬ëèì
  117. ;-------------------------------------------------------------------------------
  118.  MOUSE:
  119.         mov eax,37      ; ¬ëèìî..
  120.         mov ebx,2
  121.         int 0x40
  122.         cmp eax,0       ; ..­¨ç¥£® ­¥ ­ ¦ â® - ¦¤ âì ᮡë⨩
  123.         je  event_wait
  124.                         ;­ ¦ â  ª­®¯ª  ¬ëè¨
  125.         mov eax,37      ; cursor coords
  126.         mov ebx,1
  127.         int 0x40        ;eax=x*65536+y
  128.         mov [px],eax    ;[px][py]  -  ª®®à¤¨­ â  ⪭ã⮣® ¬¥áâ 
  129.  
  130.           xor eax,eax
  131.      g11:                      ;1st cell======
  132.           cmp word[px],92
  133.           ja g12               ;>92
  134.           cmp word[py],92
  135.           ja g12               ;>92
  136.  
  137.           ;mov dword[idx],0     ;N=(0..8)
  138.           jmp puts
  139.  
  140.      g12:                      ;2nd cell========
  141.           inc al
  142.           cmp word[py],145
  143.           ja g13               ;>142
  144.           cmp word[px],92
  145.           ja g13               ;>92
  146.           ;mov dword[idx],1     ;N=(0..8)
  147.           jmp puts
  148.      g13:                      ;3=========
  149.           inc al
  150.           cmp word[px],92
  151.           ja g21               ;>92
  152.           ;mov dword[idx],2     ;N=(0..8)
  153.           jmp puts
  154.      g21:                      ;4========
  155.           inc al
  156.           cmp word[px],145
  157.           ja g22
  158.           cmp word[py],92
  159.           ja g22
  160.           ;mov dword[idx],3     ;N=(0..8)
  161.           jmp puts
  162.      g22:                      ;5=======
  163.           inc al
  164.           cmp word[px],145
  165.           ja g23
  166.           cmp word[py],145
  167.           ja g23
  168.           ;mov dword[idx],4     ;N=(0..8)
  169.           jmp puts
  170.      g23:                      ;6=======
  171.           inc al
  172.           cmp word[px],142
  173.           ja g31               ;>142
  174.           ;mov dword[idx],5     ;N=(0..8)
  175.           jmp puts
  176.      g31:                      ;7=======
  177.           inc al
  178.           cmp word[py],92
  179.           ja g32
  180.           ;mov dword[idx],6     ;N=(0..8)
  181.           jmp puts
  182.      g32:                      ;8======
  183.           inc al
  184.           cmp word[py],145
  185.           ja g33
  186.           ;mov dword[idx],7     ;N=(0..8)
  187.           jmp puts
  188.      g33:                      ;9======
  189.           inc al
  190.           ;mov dword[idx],8     ;N=(0..8)
  191.  
  192.    puts:                            ;㦥 ®¯à¥¤¥«¨«¨ ª«¥âªã
  193.            push eax
  194.            pop dword[idx]
  195.           mov esi,dword[idx]        ;
  196.           cmp byte[pox+esi],0       ;¯®«¥ ᢮¡®¤­®? (0-᢮¡®¤­®¥ ¯®«¥)
  197.           jne event_wait            ;¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  198.  
  199.           shl esi,2                 ;*4
  200.           mov eax,dword[pole+esi]
  201.           mov dword[px],eax           ;x coord from tabl ->px
  202.           ;mov ax,word[pole+esi+2]
  203.           ;mov word[py],ax           ;y coord from tabl ->py
  204.  
  205.           call x_put                ;"X"
  206.  
  207.           mov esi,dword[idx]        ;esi - cell number  =0..8
  208.           mov byte[pox+esi],'x'
  209.           inc byte[fill]            ;turn+1
  210.  
  211.           xor eax,eax               ;eax=0
  212.           inc eax                   ;bit=1       eax=1
  213.           mov ecx,dword[idx]        ;  esi=n
  214.           shl  ax,cl                ; <<n-bit   bit[n]=1
  215.           or word[poxl],ax          ;set bit in [poxl]
  216.  
  217.           call x_win                ;¯à®¢¥àª  ¢ë¨£àëè  •
  218.           cmp byte[xwin],1          ;ä« £ ¯®¡¥¤ë ãáâ ­®¢«¥­?
  219.           jne del5                  ;­¥â - ¯¥à¥áª®ª ­  delay
  220.  
  221.         mov     eax,4                 ; äã­ª 4: ­ ¯¨á âì ⥪áâ 'WINNER!'
  222.         mov     ebx,18*65536+215      ; [x ­ ç] *65536 + [y ­ ç]
  223.         mov     ecx,0x10FF22FF        ; 梥â ⥪áâ  RRGGBB
  224.         mov     edx,texts             ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
  225.         mov     esi,textend-texts     ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
  226.         int     0x40                  ;
  227.         jmp   event_wait              ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  228.  
  229. ;===========================================================
  230.  del5:    mov eax,5                 ;=== delay 0,5 sec ===
  231.           mov ebx,50
  232.           int 0x40
  233.  
  234.           cmp byte[fill],8    ;¢á¥ ¯®«ï § ­ïâë - 室¨âì ­¥ªã¤ 
  235.           jnb event_wait      ;¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï - ª®­¥æ.
  236.  
  237.    rnew:                      ;
  238.           call rndnext              ; á«ãç ©­®¥ ç¨á«® ¢ eax
  239.           and eax, 0111b            ; eax = 0..7
  240.           mov esi,eax               ; eax->esi
  241.           call rndnext              ; á«ãç ©­®¥ ç¨á«® ¢ eax
  242.           and eax, 01b              ; eax= 0..1
  243.           add esi,eax               ; esi+=eax
  244.                                     ;esi=0..8 - index
  245.           cmp byte[pox+esi],0       ;á«ãç ©­®¥ ¯®«¥ ᢮¡®¤­®?
  246.           jne rnew                  ;­¥â - ­®¢®¥ á«ãç ©­®¥ ç¨á«®
  247.  
  248.           cmp byte[pox+4],0         ;業âà ᢮¡®¤¥­?
  249.           jne @F                    ;­¥â - á«ãç ©­ë© 室 (㦥 ¢ esi)
  250.           mov esi,4                 ;¤   - 室¨¬ ¢ 業âà (4) ¢¬¥áâ® á«ãç.
  251.      @@:
  252.           mov dword[idx],esi        ;á®åà ­¨¬ ¢ idx
  253.                                     ;esi=0..8 - index
  254.           call o_com                ;¯à®¢¥àª  24åê ª®¬¡¨­ æ¨© XX0
  255.           call x_com                ;¯à®¢¥àª  24åê ª®¬¡¨­ æ¨© 00*
  256.  
  257.           mov esi,dword[idx]        ;idx-¨­¤¥ªá ª«¥âª¨(0..8) ªã¤  室
  258.           shl esi,2                 ; esi*4 - ¯®«¥ á®á⮨⠨§ § ¯¨á¥© ¯® dword
  259.           mov eax,dword[pole+esi]     ;
  260.           mov dword[px],eax           ;x coord from tabl ->px
  261.         ;  mov ax,word[pole+esi+2]   ;
  262.         ;  mov word[py],ax           ;y coord from tabl ->py
  263.           call o_put                ; à¨á㥬 ­®«¨ª 'O'
  264.  
  265.           mov esi,dword[idx]
  266.           mov byte[pox+esi],'o'
  267.           inc byte[fill]            ;turn++
  268.  
  269.           xor eax,eax               ;eax=0
  270.           inc eax                   ;bit=1       eax=1
  271.           mov ecx,dword[idx]        ;  ecx=n
  272.           shl  ax,cl                ; <<n-bit   bit[n]=1
  273.           or word[pool],ax          ;set bit in [pool]
  274.  
  275.           call o_win
  276.           cmp byte[owin],1
  277.           jne event_wait
  278.  
  279.         mov     eax,4                 ; äã­ª 4: ­ ¯¨á âì ⥪áâ 'LOOSER!'
  280.         mov     ebx,48*65536+215      ; [x ­ ç] *65536 + [y ­ ç]
  281.         mov     ecx,0x10FF22FF        ; 梥â ⥪áâ  RRGGBB
  282.         mov     edx,lootxt            ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
  283.         mov     esi,text-lootxt       ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
  284.         int     0x40                  ;
  285.         jmp   event_wait              ; ¢®§¢à é ¥¬áï ­ § ¤ ª 横«ã ®¦¨¤ ­¨ï
  286. ;===========================================--
  287. ;
  288. }
  289.  
  290.  
  291.