Fargespill
Skrevet av: Oversatt fra usingpython.com
Oversatt av: Steffen Granberg
Introduksjon
Hjernen vår lar seg lett lure, og det kan av og til være vanskelig for den å tolke forskjellig inntrykk samtidig. I det spillet vi nå skal lage vil du både få testet hjernen og skrivehastigheten. Vi skal lage et fargespill!
Steg 1: Klargjør og importerer bilioteker
I dette spillet skal vi lage et grafisk brukergrensesnitt (et GUI). Til dette bruker vi et bibliotek som heter tkinter
. Vi trenger også hjelp for å generere tilfeldige tall.
Sjekkliste
-
import tkinter from random import randint
-
#!/usr/bin/python # -*- coding: UTF-8 -*- import tkinter from random import randint
Kommentering av kode
For å gjøre koden lettere å forstå kan vi legge inn kommentarer som ikke påvirker programmet. Dette gjør vi ved å skrive inn tegnet #
. All tekst som kommer på samme linje etter dette tegnet vil bli ignorert av datamaskinen, men er veldig fint for å hjelpe oss mennesker. Heretter bruker jeg dette for å forklare hva som skjer, du trenger ikke å skrive inn kommentarene hvis du ikke vil!
Steg 2: Lage grafisk brukergrensesnitt
Nå skal vi begynne på GUI. Les kommentarene for å forstå hva som skjer.
Sjekkliste
-
root = tkinter.Tk() root.title("Fargespill") root.geometry("475x300") root.mainloop()
-
#!/usr/bin/python # -*- coding: UTF-8 -*- import tkinter from random import randint root = tkinter.Tk() root.title("Fargespill") root.geometry("475x300") # Lager en label kalt instructions med tekst: instructions = tkinter.Label(root, text="Skriv inn fargen PÅ ordet, ikke selve ordet!", font=('Helvetica', 15)) instructions.pack() points_label = tkinter.Label(root, text="Trykk enter for å starte.", font=('Helvetica', 30)) points_label.pack() label = tkinter.Label(root, font=('Helvetica', 100)) label.pack() box = tkinter.Entry(root) root.mainloop()
I koden over skjer det mye, la oss se på noen deler
tkinter.Label
lager et felt i vinduet vårt. I disse feltene kan vi putte blant annet tekst eller tall. .pack
forteller programmet vårt at den skal "tegne" disse feltene slik at de synes for oss, og hvor den skal tegne de. tkinter.Entry(root)
lager et tekstfelt som spilleren kan skrive i.
Test prosjektet
Steg 3: Vi lager tidskontroll
Sjekkliste
-
def countdown(): global time_left if time_left > 0: # Tell ned ett sekund time_left = time_left - 1 time_label.config(text="Tid igjen: " + str(time_left)) # Denne kjører automatisk countdown() igjen etter 1 sekund time_label.after(1000, countdown) else: time_label.pack_forget() label.pack_forget() box.pack_forget()
-
#!/usr/bin/python # -*- coding: UTF-8 -*- import tkinter from random import randint time_left = 30 def countdown(): global time_left if time_left > 0: time_left = time_left - 1 time_label.config(text="Tid igjen: " + str(time_left)) time_label.after(1000, countdown) else: time_label.pack_forget() label.pack_forget() box.pack_forget() root = tkinter.Tk() root.title("Fargespill") root.geometry("475x300") # Lager en label kalt instructions med tekst: instructions = tkinter.Label(root, text="Skriv inn fargen PÅ ordet, ikke selve ordet!", font=('Helvetica', 15)) instructions.pack() points_label = tkinter.Label(root, text="Trykk enter for å starte.", font=('Helvetica', 30)) points_label.pack() label = tkinter.Label(root, font=('Helvetica', 100)) label.pack() box = tkinter.Entry(root) root.mainloop()
Steg 4: Definere fargene.
Nå må vi definere fargene som programmet skal bruke.
Sjekkliste
-
colours_eng = ['Red', 'Blue', 'Green', 'Pink', 'Black', 'Yellow', 'Orange', 'Purple', 'Brown']
-
colours = ['Rød', 'Blå', 'Grønn', 'Rosa', 'Svart', 'Gul', 'Oransje', 'Lilla', 'Brun']
-
# Brukes til å velge tilfeldig farge colour = 0 points = 0
-
def next_color(): # Henter inn globale variabler: global points global colour
-
if time_left > 0: box.focus_set()
-
# Hvis det spilleren skrev er riktig farge. if box.get().lower() == colours[colour].lower(): # Pluss på ett points points = points + 1
-
box.delete(0, tkinter.END)
-
# Lager tilfeldig tall mellom 0 og 8 colour = randint(0, len(colours)-1) # Lager tilfeldig tall til teksten. text = randint(0, len(colours)-1)
-
def next_color(): global points global colour if time_left > 0: box.focus_set() if box.get().lower() == colours[colour].lower(): points = points + 1 box.delete(0, tkinter.END) colour = randint(0, len(colours)-1) text = randint(0, len(colours)-1) # Oppdaterer labels label.config(fg=str(colours_eng[colour]), text=str(colours[text])) points_label.config(text="Poeng: " + str(points))
Test prosjektet
Steg 5: La oss starte programmet!
Det skjer fortsatt lite i spillet vårt, men det er fordi vi ikke har startet selve spilldelen. Det skal vi gjøre nå!
Sjekkliste
-
def start_game(event): if time_left == 30: countdown() next_color()
-
# Kjører funksjonen start_game() når enter trykkes root.bind('<Return>', start_game) box.pack() box.focus_set()
-
#!/usr/bin/python # -*- coding: UTF-8 -*- import tkinter from random import randint colours_eng = ['Red', 'Blue', 'Green', 'Pink', 'Black', 'Yellow', 'Orange', 'Purple', 'Brown'] colours = ['Rød', 'Blå', 'Grønn', 'Rosa', 'Svart', 'Gul', 'Oransje', 'Lilla', 'Brun'] colour = 0 points = 0 time_left = 30 def start_game(event): if time_left == 30: countdown() next_color() def next_color(): global points global colour if time_left > 0: box.focus_set() if box.get().lower() == colours[colour].lower(): points = points + 1 box.delete(0, tkinter.END) colour = randint(0, len(colours)-1) text = randint(0, len(colours)-1) label.config(fg=str(colours_eng[colour]), text=str(colours[text])) points_label.config(text="Poeng: " + str(points)) def countdown(): global time_left if time_left > 0: time_left = time_left - 1 time_label.config(text="Tid igjen: " + str(time_left)) time_label.after(1000, countdown) else: time_label.pack_forget() label.pack_forget() box.pack_forget() root = tkinter.Tk() root.title("Fargespill") root.geometry("475x300") instructions = tkinter.Label(root, text="Skriv inn fargen PÅ ordet, ikke selve ordet!", font=('Helvetica', 15)) instructions.pack() points_label = tkinter.Label(root, text="Trykk enter for å starte.", font=('Helvetica', 30)) points_label.pack() time_label = tkinter.Label(root, text="Tid igjen: " + str(time_left), font=('Helvetica', 30)) time_label.pack() label = tkinter.Label(root, font=('Helvetica', 100)) label.pack() box = tkinter.Entry(root) root.bind('<Return>', start_game) box.pack() box.focus_set() root.mainloop()
Test prosjektet
Forbedre denne siden
Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!