Tässä on Pythonilla tehty Mastermindin-kaltainen peli. Pelissä täytyy päätellä koodi käyttäen apuna tietoa oikeista väreistä ja siitä mitkä värit ovat oikessa paikassa. Tässä versiossa värejä on kuusi ja paikkoja neljä. Yrityskertojen määrää ei ole rajattu. Valinnat tehdään radiobuttoneilla.
import random
import math
from tkinter import *
root = Tk()
variYksi = IntVar()
variKaksi = IntVar()
variKolme = IntVar()
variNelja = IntVar()
#Luodaan kehykset
kehys1 = Frame(root,bd=10,relief=RIDGE)
kehys1.grid(row=0,column=0,padx=30)
kehys2 = Frame(root,bd=10,relief=RIDGE)
kehys2.grid(row=0,column=1,padx=30)
kehys3 = Frame(root,bd=10,relief=RIDGE)
kehys3.grid(row=0,column=2,padx=30)
kehys4 = Frame(root,bd=10,relief=RIDGE)
kehys4.grid(row=0,column=3,padx=30)
kehys_tekstit = Frame(root,bd=10,relief=RIDGE)
kehys_tekstit.grid(row=1,column=0,padx=30)
kehys_nappaimet = Frame(root,bd=10,relief=RIDGE)
kehys_nappaimet.grid(row=1,column=2,padx=30)
#Luodaan tekstit
varit_string = StringVar()
varit_string.set("1")
paikat_string = StringVar()
paikat_string.set("2")
teksti_varit = Label(kehys_tekstit,textvariable=varit_string,font=("arial",40)).pack()
teksti_paikat = Label(kehys_tekstit,textvariable=paikat_string,font=("arial",40)).pack()
oikeat_varit = 0
oikeat_paikat = 0
voitto = False
koodi = []
varit = []
paikat = []
def Koodi():
global koodi
#Arvotaan koodi
for i in range(4):
koodi.append(random.randint(1,6))
def Tarkistus():
global oikeat_varit, oikeat_paikat,varit, koodi,voitto
#Tarkistetaan koodi
#Tarkistuksessa katsotaan oikeat värit ja mitkä värit ovat oikeassa paikassa
temp = []
temp2 = []
temp.clear()
for i in range(len(varit)):
temp.append(varit[i])
temp2.clear()
for i in range(len(koodi)):
temp2.append(koodi[i])
oikeat_varit = 0
oikeat_paikat = 0
#Katsotaan oikeat paikat
for i in range(len(temp)):
if (temp[i] == temp2[i]):
oikeat_paikat += 1
#Katsotaan oikeat värit
temp.sort()
temp2.sort()
for i in range(len(temp)):
for j in range(len(temp2)):
if (temp[i] == temp2[j]):
temp[i] = -1
temp2[j] = -1
oikeat_varit += 1
break
#Näytetään tulokset
varit_string.set("Värit:"+str(oikeat_varit))
paikat_string.set("Paikat:"+str(oikeat_paikat))
if (oikeat_paikat == 4):
paikat_string.set("Voitit")
voitot = True
def Uudestaan():
global voitto,koodi,oikeat_paikat
#Aloitetaan alusta
voitto = False
oikeat_paikat = 0
varit_string.set("Värit")
paikat_string.set("Paikat")
koodi.clear()
Koodi()
def Arvaa():
global voitto,koodi,varit,oikeat_paikat
varit.clear()
if (not voitto and oikeat_paikat < 4):
#Tallennetaan varit ja paikat
varit.append(variYksi.get())
varit.append(variKaksi.get())
varit.append(variKolme.get())
varit.append(variNelja.get())
Tarkistus()
#Luodaan näppäimet
uudestaan = Button(kehys_nappaimet,text="Uudestaan",bd=5,command=Uudestaan).pack()
arvaa = Button(kehys_nappaimet,text="Arvaa",bd=5,command=Arvaa).pack()
#Luodaan valinnat
radio1a = Radiobutton(kehys1,text="punainen",variable=variYksi,value=1)
radio1a.pack()
radio1b = Radiobutton(kehys1,text="keltainen",variable=variYksi,value=2)
radio1b.pack()
radio1c = Radiobutton(kehys1,text="vihreä",variable=variYksi,value=3)
radio1c.pack()
radio1d = Radiobutton(kehys1,text="sininen",variable=variYksi,value=4)
radio1d.pack()
radio1e = Radiobutton(kehys1,text="oranssi",variable=variYksi,value=5)
radio1e.pack()
radio1f = Radiobutton(kehys1,text="ruskea",variable=variYksi,value=6)
radio1f.pack()
#Toinen
radio2a = Radiobutton(kehys2,text="punainen",variable=variKaksi,value=1)
radio2a.pack()
radio2b = Radiobutton(kehys2,text="keltainen",variable=variKaksi,value=2)
radio2b.pack()
radio2c = Radiobutton(kehys2,text="vihreä",variable=variKaksi,value=3)
radio2c.pack()
radio2d = Radiobutton(kehys2,text="sininen",variable=variKaksi,value=4)
radio2d.pack()
radio2e = Radiobutton(kehys2,text="oranssi",variable=variKaksi,value=5)
radio2e.pack()
radio2f = Radiobutton(kehys2,text="ruskea",variable=variKaksi,value=6)
radio2f.pack()
#Kolmas valinta
radio3a = Radiobutton(kehys3,text="punainen",variable=variKolme,value=1)
radio3a.pack()
radio3b = Radiobutton(kehys3,text="keltainen",variable=variKolme,value=2)
radio3b.pack()
radio3c = Radiobutton(kehys3,text="vihreä",variable=variKolme,value=3)
radio3c.pack()
radio3d = Radiobutton(kehys3,text="sininen",variable=variKolme,value=4)
radio3d.pack()
radio3e = Radiobutton(kehys3,text="oranssi",variable=variKolme,value=5)
radio3e.pack()
radio3f = Radiobutton(kehys3,text="ruskea",variable=variKolme,value=6)
radio3f.pack()
#Neljäs valinta
radio4a = Radiobutton(kehys4,text="punainen",variable=variNelja,value=1)
radio4a.pack()
radio4b = Radiobutton(kehys4,text="keltainen",variable=variNelja,value=2)
radio4b.pack()
radio4c = Radiobutton(kehys4,text="vihreä",variable=variNelja,value=3)
radio4c.pack()
radio4d = Radiobutton(kehys4,text="sininen",variable=variNelja,value=4)
radio4d.pack()
radio4e = Radiobutton(kehys4,text="oranssi",variable=variNelja,value=5)
radio4e.pack()
radio4f = Radiobutton(kehys4,text="ruskea",variable=variNelja,value=6)
radio4f.pack()
Koodi()
root.mainloop()Oletko harkinnut koodaamista ilman copy-pastea? Voisit muuttaa tuon 4x6 painikkeen luonnin toimimaan lyhyellä silmukalla, koska niissä vaihtuu vain teksti ja numero.
Metabolix kirjoitti:
Oletko harkinnut koodaamista ilman copy-pastea? Voisit muuttaa tuon 4x6 painikkeen luonnin toimimaan lyhyellä silmukalla, koska niissä vaihtuu vain teksti ja numero.
Noh, osa koodaamisen opettelua on toki parannella ja refaktoroida koodia aina taitojen parantuessa. Se kuitenkaan ei ole automaatio, että jokainen ohjelmoinnin aloittava henkilö on välittömästi ammattilainen. Joten kyse tuskin on harkitsemisesta, vaan tuotos on sen hetkisten taitojen lopputulos ja saa olla ylpeä kun saa toimivaa aikaan.
groovyb kirjoitti:
Joten kyse tuskin on harkitsemisesta, vaan tuotos on sen hetkisten taitojen lopputulos
Kai siinä jotain harkintaa täytyy olla, jos on aikaa koodata näin paljon mutta koodi on tässä suhteessa ihan samanlaista kuin jo pari vuotta sitten. Jos aikoo edistyä, jossain vaiheessa pitää ihan tietoisesti tehdä uusia asioita.
Aihe on jo aika vanha, joten et voi enää vastata siihen.