Subversion Repositories Kolibri OS

Rev

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