Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2010, 19:28   #1
fallti
 
Регистрация: 10.05.2010
Сообщений: 8
Радость Проблема с AUTORADIOBUTTON

Задание такое - имеем три лошади. Игрок делает ставку на одну из них. Лошадь победитель определяется гениратором случайных чисел.

Ставку игрок делает с помощью селективной кнопки. И вот с реализацие этой кнопки у меня проблемы.

вот код:
Код:
format PE GUI 4.0
entry start

include 'win32a.inc'


ID_HORSE1 = 202
ID_HORSE2 = 203
ID_HORSE3 = 204

section '.data' data readable writeable ; Секция данных.
        horse_1 db 'Won the number one horse!!!',0
        horse_2 db 'Horse has won the number two!!!',0
        horse_3 db 'Horse has won the number three!!!',0
        caption db  'Horse winner',0
        lose db 'You lost ="((',0
        win db 'Congratulations you have won!!!',0
        number db 0
        total db 'Total',0
        randNumber dd 0 ;случайное чиcло здесь!!!
        random_seed dd 0  ; Переменная для хранения промежуточных результатов
                        ; работы генератора
section '.text' code readable executable

  start:

        invoke  GetModuleHandle,0
        invoke  DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
        or      eax,eax
        jz      exit
        ; Инициализация генератора случайных чисел
        stdcall  WRandomInit
        ; Получить случайное число в интервале min...max (включая границы)
        stdcall  WIRandom,1,3
        ; EAX=случайное число в интервале от 1 до 3
        mov [randNumber],eax
        ;Вывод победителя
        cmp [randNumber],1
        jne .next1
        invoke MessageBox,0,horse_1,caption,MB_OK
        jmp .myEnd
  .next1:
        cmp [randNumber],2
        jne .next2
        invoke MessageBox,0,horse_2,caption,MB_OK
        jmp .myEnd
  .next2:
        cmp [randNumber],3
        jne .next1
        invoke MessageBox,0,horse_3,caption,MB_OK
 .myEnd:
        cmp [randNumber],number
        je .isEnd
        invoke  MessageBox,HWND_DESKTOP,lose,total,MB_ICONWARNING
        jmp exit
   .isEnd:
         invoke  MessageBox,HWND_DESKTOP,win,total,MB_ICONINFORMATION
  exit:
        invoke  ExitProcess,0
;----------------------------------------------------------
;Диалоговая процедура
proc DialogProc hwnddlg,msg,wparam,lparam
        push    ebx esi edi
        cmp     [msg],WM_INITDIALOG
        je      .wminitdialog
        cmp     [msg],WM_COMMAND
        je      .wmcommand
        cmp     [msg],WM_CLOSE
        je      .wmclose
        xor     eax,eax
        jmp     .finish
  .wminitdialog:
        invoke  CheckRadioButton,[hwnddlg],ID_HORSE1,ID_HORSE2,ID_HORSE3
        jmp     .processed
  .wmcommand:
        cmp     [wparam],BN_CLICKED shl 16 + IDCANCEL
        je      .wmclose
        cmp     [wparam],BN_CLICKED shl 16 + IDOK
        jne     .processed
        invoke  IsDlgButtonChecked,[hwnddlg],ID_HORSE1
        cmp     eax,BST_CHECKED
        je     .work1
        invoke  IsDlgButtonChecked,[hwnddlg],ID_HORSE2
        cmp     eax,BST_CHECKED
        je     .work2
        invoke  IsDlgButtonChecked,[hwnddlg],ID_HORSE3
        cmp     eax,BST_CHECKED
        je     .work3
 .work1:
        mov [number],1
        jmp     .botton
 .work2:
        mov [number],2
        jmp     .botton
 .work3:
        mov [number],3
 .botton:
        invoke  EndDialog,[hwnddlg],1
        jmp     .processed
  .wmclose:
        invoke  EndDialog,[hwnddlg],0
  .processed:
        mov     eax,1
  .finish:
        pop     edi esi ebx
        ret
endp
;-------------------------------------------------------
section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL'

  import kernel,\
         GetModuleHandle,'GetModuleHandleA',\
         ExitProcess,'ExitProcess'

  import user,\
         DialogBoxParam,'DialogBoxParamA',\
         CheckRadioButton,'CheckRadioButton',\
         GetDlgItemText,'GetDlgItemTextA',\
         IsDlgButtonChecked,'IsDlgButtonChecked',\
         MessageBox,'MessageBoxA',\
         EndDialog,'EndDialog'

section '.rsrc' resource data readable

  directory RT_DIALOG,dialogs

  resource dialogs,\
           37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration

  dialog demonstration,'Hello',70,70,190,175,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
    dialogitem 'STATIC','Please make your bid:',-1,10,5,70,8,WS_VISIBLE
    dialogitem 'BUTTON','&Icon',-1,10,15,120,100,WS_VISIBLE+BS_GROUPBOX
   dialogitem 'BUTTON','The first horse',ID_HORSE1,20,30,90,13,WS_VISIBLE+BS_AUTORADIOBUTTON
    dialogitem 'BUTTON','The second horse',ID_HORSE2,20,55,90,13,WS_VISIBLE+BS_AUTORADIOBUTTON
    dialogitem 'BUTTON','The third horse',ID_HORSE3,20,80,90,13,WS_VISIBLE+BS_AUTORADIOBUTTON
    dialogitem 'BUTTON','OK',IDOK,85,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON
    dialogitem 'BUTTON','C&ancel',IDCANCEL,135,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON
  enddialog
fallti вне форума Ответить с цитированием
Старый 15.12.2010, 19:29   #2
fallti
 
Регистрация: 10.05.2010
Сообщений: 8
По умолчанию

продолжение
Код:
;--------------------------------------------
;"Минимальный генератор Парка-Миллера" (Minimal portable random generator by Park and Miller).
;---------------------------------------------
; Park Miller random number algorithm 
; Получить случайное число 0 ... 99999 
; stdcall WRandom 
; на выходе EAX - случайное число  
;--------------------------------------------- 
proc    WRandom 
        push    edx ecx 
        mov     eax,[random_seed] 
        xor     edx,edx 
        mov     ecx,127773 
        div     ecx 
        mov     ecx,eax 
        mov     eax,16807 
        mul     edx 
        mov     edx,ecx 
        mov     ecx,eax 
        mov     eax,2836 
        mul     edx 
        sub     ecx,eax 
        xor     edx,edx 
        mov     eax,ecx 
        mov     [random_seed],ecx 
        mov     ecx,100000 
        div     ecx 
        mov     eax,edx 
        pop     ecx edx 
        ret 
endp 
;---------------------------------------------
; Инициализация генератора случайных чисел 
; stdcall WRandomInit  
;--------------------------------------------- 
proc    WRandomInit 
        push    eax edx 
        rdtsc 
        xor     eax,edx 
        mov     [random_seed],eax 
        pop     edx eax 
        ret 
endp
 ;---------------------------------------------
; Получить случайное число в нужном интервале 
; Требуется процедура WRandom 
; stdcall WIRandom,min,max 
; на выходе EAX - случайное число    
;--------------------------------------------- 
proc    WIRandom rmin:dword,rmax:dword 
        push    edx ecx 
        mov     ecx,[rmax] 
        sub     ecx,[rmin] 
        inc     ecx 
        stdcall WRandom 
        xor     edx,edx 
        div     ecx 
        mov     eax,edx 
        add     eax,[rmin] 
        pop     ecx edx 
        ret 
endp
fallti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37