# mastermind.py

Created by arthurjacquin

Created on July 10, 2021

2.62 KB

```# Mastermind - August 2020
# Arthur Jacquin (arthur@jacquin.xyz)
# https://github.com/arthur-jacquin/numworks-games

# Modules
from ion import keydown
from kandinsky import *
from random import randint

# Colors
COL = ((255, 63, 63), (255, 128, 0), (255, 255, 0), (46, 184, 46), (51, 153, 255), (153, 102, 255))

# Interface drawing
draw_string('MASTERMIND', 110, 5)
draw_string('Keys', 6+10, 35)
draw_string('Decoding board', 74+50, 35)
draw_string('Review', 6, 135+12)
for col in range(6):
fill_rect(6+20*(col%3)+1, 55+20*(col > 2)+1, 18, 18, COL[col])
draw_string(str(col+1), 6+20*(col%3)+5, 55+20*(col > 2)+1, (0,)*3, COL[col])
fill_rect(6+1, 95+1, 58, 18, (200,)*3)
draw_string('DEL', 6+15, 95+1, (0,)*3, (200,)*3)
fill_rect(6+1, 115+1, 58, 18, (200,)*3)
draw_string('EXE', 6+15, 115+1, (0,)*3, (200,)*3)

def wait(buttons): # Wait for keypress
while True:
for i in buttons:
if keydown(i):
while keydown(i): pass
return i

while True:
# Initialisation
code = [randint(0,5) for i in range(4)]
row = 0
draw_string('Guess :', 80, 190)

# Main loop
while True:
guess = []
while True:
k = wait((42, 43, 44, 36, 37, 38, 17, 52))
if k == 52:
if len(guess)!=4: continue
break
elif k == 17:
if len(guess)==0: continue
guess = guess[:-1]
draw_string('  ', 160+20*len(guess), 190)
else:
if len(guess)==4: continue
number = 1*(k==42)+2*(k==43)+3*(k==44)+4*(k==36)+5*(k==37)+6*(k==38)
guess.append(number-1)
fill_rect(142+20*len(guess), 191, 16, 16, COL[guess[-1]])
draw_string(' '*8, 160, 190)
for i in range(4): fill_rect(74+2+20*row, 55+20*i+2, 16, 16, COL[guess[i]])
correct = sum([guess[i] == code[i] for i in range(4)])
misplac, mirr = -1*correct, code[:]
for i in range(4):
if guess[i] in mirr:
misplac += 1
mirr.remove(guess[i])
draw_string(str(misplac), 79+20*row, 137)
draw_string(str(correct), 79+20*row, 157)
if guess == code or row == 11:
draw_string(' '*8, 80, 190)
if guess == code: draw_string('You won in '+str(row+1)+' guesses !', 55, 180)
else: draw_string('You lost !', 110, 180)
draw_string('(Press OK to restart)', 55, 200)
while not(keydown(4)): pass
fill_rect(0, 180, 320, 40, (255,)*3)
fill_rect(74, 55, 240, 120, (255,)*3)
break
else: row += 1```