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.