begin process at 2010 03 18 18:22:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > LE JEU DES 24 BOÎTES DE L'HOMME MYSTÉRIEUX [MASM]

LE JEU DES 24 BOÎTES DE L'HOMME MYSTÉRIEUX [MASM]


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :hasard, valise, jeu, console, a2042 Niveau :Débutant Date de création :30/08/2006 Date de mise à jour :31/08/2006 09:41:59 Vu / téléchargé :3 071 / 204

Auteur : grandvizir

Ecrire un message privé
Site perso
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 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

Les Membres Club peuvent 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

Source avec Zip [TUTORÉ] LOTO ET NOMBRES PSEUDO-ALÉATOIRES [MASM]

 Sources de la même categorie

Source avec Zip TEXTURE AVEC DIRECTX9 par quoi
Source avec Zip Source avec une capture AUTOMATE CELLULAIRE EN ASSEMBLEUR ( JEU DE LA VIE ) par ratala
Source avec Zip Source avec une capture MES MODIFICATIONS SUR LE JEU DE SNAKE DE ASMGGES par ChaperonNoir
Source avec Zip SCREENMATE BOULINATOR par jjeeaanncchhrriisstt
Source avec Zip Source avec une capture SOLITAIRE EN MASM32 POUR WINDOWS par BLUEBIBUBBLE

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AUTOMATE CELLULAIRE EN ASSEMBLEUR ( JEU DE LA VIE ) par ratala
Source avec Zip Source avec une capture MES MODIFICATIONS SUR LE JEU DE SNAKE DE ASMGGES par ChaperonNoir
Source avec Zip [TUTORÉ] LOTO ET NOMBRES PSEUDO-ALÉATOIRES [MASM] par grandvizir
Source avec Zip [LINUX] LIRE CLAVIER ET ECRIRE CONSOLE par sheorogath
Source avec Zip BOOT PONG par barbichette

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


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 &#224; tous, Je voudrais savoir quels sont les outils qui permettent de cr&#233;er un Systeme d'Exploitation, pour consoles de jeux. Est ce d Jeu du morpion [ par Prodigy2020 ] Bonjour, je me pr&#233;sente je suis en 3e ann&#233;e de licence info et j'ai un probl&#232;me:j'ai &#224; 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


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales