|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
LE JEU DES 24 BOÎTES DE L'HOMME MYSTÉRIEUX [MASM]
Information sur la source
Description
C'est un jeu télé qui circule un peu partout dans les pays. Vous le reconnaîtrez immédiatement. Cependant, l'adaptation n'est pas fidèle à 100%. De toute façon, je ne connais pas les règles exactes, et puis on s'en fiche du moment qu'on n'a pas l'impression de faire un jeu de l'oie :D
L'application est Console avec un 386.
Aucun bug connu n'est actuellement à ma connaissance.
Amusez-vous bien... [car c'est pas facile !]
Source
- .386
- .model flat, stdcall
- option casemap :none
- include \masm32\include\windows.inc ; y'a sûrement encore plus de déclarations que nécessaire...
- include \masm32\macros\macros.asm
- include \masm32\include\masm32.inc
- include \masm32\include\gdi32.inc
- include \masm32\include\user32.inc
- include \masm32\include\kernel32.inc
- includelib \masm32\lib\masm32.lib
- includelib \masm32\lib\gdi32.lib
- includelib \masm32\lib\user32.lib
- includelib \masm32\lib\kernel32.lib
-
-
- .const
-
- SCrLf EQU 13,10
- SSeparator EQU "---------------------------------------------------"
- BNbBoxes DB 24d
- AWinnings DD 0, 0, 0, 1, 5, 10, 20, 50, 150, 300, 700,
- 1500, 3000, 5000, 7500, 10000, 12500, 15000,
- 20000, 25000, 50000, 100000, 200000, 500000
- ADrawByRound DB 4,4,4,3,3,3,1,0
- SHeader DB "===[ LE JEU DES 24 BO×TES ]========================[ MASM32 ]===========",SCrLf,SCrLf,SCrLf,0
- SChooseBox EQU " Veuillez choisir votre boŒte parmi les 24 disponibles : ",0
- SAverageWin DB SCrLf," L'esp‚rance des gains … ce jeu est de %d euros !",SCrLf,SCrLf,
- " Et ‡a fond comme neige au soleil...",SCrLf,SCrLf,SCrLf,0
- SMenuChoice DB " Liste des actions :",SCrLf,SCrLf,
- " 1) Voir les boŒtes restantes",SCrLf,
- " 2) Voir les sommes restantes",SCrLf,
- " 3) perdues",SCrLf,SCrLf,
- " 4) Choisir des boŒtes",SCrLf,
- " 5) N‚gocier avec l'homme myst‚rieux",SCrLf,SCrLf,
- " 6) Nouvelle partie",SCrLf,
- " 7) Quitter le jeu / Repartir avec votre boŒte",SCrLf,SCrLf,
- SSeparator,SCrLf,SCrLf,0
- SPrompt EQU "> ",0
- SQuitContinue EQU "Continuer ? (0/1) ",0
- SBoxContains DB SCrLf,
- " ______" ,SCrLf,
- " / /| La boŒte contenait :" ,SCrLf,
- " /_____/ |" ,SCrLf,
- " | | | %d euros" ,SCrLf,
- " | | /" ,SCrLf,
- " -------/" ,SCrLf,
- SCrLf,0
- SYourBoxIs DB " Votre boŒte est la Nø%d",SCrLf,0
- STextRemainBox DB "Voici les boŒtes restantes :",SCrLf,SCrLf,0
- SRestBox DB SCrLf," Il en reste %d.",SCrLf,0
- SBoxList DB "%s %d",0
- SNewLine DB "%s",SCrLf,0
- SAddSpace DB "%s ",0
- STextRemainWin DB " Voici les gains restants :",SCrLf,0
- STextLostWin DB " Voici les gains perdus :",SCrLf,0
- SAddWin DB "%s",SCrLf," %d",0
- SWhichBox DB "Choisissez %d boŒtes :",SCrLf,SCrLf,0
- SChoseOneBox DB "Choisissez 1 boŒte :",SCrLf,0
- SBankHasSomething DB SCrLf," --> L'homme myst‚rieux veut vous parler...",SCrLf,0
- SConfirmNewGame DB " Òtes vous s–r(e) de vouloir relancer une nouvelle partie (0/1) ?",SCrLf,SCrLf,0
- SDealBoxExchange DB " Il propose d'‚changer votre boŒte. Cela vous convient-il ? (0/1)",SCrLf,0
- SDealMoney DB " Il vous achŠte votre boŒte au prix de %d Euros.",SCrLf,
- " Si vous acceptez, la partie se termine et vous remportez cette somme.",SCrLf,SCrLf,
- " Votre choix (0/1) : ",SCrLf,0
- SLastBox DB " Ceci ‚tait votre derniŠre boŒte...",SCrLf,
- " Vous allez maintenant savoir ce que vous avez ""gagn‚"".",SCrLf,0
- SBoxHad DB SCrLf,SCrLf," --> Votre boŒte contenait %d euros.",SCrLf,0
- SEndOfGame DB " F‚licitations !!",SCrLf,SCrLf,
- " Vous repartez avec la somme de %d euros !",SCrLf,
- " Votre boŒte contenait : %d euros",SCrLf,SCrLf,SCrLf,
- " Pas la peine de sauter au plafond, vous ne receverez jamais ce chŠque ;D",SCrLf,
- " Ce jeu ASM est juste une adaptation ""for the fun"" de ce jeu europ‚en.",SCrLf,SCrLf,SCrLf,
- " Malgr‚ tout, c'est stressant de jouer !)",SCrLf,SCrLf,SCrLf,SCrLf,
- " Bonne chance … vous pour la prochaine partie ...",SCrLf,SCrLf,0
- SWinOfGame DB " F‚licitations !!",SCrLf, SCrLf,
- " Vous ˆtes arriv‚ … la derniŠre boŒte qui renferme la modique somme de :",SCrLf,SCrLf,
- " %d euros",SCrLf,SCrLf,SCrLf,
- " PS: cet argent est simplement pour vos rˆves et fantasmes... :Q",SCrLf,SCrLf,SCrLf,SCrLf,
- " Ce jeu ASM est juste une adaptation ""for the fun"" de ce jeu europ‚en.",SCrLf,SCrLf,SCrLf,
- " Une nouvelle partie va ˆtre imm‚diatement charg‚e !",SCrLf,SCrLf,
- " Bonne chance … vous ! ...",SCrLf,SCrLf,0
- SKeyForEnd DB SCrLf," Appuyez sur Entr‚e pour quitter le jeu...",0
- SErrorAlreadyChosen DB " D‚j… choisie... recommencez !",SCrLf,0
- SErrorUnavailable DB " Non disponible... recommmencez !",SCrLf,0
- SErrorIsUserBox DB " Vous ne pouvez pas choisir votre propre boŒte... recommencez !",SCrLf,0
- SErrorInterval DB " Le num‚ro de la boŒte est incorrect... recommencez !",SCrLf,0
- SErrorNoDealNow DB " L'homme myst‚rieux est absent.",SCrLf," Tirez plut“t des boŒtes !",SCrLf,0
- SOfferYesDealNow DB " L'homme myst‚rieux a une offre pour vous.",SCrLf," Allez le rencontrer...",SCrLf,0
- SNoError DB " OK",SCrLf,0
-
-
- .data?
-
- RandBase DD ?
- ABoxValue DB 24 dup(?)
- ABoxAvailable DB 24 dup(?)
- BUserBox DB ?
- SOutput DB 1024 dup(?)
- BNbBoxesToChoose DB ?
- BAllowDeal DB ?
- BRoundID DB ?
- DWon DD ?
-
-
- .code
-
- Randomize proc
- CALL GetTickCount
- MOV RandBase, EAX
- RET
- Randomize endp
-
-
- Random proc
- MOVZX EAX, BNbBoxes
- IMUL EDX, RandBase, 08088405h
- INC EDX
- MOV RandBase, EDX
- MUL EDX
- MOV EAX, EDX
- RET
- Random endp
-
-
- InitGame proc
- OR BUserBox, 0FFh
- AND BRoundID, 00h
- AND BAllowDeal, 00h
- LEA EAX, ABoxValue
- LEA EDX, ABoxAvailable
- MOV ECX, 6d
- @@:
- AND DWord PTR [EAX], 00000000h
- OR DWord PTR [EDX], 0FFFFFFFFh
- ADD EAX, 4d
- ADD EDX, 4d
- DEC ECX
- JNZ @B
- RET
- InitGame endp
-
-
- GenerateBoxes proc uses EBX
- PUSH OFFSET ABoxAvailable
- PUSH OFFSET ABoxValue
- PUSH OFFSET AWinnings
- MOVZX ECX, BNbBoxes
- @@:
- CALL Random
- MOV EBX, [ESP+8]
- ADD EBX, EAX
- MOVZX EDX, Byte PTR [EBX]
- CMP DL, 00h
- JE @B
- AND Byte PTR [EBX], 00h
- MOV EBX, [ESP+4]
- ADD EBX, EAX
- MOV Byte PTR [EBX], CL
- DEC Byte PTR [EBX]
- DEC CL
- JNZ @B
- MOV EDX, 6d
- @@:
- OR DWord PTR [ABoxAvailable + 4*EDX - 4], 0FFFFFFFFh
- DEC EDX
- JNZ @B
- ADD ESP, 12d
- RET
- GenerateBoxes endp
-
-
- GetUserWinnings proc
- MOVZX EAX, BUserBox
- MOVZX EAX, Byte PTR [ABoxValue + EAX]
- MOV EAX, DWord PTR [AWinnings + 4*EAX]
- RET
- GetUserWinnings endp
-
-
- ShowHeader proc
- cls
- invoke StdOut, ADDR SHeader
- RET
- ShowHeader endp
-
-
- Welcome proc
- @NewWelcome:
- CALL ShowHeader
- XOR EAX, EAX
- MOVZX ECX, BNbBoxes
- @@:
- MOV EDX, DWord PTR [AWinnings + 4*ECX - 4]
- ADD EAX, EDX
- DEC ECX
- JNZ @B
- XOR EDX, EDX
- MOVZX ECX, BNbBoxes
- DIV ECX
- invoke wsprintf, ADDR SOutput, ADDR SAverageWin, EAX
- invoke StdOut, ADDR SOutput
- MOV EAX, sval(input(SChooseBox))
- DEC EAX
- CMP AL, BNbBoxes
- JAE @NewWelcome
- MOV BUserBox, AL
- RET
- Welcome endp
-
-
- Menu proc
- @@:
- CALL ShowHeader
- MOVZX EAX, BUserBox
- INC EAX
- invoke wsprintf, ADDR SOutput, ADDR SYourBoxIs, EAX
- invoke StdOut, ADDR SOutput
- CALL CountRemainingBoxes
- invoke wsprintf, ADDR SOutput, ADDR SRestBox, EAX
- invoke StdOut, ADDR SOutput
- print chr$(SCrLf,SCrLf)
- invoke StdOut, ADDR SMenuChoice
- MOV EAX, sval(input(SPrompt))
- PUSH EAX
- print chr$(SCrLf,SCrLf)
- POP EAX
- .IF EAX == 1d
- CALL ShowRemainingBoxes
- JMP @B
- .ELSEIF AL==2d
- PUSH Byte PTR 0FFh
- CALL ShowWinnings
- JMP @B
- .ELSEIF AL==3d
- PUSH Byte PTR 00h
- CALL ShowWinnings
- JMP @B
- .ELSEIF AL==4d
- CALL ChooseBox
- JMP @B
- .ELSEIF AL==5d
- CALL MakeDeal
- JMP @B
- .ELSEIF AL==6d
- CALL NewGame
- JMP @B
- .ELSEIF AL==7d
- MOV EAX, sval(input(SQuitContinue))
- .IF EAX == 1d
- CALL GetUserWinnings
- invoke wsprintf, ADDR SOutput, ADDR SBoxHad, EAX
- invoke StdOut, ADDR SOutput
- invoke StdOut, ADDR SKeyForEnd
- .ELSE
- JMP @B
- .ENDIF
- .ELSE
- JMP @B
- .ENDIF
- MOV EAX, input(0)
- RET
- Menu endp
-
-
- CountRemainingBoxes proc
- XOR EAX, EAX
- MOVZX ECX, BNbBoxes
- @@:
- .IF Byte PTR [ABoxAvailable + ECX - 1] == 0FFh
- INC AL
- .ENDIF
- DEC CL
- JNZ @B
- RET
- CountRemainingBoxes endp
-
-
- ShowRemainingBoxes proc
- LOCAL BIndex:Byte
- LOCAL BCount:Byte
- invoke StdOut, ADDR STextRemainBox
- PUSH OFFSET ABoxAvailable
- AND BIndex, 00h
- AND BCount, 00h
- AND Byte PTR [SOutput], 00h
- @StartBox:
- MOV EAX, [ESP]
- MOVZX ECX, BIndex
- CMP Byte PTR [EAX+ECX], 0FFh
- JNE @F
- CMP CL, BUserBox
- JE @F
- INC ECX
- .IF ECX < 10
- PUSH ECX
- invoke wsprintf, ADDR SOutput, ADDR SAddSpace, ADDR SOutput
- POP ECX
- .ENDIF
- invoke wsprintf, ADDR SOutput, ADDR SBoxList, ADDR SOutput, ECX
- INC BCount
- .IF BCount == 6d
- invoke wsprintf, ADDR SOutput, ADDR SNewLine, ADDR SOutput
- AND BCount, 00h
- .ENDIF
- @@:
- INC BIndex
- MOV AL, BIndex
- CMP AL, BNbBoxes
- JNE @StartBox
- invoke StdOut, ADDR SOutput
- print chr$(SCrLf,SCrLf)
- MOV EAX, input(0)
- ADD ESP, 4d
- RET
- ShowRemainingBoxes endp
-
-
- BoxToPosition proc uses ECX BRequiredBox:Byte
- MOVZX ECX, BNbBoxes
- OR EAX, 0FFFFFFFFh
- @@:
- MOV DL, Byte PTR [ABoxValue + ECX - 1]
- .IF DL == BRequiredBox
- MOV EAX, ECX
- DEC AL
- JMP @F
- .ENDIF
- DEC CL
- JNZ @B
- @@:
- RET
- BoxToPosition endp
-
-
- ShowWinnings proc BType:Byte
- .IF BType == 0FFh
- invoke StdOut, ADDR STextRemainWin
- .ELSEIF
- invoke StdOut, ADDR STextLostWin
- .ENDIF
- XOR ECX, ECX
- AND Byte PTR [SOutput], 00h
- @@:
- invoke BoxToPosition, CL
- MOV DL, Byte PTR [ABoxAvailable + EAX]
- .IF DL == BType
- MOV EAX, DWord PTR [AWinnings + 4*ECX]
- PUSH ECX
- invoke wsprintf, ADDR SOutput, ADDR SAddWin, ADDR SOutput, EAX
- POP ECX
- .ENDIF
- INC CL
- CMP CL, BNbBoxes
- JNE @B
- invoke wsprintf, ADDR SOutput, ADDR SNewLine, ADDR SOutput
- invoke StdOut, ADDR SOutput
- MOV EAX, input(0)
- RET
- ShowWinnings endp
-
-
- ChooseBox proc
- .IF BAllowDeal != 00h
- invoke StdOut, ADDR SOfferYesDealNow
- JMP @NoMore
- .ENDIF
- MOVZX EAX, BRoundID
- MOVZX EAX, Byte PTR [ADrawByRound + EAX]
- MOV BNbBoxesToChoose, AL
- invoke wsprintf, ADDR SOutput, ADDR SWhichBox, EAX
- invoke StdOut, ADDR SOutput
- @@:
- MOV EAX, sval(input(SPrompt))
- AND EAX, 0FFh
- DEC AL
- .IF AL >= BNbBoxes
- invoke StdOut, ADDR SErrorInterval
- JMP @B
- .ENDIF
- .IF AL == BUserBox
- invoke StdOut, ADDR SErrorIsUserBox
- JMP @B
- .ENDIF
- .IF Byte PTR [ABoxAvailable + EAX] == 00h
- invoke StdOut, ADDR SErrorAlreadyChosen
- JMP @B
- .ENDIF
- AND Byte PTR [ABoxAvailable + EAX], 00h
- MOVZX EDX, Byte PTR [ABoxValue + EAX]
- MOV EAX, DWord PTR [AWinnings + 4*EDX]
- invoke wsprintf, ADDR SOutput, ADDR SBoxContains, EAX
- invoke StdOut, ADDR SOutput
- DEC BNbBoxesToChoose
- JNZ @B
- NOT BAllowDeal
- INC BRoundID
- invoke StdOut, ADDR SBankHasSomething
- CALL CountRemainingBoxes
- .IF AL == 2d
- print chr$(SCrLf,SCrLf)
- invoke StdOut, ADDR SLastBox
- MOV EAX, input(0)
- CALL ShowHeader
- CALL GetUserWinnings
- invoke wsprintf, ADDR SOutput, ADDR SWinOfGame, EAX
- invoke StdOut, ADDR SOutput
- MOV EAX, input(0)
- ADD ESP, 4d
- JMP start
- .ENDIF
- @NoMore:
- MOV EAX, input(0)
- RET
- ChooseBox endp
-
-
- CalcDeal proc
- LOCAL BNumber:Byte
- AND BNumber, 00h
- XOR EAX, EAX
- MOVZX ECX, BNbBoxes
- @@:
- .IF (Byte PTR [ABoxAvailable + ECX - 1] != 00h) && (CL != BUserBox)
- MOVZX EDX, Byte PTR [ABoxValue + ECX - 1]
- MOV EDX, DWord PTR [AWinnings + 4*EDX]
- ADD EAX, EDX
- INC BNumber
- .ENDIF
- DEC ECX
- JNZ @B
- XOR EDX, EDX
- MOVZX ECX, BNumber
- DIV ECX
- MOV ECX, 100d
- XOR EDX, EDX
- DIV ECX
- MUL ECX
- RET
- CalcDeal endp
-
-
- MakeDeal proc
- .IF BAllowDeal == 00h
- invoke StdOut, ADDR SErrorNoDealNow
- JMP @QuitWithConfirm
- .ENDIF
- .IF (BRoundID == 3d) || (BRoundID == 6d)
- .IF BRoundID == 6d
- OR EAX, 0FFFFFFFFh
- CALL Random
- AND EAX, 1b
- CMP AL, 00h
- JE @AskForMoney
- .ENDIF
- invoke StdOut, ADDR SDealBoxExchange
- MOV EAX, sval(input(SPrompt))
- CMP AL, 1d
- JNE @QuitNoConfirm
- print chr$(SCrLf,SCrLf)
- invoke StdOut, ADDR SChoseOneBox
- @@:
- MOV EAX, sval(input(SPrompt))
- AND EAX, 0FFh
- DEC AL
- .IF AL >= BNbBoxes
- invoke StdOut, ADDR SErrorInterval
- JMP @B
- .ENDIF
- .IF AL == BUserBox
- invoke StdOut, ADDR SErrorIsUserBox
- JMP @B
- .ENDIF
- .IF Byte PTR [ABoxAvailable + EAX] == 00h
- invoke StdOut, ADDR SErrorUnavailable
- JMP @B
- .ENDIF
- MOV BUserBox, AL
- .ELSEIF
- @AskForMoney:
- CALL CalcDeal
- MOV DWon, EAX
- invoke wsprintf, ADDR SOutput, ADDR SDealMoney, EAX
- invoke StdOut, ADDR SOutput
- MOV EAX, sval(input(SPrompt))
- .IF AL == 1d
- CALL ShowHeader
- CALL GetUserWinnings
- invoke wsprintf, ADDR SOutput, ADDR SEndOfGame, DWon, EAX
- invoke StdOut, ADDR SOutput
- MOV EAX, input(0)
- ADD ESP, 4d
- JMP start
- .ENDIF
- .ENDIF
- @QuitNoConfirm:
- NOT BAllowDeal
- RET
- @QuitWithConfirm:
- MOV EAX, input(0)
- RET
- MakeDeal endp
-
-
- NewGame proc
- invoke StdOut, ADDR SConfirmNewGame
- MOV EAX, sval(input(SPrompt))
- CMP AL, 1d
- JE @F
- RET
- @@:
- CALL GetUserWinnings
- invoke wsprintf, ADDR SOutput, ADDR SBoxHad, EAX
- invoke StdOut, ADDR SOutput
- MOV EAX, input(0)
- ADD ESP, 4d
- NewGame endp
-
-
- start:
-
- CALL Randomize
- CALL InitGame
- CALL GenerateBoxes
- CALL Welcome
- CALL Menu
-
- exit
- end start
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc ; y'a sûrement encore plus de déclarations que nécessaire...
include \masm32\macros\macros.asm
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.const
SCrLf EQU 13,10
SSeparator EQU "---------------------------------------------------"
BNbBoxes DB 24d
AWinnings DD 0, 0, 0, 1, 5, 10, 20, 50, 150, 300, 700,
1500, 3000, 5000, 7500, 10000, 12500, 15000,
20000, 25000, 50000, 100000, 200000, 500000
ADrawByRound DB 4,4,4,3,3,3,1,0
SHeader DB "===[ LE JEU DES 24 BO×TES ]========================[ MASM32 ]===========",SCrLf,SCrLf,SCrLf,0
SChooseBox EQU " Veuillez choisir votre boŒte parmi les 24 disponibles : ",0
SAverageWin DB SCrLf," L'esp‚rance des gains … ce jeu est de %d euros !",SCrLf,SCrLf,
" Et ‡a fond comme neige au soleil...",SCrLf,SCrLf,SCrLf,0
SMenuChoice DB " Liste des actions :",SCrLf,SCrLf,
" 1) Voir les boŒtes restantes",SCrLf,
" 2) Voir les sommes restantes",SCrLf,
" 3) perdues",SCrLf,SCrLf,
" 4) Choisir des boŒtes",SCrLf,
" 5) N‚gocier avec l'homme myst‚rieux",SCrLf,SCrLf,
" 6) Nouvelle partie",SCrLf,
" 7) Quitter le jeu / Repartir avec votre boŒte",SCrLf,SCrLf,
SSeparator,SCrLf,SCrLf,0
SPrompt EQU "> ",0
SQuitContinue EQU "Continuer ? (0/1) ",0
SBoxContains DB SCrLf,
" ______" ,SCrLf,
" / /| La boŒte contenait :" ,SCrLf,
" /_____/ |" ,SCrLf,
" | | | %d euros" ,SCrLf,
" | | /" ,SCrLf,
" -------/" ,SCrLf,
SCrLf,0
SYourBoxIs DB " Votre boŒte est la Nø%d",SCrLf,0
STextRemainBox DB "Voici les boŒtes restantes :",SCrLf,SCrLf,0
SRestBox DB SCrLf," Il en reste %d.",SCrLf,0
SBoxList DB "%s %d",0
SNewLine DB "%s",SCrLf,0
SAddSpace DB "%s ",0
STextRemainWin DB " Voici les gains restants :",SCrLf,0
STextLostWin DB " Voici les gains perdus :",SCrLf,0
SAddWin DB "%s",SCrLf," %d",0
SWhichBox DB "Choisissez %d boŒtes :",SCrLf,SCrLf,0
SChoseOneBox DB "Choisissez 1 boŒte :",SCrLf,0
SBankHasSomething DB SCrLf," --> L'homme myst‚rieux veut vous parler...",SCrLf,0
SConfirmNewGame DB " Òtes vous s–r(e) de vouloir relancer une nouvelle partie (0/1) ?",SCrLf,SCrLf,0
SDealBoxExchange DB " Il propose d'‚changer votre boŒte. Cela vous convient-il ? (0/1)",SCrLf,0
SDealMoney DB " Il vous achŠte votre boŒte au prix de %d Euros.",SCrLf,
" Si vous acceptez, la partie se termine et vous remportez cette somme.",SCrLf,SCrLf,
" Votre choix (0/1) : ",SCrLf,0
SLastBox DB " Ceci ‚tait votre derniŠre boŒte...",SCrLf,
" Vous allez maintenant savoir ce que vous avez ""gagn‚"".",SCrLf,0
SBoxHad DB SCrLf,SCrLf," --> Votre boŒte contenait %d euros.",SCrLf,0
SEndOfGame DB " F‚licitations !!",SCrLf,SCrLf,
" Vous repartez avec la somme de %d euros !",SCrLf,
" Votre boŒte contenait : %d euros",SCrLf,SCrLf,SCrLf,
" Pas la peine de sauter au plafond, vous ne receverez jamais ce chŠque ;D",SCrLf,
" Ce jeu ASM est juste une adaptation ""for the fun"" de ce jeu europ‚en.",SCrLf,SCrLf,SCrLf,
" Malgr‚ tout, c'est stressant de jouer !)",SCrLf,SCrLf,SCrLf,SCrLf,
" Bonne chance … vous pour la prochaine partie ...",SCrLf,SCrLf,0
SWinOfGame DB " F‚licitations !!",SCrLf, SCrLf,
" Vous ˆtes arriv‚ … la derniŠre boŒte qui renferme la modique somme de :",SCrLf,SCrLf,
" %d euros",SCrLf,SCrLf,SCrLf,
" PS: cet argent est simplement pour vos rˆves et fantasmes... :Q",SCrLf,SCrLf,SCrLf,SCrLf,
" Ce jeu ASM est juste une adaptation ""for the fun"" de ce jeu europ‚en.",SCrLf,SCrLf,SCrLf,
" Une nouvelle partie va ˆtre imm‚diatement charg‚e !",SCrLf,SCrLf,
" Bonne chance … vous ! ...",SCrLf,SCrLf,0
SKeyForEnd DB SCrLf," Appuyez sur Entr‚e pour quitter le jeu...",0
SErrorAlreadyChosen DB " D‚j… choisie... recommencez !",SCrLf,0
SErrorUnavailable DB " Non disponible... recommmencez !",SCrLf,0
SErrorIsUserBox DB " Vous ne pouvez pas choisir votre propre boŒte... recommencez !",SCrLf,0
SErrorInterval DB " Le num‚ro de la boŒte est incorrect... recommencez !",SCrLf,0
SErrorNoDealNow DB " L'homme myst‚rieux est absent.",SCrLf," Tirez plut“t des boŒtes !",SCrLf,0
SOfferYesDealNow DB " L'homme myst‚rieux a une offre pour vous.",SCrLf," Allez le rencontrer...",SCrLf,0
SNoError DB " OK",SCrLf,0
.data?
RandBase DD ?
ABoxValue DB 24 dup(?)
ABoxAvailable DB 24 dup(?)
BUserBox DB ?
SOutput DB 1024 dup(?)
BNbBoxesToChoose DB ?
BAllowDeal DB ?
BRoundID DB ?
DWon DD ?
.code
Randomize proc
CALL GetTickCount
MOV RandBase, EAX
RET
Randomize endp
Random proc
MOVZX EAX, BNbBoxes
IMUL EDX, RandBase, 08088405h
INC EDX
MOV RandBase, EDX
MUL EDX
MOV EAX, EDX
RET
Random endp
InitGame proc
OR BUserBox, 0FFh
AND BRoundID, 00h
AND BAllowDeal, 00h
LEA EAX, ABoxValue
LEA EDX, ABoxAvailable
MOV ECX, 6d
@@:
AND DWord PTR [EAX], 00000000h
OR DWord PTR [EDX], 0FFFFFFFFh
ADD EAX, 4d
ADD EDX, 4d
DEC ECX
JNZ @B
RET
InitGame endp
GenerateBoxes proc uses EBX
PUSH OFFSET ABoxAvailable
PUSH OFFSET ABoxValue
PUSH OFFSET AWinnings
MOVZX ECX, BNbBoxes
@@:
CALL Random
MOV EBX, [ESP+8]
ADD EBX, EAX
MOVZX EDX, Byte PTR [EBX]
CMP DL, 00h
JE @B
AND Byte PTR [EBX], 00h
MOV EBX, [ESP+4]
ADD EBX, EAX
MOV Byte PTR [EBX], CL
DEC Byte PTR [EBX]
DEC CL
JNZ @B
MOV EDX, 6d
@@:
OR DWord PTR [ABoxAvailable + 4*EDX - 4], 0FFFFFFFFh
DEC EDX
JNZ @B
ADD ESP, 12d
RET
GenerateBoxes endp
GetUserWinnings proc
MOVZX EAX, BUserBox
MOVZX EAX, Byte PTR [ABoxValue + EAX]
MOV EAX, DWord PTR [AWinnings + 4*EAX]
RET
GetUserWinnings endp
ShowHeader proc
cls
invoke StdOut, ADDR SHeader
RET
ShowHeader endp
Welcome proc
@NewWelcome:
CALL ShowHeader
XOR EAX, EAX
MOVZX ECX, BNbBoxes
@@:
MOV EDX, DWord PTR [AWinnings + 4*ECX - 4]
ADD EAX, EDX
DEC ECX
JNZ @B
XOR EDX, EDX
MOVZX ECX, BNbBoxes
DIV ECX
invoke wsprintf, ADDR SOutput, ADDR SAverageWin, EAX
invoke StdOut, ADDR SOutput
MOV EAX, sval(input(SChooseBox))
DEC EAX
CMP AL, BNbBoxes
JAE @NewWelcome
MOV BUserBox, AL
RET
Welcome endp
Menu proc
@@:
CALL ShowHeader
MOVZX EAX, BUserBox
INC EAX
invoke wsprintf, ADDR SOutput, ADDR SYourBoxIs, EAX
invoke StdOut, ADDR SOutput
CALL CountRemainingBoxes
invoke wsprintf, ADDR SOutput, ADDR SRestBox, EAX
invoke StdOut, ADDR SOutput
print chr$(SCrLf,SCrLf)
invoke StdOut, ADDR SMenuChoice
MOV EAX, sval(input(SPrompt))
PUSH EAX
print chr$(SCrLf,SCrLf)
POP EAX
.IF EAX == 1d
CALL ShowRemainingBoxes
JMP @B
.ELSEIF AL==2d
PUSH Byte PTR 0FFh
CALL ShowWinnings
JMP @B
.ELSEIF AL==3d
PUSH Byte PTR 00h
CALL ShowWinnings
JMP @B
.ELSEIF AL==4d
CALL ChooseBox
JMP @B
.ELSEIF AL==5d
CALL MakeDeal
JMP @B
.ELSEIF AL==6d
CALL NewGame
JMP @B
.ELSEIF AL==7d
MOV EAX, sval(input(SQuitContinue))
.IF EAX == 1d
CALL GetUserWinnings
invoke wsprintf, ADDR SOutput, ADDR SBoxHad, EAX
invoke StdOut, ADDR SOutput
invoke StdOut, ADDR SKeyForEnd
.ELSE
JMP @B
.ENDIF
.ELSE
JMP @B
.ENDIF
MOV EAX, input(0)
RET
Menu endp
CountRemainingBoxes proc
XOR EAX, EAX
MOVZX ECX, BNbBoxes
@@:
.IF Byte PTR [ABoxAvailable + ECX - 1] == 0FFh
INC AL
.ENDIF
DEC CL
JNZ @B
RET
CountRemainingBoxes endp
ShowRemainingBoxes proc
LOCAL BIndex:Byte
LOCAL BCount:Byte
invoke StdOut, ADDR STextRemainBox
PUSH OFFSET ABoxAvailable
AND BIndex, 00h
AND BCount, 00h
AND Byte PTR [SOutput], 00h
@StartBox:
MOV EAX, [ESP]
MOVZX ECX, BIndex
CMP Byte PTR [EAX+ECX], 0FFh
JNE @F
CMP CL, BUserBox
JE @F
INC ECX
.IF ECX < 10
PUSH ECX
invoke wsprintf, ADDR SOutput, ADDR SAddSpace, ADDR SOutput
POP ECX
.ENDIF
invoke wsprintf, ADDR SOutput, ADDR SBoxList, ADDR SOutput, ECX
INC BCount
.IF BCount == 6d
invoke wsprintf, ADDR SOutput, ADDR SNewLine, ADDR SOutput
AND BCount, 00h
.ENDIF
@@:
INC BIndex
MOV AL, BIndex
CMP AL, BNbBoxes
JNE @StartBox
invoke StdOut, ADDR SOutput
print chr$(SCrLf,SCrLf)
MOV EAX, input(0)
ADD ESP, 4d
RET
ShowRemainingBoxes endp
BoxToPosition proc uses ECX BRequiredBox:Byte
MOVZX ECX, BNbBoxes
OR EAX, 0FFFFFFFFh
@@:
MOV DL, Byte PTR [ABoxValue + ECX - 1]
.IF DL == BRequiredBox
MOV EAX, ECX
DEC AL
JMP @F
.ENDIF
DEC CL
JNZ @B
@@:
RET
BoxToPosition endp
ShowWinnings proc BType:Byte
.IF BType == 0FFh
invoke StdOut, ADDR STextRemainWin
.ELSEIF
invoke StdOut, ADDR STextLostWin
.ENDIF
XOR ECX, ECX
AND Byte PTR [SOutput], 00h
@@:
invoke BoxToPosition, CL
MOV DL, Byte PTR [ABoxAvailable + EAX]
.IF DL == BType
MOV EAX, DWord PTR [AWinnings + 4*ECX]
PUSH ECX
invoke wsprintf, ADDR SOutput, ADDR SAddWin, ADDR SOutput, EAX
POP ECX
.ENDIF
INC CL
CMP CL, BNbBoxes
JNE @B
invoke wsprintf, ADDR SOutput, ADDR SNewLine, ADDR SOutput
invoke StdOut, ADDR SOutput
MOV EAX, input(0)
RET
ShowWinnings endp
ChooseBox proc
.IF BAllowDeal != 00h
invoke StdOut, ADDR SOfferYesDealNow
JMP @NoMore
.ENDIF
MOVZX EAX, BRoundID
MOVZX EAX, Byte PTR [ADrawByRound + EAX]
MOV BNbBoxesToChoose, AL
invoke wsprintf, ADDR SOutput, ADDR SWhichBox, EAX
invoke StdOut, ADDR SOutput
@@:
MOV EAX, sval(input(SPrompt))
AND EAX, 0FFh
DEC AL
.IF AL >= BNbBoxes
invoke StdOut, ADDR SErrorInterval
JMP @B
.ENDIF
.IF AL == BUserBox
invoke StdOut, ADDR SErrorIsUserBox
JMP @B
.ENDIF
.IF Byte PTR [ABoxAvailable + EAX] == 00h
invoke StdOut, ADDR SErrorAlreadyChosen
JMP @B
.ENDIF
AND Byte PTR [ABoxAvailable + EAX], 00h
MOVZX EDX, Byte PTR [ABoxValue + EAX]
MOV EAX, DWord PTR [AWinnings + 4*EDX]
invoke wsprintf, ADDR SOutput, ADDR SBoxContains, EAX
invoke StdOut, ADDR SOutput
DEC BNbBoxesToChoose
JNZ @B
NOT BAllowDeal
INC BRoundID
invoke StdOut, ADDR SBankHasSomething
CALL CountRemainingBoxes
.IF AL == 2d
print chr$(SCrLf,SCrLf)
invoke StdOut, ADDR SLastBox
MOV EAX, input(0)
CALL ShowHeader
CALL GetUserWinnings
invoke wsprintf, ADDR SOutput, ADDR SWinOfGame, EAX
invoke StdOut, ADDR SOutput
MOV EAX, input(0)
ADD ESP, 4d
JMP start
.ENDIF
@NoMore:
MOV EAX, input(0)
RET
ChooseBox endp
CalcDeal proc
LOCAL BNumber:Byte
AND BNumber, 00h
XOR EAX, EAX
MOVZX ECX, BNbBoxes
@@:
.IF (Byte PTR [ABoxAvailable + ECX - 1] != 00h) && (CL != BUserBox)
MOVZX EDX, Byte PTR [ABoxValue + ECX - 1]
MOV EDX, DWord PTR [AWinnings + 4*EDX]
ADD EAX, EDX
INC BNumber
.ENDIF
DEC ECX
JNZ @B
XOR EDX, EDX
MOVZX ECX, BNumber
DIV ECX
MOV ECX, 100d
XOR EDX, EDX
DIV ECX
MUL ECX
RET
CalcDeal endp
MakeDeal proc
.IF BAllowDeal == 00h
invoke StdOut, ADDR SErrorNoDealNow
JMP @QuitWithConfirm
.ENDIF
.IF (BRoundID == 3d) || (BRoundID == 6d)
.IF BRoundID == 6d
OR EAX, 0FFFFFFFFh
CALL Random
AND EAX, 1b
CMP AL, 00h
JE @AskForMoney
.ENDIF
invoke StdOut, ADDR SDealBoxExchange
MOV EAX, sval(input(SPrompt))
CMP AL, 1d
JNE @QuitNoConfirm
print chr$(SCrLf,SCrLf)
invoke StdOut, ADDR SChoseOneBox
@@:
MOV EAX, sval(input(SPrompt))
AND EAX, 0FFh
DEC AL
.IF AL >= BNbBoxes
invoke StdOut, ADDR SErrorInterval
JMP @B
.ENDIF
.IF AL == BUserBox
invoke StdOut, ADDR SErrorIsUserBox
JMP @B
.ENDIF
.IF Byte PTR [ABoxAvailable + EAX] == 00h
invoke StdOut, ADDR SErrorUnavailable
JMP @B
.ENDIF
MOV BUserBox, AL
.ELSEIF
@AskForMoney:
CALL CalcDeal
MOV DWon, EAX
invoke wsprintf, ADDR SOutput, ADDR SDealMoney, EAX
invoke StdOut, ADDR SOutput
MOV EAX, sval(input(SPrompt))
.IF AL == 1d
CALL ShowHeader
CALL GetUserWinnings
invoke wsprintf, ADDR SOutput, ADDR SEndOfGame, DWon, EAX
invoke StdOut, ADDR SOutput
MOV EAX, input(0)
ADD ESP, 4d
JMP start
.ENDIF
.ENDIF
@QuitNoConfirm:
NOT BAllowDeal
RET
@QuitWithConfirm:
MOV EAX, input(0)
RET
MakeDeal endp
NewGame proc
invoke StdOut, ADDR SConfirmNewGame
MOV EAX, sval(input(SPrompt))
CMP AL, 1d
JE @F
RET
@@:
CALL GetUserWinnings
invoke wsprintf, ADDR SOutput, ADDR SBoxHad, EAX
invoke StdOut, ADDR SOutput
MOV EAX, input(0)
ADD ESP, 4d
NewGame endp
start:
CALL Randomize
CALL InitGame
CALL GenerateBoxes
CALL Welcome
CALL Menu
exit
end start
Conclusion
Vous pouvez toujours aller visiter http://altert.family.free.fr/
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 31 août 2006 09:41:59 :
- - Ajout d'une précision
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Console MMC [ par vtoub ]
Bonjour a tous, J'aimerais transformer une application Visual Basic .NET pour l'utiliser dans la console MMC. Je ne sais vraiment comment m'y pren
algo pour jeu de shoot en asm [ par cable ]
Bonjourje suis un jeune débutant en programmation en assembleur et je cherche l'algo (voir le code source) d'un jeu de shoot 'em up en scroling horizo
modification de programme [ par GMib ]
Bonjour, j'ai telecharger un jeu et je voudrai le modifier pour qu'il se lance en 640*480 o lieu de 800*600mon ecran ne suporte pas le 800*600 je ne p
Tuto ES Console [ par coockiesch ]
Hello!!!Je cherche un tuto qui explique les ES Console, en fr et compatible TASM (oui, c bcp)...Merci@++Raf
Stdout cmd.exe ou console.com [ par Stormy ]
Salut à tous!Sauriez-vous comment obtenir le output qui suit une commande sur CMD. Pour bien exprimer mon problème, voici un exemple. Le code commande
Console sans API [ par vecchio56 ]
Est-il possible de coder une application en mode protégé sous Windows à un niveau suffisament bas pour pouvoir écrire du texte dans la console sans êt
Programme console avec Masm32 [ par LordBob ]
Bonjour a tous,voila je me lance dans la programmation assembleur... et j'aimerais si avec masm32, il était possible de créer des programmes consoles
systeme d'exploitation de console [ par kryptorkid ]
bonjour à tous, Je voudrais savoir quels sont les outils qui permettent de créer un Systeme d'Exploitation, pour consoles de jeux. Est ce d
Jeu du morpion [ par Prodigy2020 ]
Bonjour, je me présente je suis en 3e année de licence info et j'ai un problème:j'ai à rendre pour dans 2semaines un projet en as
affichage console [ par Kangourou_Nomade ]
Je voulais savoir (pour ma culture personnelle) comment fonctionne le systeme d'adressage pour les affichages de texte sur la console cmd lors de l'ex
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

LG KP501
Entre 9€ et 159€
|