Der Computer legt zu Beginn einen vierstelligen geordneten Farbcode fest, der aus sechs Farben ausgewählt wird. Eine Farbe kann mehrmals verwendet werden. Der Spieler versucht den Code herauszufinden, in dem er reihenweise farbige Stifte setzt. Nach jedem Zug erhält er die Information, wie viele Stifte er in Farbe und Position richtig gesetzt hat (schwarzer Stift) und wie viele Stifte zwar die richtige Farbe haben, aber an einer falschen Position stehen (weisser Stift). Ziel ist es, den Farbcode mit möglichst wenigen Zügen zu erraten. Gelingt es dem Spieler nicht, den Farbcode in 7 Zügen zu erraten, wird die Lösung angezeigt.
Die Farbstifte mit linkem Mausklick an der entsprechenden Position gesetzt. Erneutes Klicken bewirkt Farbwechsel. Ein Zug wird mit Klick auf das Fragezeichen beendet. Dann werden die schwarzen bzw. weissen Stifte angezeigt.
Programm:
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] andnot 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()
returnTrue# ---------------- 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()