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