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.