HomeTortue graphiqueGPanelRobotique WebTigerPython
 Python - Online
mastermind
Deutsch   English   Français   

MASTERMIND

 

 

DESCRIPTION DU JEU

 

Au début du jeu, l'ordinateur choisit un code secret composé de quatre couleurs ordonnées, sélectionnées parmi six couleurs différentes. Une même couleur peut apparaître plusieurs fois dans le code.

Le joueur essaie de découvrir ce code en plaçant des pions colorés sur les différentes lignes du plateau. Après chaque tentative, il reçoit des indications sur le nombre de pions dont la couleur et la position sont correctes (pion noir), ainsi que sur le nombre de pions dont la couleur est correcte, mais dont la position est incorrecte (pion blanc).

Le but du jeu est de découvrir le code secret en effectuant le moins de tentatives possible. Si le joueur ne parvient pas à trouver le code en 7 tentatives, la solution est affichée.

Les pions colorés sont placés à la position souhaitée par un clic gauche de la souris. Un nouveau clic sur le même pion permet de changer sa couleur. Pour terminer une tentative, le joueur clique sur le point d'interrogation. Les pions noirs et blancs indiquant le résultat de la tentative sont alors affichés.

 

 

Programme:

from gamegrid import *
import random

def showTips(whitePegs, blackPegs):
    for i in range(4):
        ep = Actor(True, "sprites/evalpeg.png", 2)
        if blackPegs > 0:
            ep.show(0)
            addActor(ep, Location(1, currentRow))
            ep.turn(90 * i)
            blackPegs -= 1
        elif whitePegs > 0:
            ep.show(1)
            addActor(ep, Location(1, currentRow))
            ep.turn(90 * i)
            whitePegs -= 1
    
def finishRound():
    removeActor(marker)
    x = 2
    for spriteNr in secretCode:
        peg = Actor("sprites/peg.png", 6)
        peg.show(spriteNr)
        addActor(peg, Location(x, 1))
        x += 1
 
def evaluateGuess(guess):
    global currentRow, placedPegs
    blackPegs = 0
    whitePegs = 0
    for i in range(4):
        if guess[i] == secretCode[i]:
            blackPegs += 1
            
    alreadyProcessed = [] 
    for color in secretCode:
        for j in range(4):
            if color == guess[j] and not j in alreadyProcessed: 
               alreadyProcessed.append(j)
               whitePegs += 1
               break
    whitePegs = whitePegs - blackPegs
    showTips(whitePegs, blackPegs)

    if blackPegs == 4: 
        setStatusText("Correct!")
        finishRound()
    else:
        currentRow -= 1
    if currentRow == 1: 
        finishRound()
    marker.setLocation(Location(1, currentRow))
    placedPegs = 0
    removeActor(evaluateBtn)

def pressCallback(e):
    global placedPegs
    global evaluateBtn          
    loc = toLocationInGrid(e.getX(), e.getY())  
    if placedPegs == 4 and loc.x == 1 and loc.y == currentRow:
         guess = [0] * 4
         for i in range(4):
             guess[i] = getOneActorAt(Location(2 + i, 
                        currentRow)).getIdVisible()
         evaluateGuess(guess)
 
    if loc.y == currentRow and loc.x > 1 and loc.x < 6:
         if getOneActorAt(loc) == None:
              addActor(Actor("sprites/peg.png", 6), loc)
              placedPegs += 1
              if placedPegs == 4:
                   evaluateBtn = Actor("sprites/evalbutton.png")
                   addActor(evaluateBtn, Location(1, currentRow))
         else:   
              getOneActorAt(loc).showNextSprite()
    refresh()
    return True    
     
# ---------------- main ----------------------
makeGameGrid(7, 10, 60, None, "sprites/mastermindbg.png", False,
        mousePressed = pressCallback)
setTitle("Mastermind")
placedPegs = 0
currentRow = 8 
secretCode = [0] * 4
for i in range(4):
   secretCode[i] = random.randint(0, 5)
marker = Actor("sprites/rowmarker.png")
addActor(marker, Location(1, currentRow))
show()
doRun()
► Copy to clipboard

 

 

Explications du code

 
1.

Programme principal
L'ensemble du jeu est contrôlé par le programme principal. Il n'est pas nécessaire de définir d'autres classes.

2.

Fonction showTips()
def showTips():Cette fonction définit comment les pions noirs et blancs, qui indiquent le résultat de chaque tentative, doivent être placés.

3.

Fonction finishRound()
def finishRound(): Cette fonction est appelée lorsqu'une partie est terminée. Elle affiche le code secret.

4.

Fonction evaluateGuess()
def evaluateGuess(): Cette fonction compare les pions colorés placés par le joueur avec le code secret.

5. Fonction pressCallback()
def pressCallback:
Cette fonction définit comment le joueur choisit les couleurs et place les pions à l'aide de clics de souris.