Задание такое - имеем три лошади. Игрок делает ставку на одну из них. Лошадь победитель определяется гениратором случайных чисел.
Ставку игрок делает с помощью селективной кнопки. И вот с реализацие этой кнопки у меня проблемы.
Код:
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