Byg dette sjove numerologispil i Python for at øve strengmanipulation og lære om Tkinter.

FLAMES er et sjovt spil for børn, der står for venner, elskere, kærlig, ægteskab og fjender. Spillet tager navnene på to personer og bestemmer med en række trin deres forhold. For at spille FLAMES skal du notere navnene på de to personer, eliminere de matchende bogstaver og få tællingen af ​​karaktererne tilbage.

Gentag over bogstaverne i ordet, FLAMES ved at bruge tælleren, og fjern det bogstav. For eksempel, hvis antallet er fire, skal du fjerne bogstavet M. Optællingen begynder fra E igen. Gentag denne proces, indtil der kun er ét bogstav tilbage, som angiver forholdsstatus.

Tkinter-modulet

For at bygge FLAMES-spillet skal du bruge Tkinter-modulet. Tkinter er et enkelt og brugervenligt modul på tværs af platforme, som du kan bruge til hurtigt at skabe grafiske brugergrænseflader. Nogle af de applikationer, du kan bygge som nybegynder ved hjælp af Tkinter, inkluderer en Musik afspiller, Kalender, Vægtkonverteringsværktøj, og en Word Jumble spil.

instagram viewer

For at installere tkinter i dit system skal du køre følgende kommando i terminalen:

pip installer tkinter

Sådan bygger du FLAMES-spil ved hjælp af Python

Du kan finde kildekoden til FLAMES-spillet ved hjælp af Python i dette GitHub-depot.

Importer Tkinter-modulet. Definer en funktion, remove_match_char() der accepterer to lister som input. Brug en indlejret for-løkke til at iterere over begge lister. Tjek, om der er en matchende karakter; hvis der er, skal du fjerne den fra begge lister og oprette en tredje liste, der sammenkæder begge lister med en stjerne imellem. Stjernen fungerer som en afgrænsning.

Returner den tredje liste sammen med matchen fundet som Sand. Hvis ingen bogstaver matcher, returner listen som oprettet ovenfor.

fra tkinter importere *

defremove_match_char(liste1, liste2):
til jeg i område (len (liste1)):
til j i område (len (liste2)):
hvis liste1[i] == liste2[j]:
c = liste1[i]
liste1.fjern (c)
list2.remove (c)
liste3 = liste1 + ["*"] + liste2
Vend tilbage [liste3, Rigtigt]
liste3 = liste1 + ["*"] + liste2
Vend tilbage [liste3, Falsk]

Definer en funktion, tell_status(). Hent navnet på den person, som brugeren indtastede ved hjælp af få() metode på indtastningswidgetten. Konverter alle bogstaverne til små bogstaver og fjern eventuelle mellemrum imellem. Konverter navnet til en liste med tegn. Gentag dette med navnet på den anden person og indstil Fortsæt variabel til Rigtigt.

deffortæl_status():
p1 = Person1_field.get()
p1 = p1.lower()
p1.erstat(" ", "")
p1_list = liste (p1)
p2 = Person2_field.get()
p2 = p2.lower()
p2.erstat(" ", "")
p2_list = liste (p2)
fortsæt = Rigtigt

Indtil værdien af ​​fortsæt er sand, ring til remove_match_char() funktion og videregive de to lister, du lige har oprettet. Gem den sammenkædede liste og flagstatus modtaget fra funktionen. Find indekset for den stjerne, du indsatte, og skær strengene i to lister før og efter den.

Tæl antallet af tegn på de to lister og definer en liste, der gemmer de forskellige statusser, et forhold kan have i henhold til FLAMES-spillet.

mens Fortsæt:
ret_list = remove_match_char (p1_list, p2_list)
con_list = gen_liste[0]
fortsæt = gen_liste[1]
star_index = con_list.index("*")
p1_list = con_list[: stjerneindeks]
p2_liste = con_list[stjerneindeks + 1:]

count = len (p1_list) + len (p2_list)
resultat = ["Venner", "Elsker", "Kærlighed", "Ægteskab", "Fjende", "Søskende"]

Indtil bogstaverne i resultatlisten ikke er nul, skal du gemme indeksværdien, hvorfra du skal udføre udskæringen. Hvis indekset er større end eller lig med nul, skal du opdele listerne i to dele og gemme den sammenkædede streng med den højre del tilføjet først i rækkefølge. Dette sikrer, at du kan tælle mod uret.

Indsæt resultatet i statusfeltet ved den første tegnposition for at vise relationsstatus.

mens len (resultat) > 1:
split_index = (antal % len (resultat) - 1)

hvis split_index >= 0:
højre = resultat[split_indeks + 1:]
venstre = resultat[: split_index]
resultat = højre + venstre
andet:
resultat = resultat[: len (resultat) - 1]

Status_field.insert(0, resultat[0])

Definer en funktion, Slet alt(). Brug delete()-funktionen fra det første indeks til det sidste i de tre indtastningsfelter for at rydde indholdet, der vises på skærmen. Brug metoden focus_set() i det første indtastningsfelt for at aktivere og angive, at brugeren skal indtaste værdier i det.

defSlet alt():
Person1_field.delete(0, SLUT)
Person2_field.delete(0, SLUT)
Status_field.delete(0, SLUT)
Person1_field.focus_set()

Initialiser Tkinter-forekomsten og vis rodvinduet ved at sende det til klassen. Indstil baggrundsfarven efter eget valg, størrelsen og titlen på din ansøgning.

root = Tk()
root.configure (baggrund='#A020F0')
root.geometry("700x200")
root.title("FLAMES Game")

Definer tre etiketter for at angive de to personer og deres forholdsstatus. Indstil det overordnede vindue, du vil placere dem i, den tekst, det skal vise, skriftfarven, baggrundsfarven og skrifttypestilene. Tilføj noget polstring i vandret retning.

label1 = Etiket (rod, tekst="Navn 1:", fg='#ffffff',bg='#A020F0', skrifttype=("arial",20,"fremhævet"), padx='20')
label2 = Etiket (rod, tekst="Navn 2:", fg='#ffffff',bg='#A020F0', skrifttype=("arial",20,"fremhævet"), padx='20')
label3 = Etiket (rod, tekst="Forholds status: ", fg='#ffffff', bg='#A020F0',font=("arial",20,"fremhævet"), padx='20')

Brug grid manager til at arrangere de tre widgets i den første kolonne. Placer den første etiket i anden række, den anden etiket i tredje række og den tredje etiket i fjerde række.

label1.grid (række=1, kolonne=0)
label2.grid (række=2, kolonne=0)
label3.grid (række=4, kolonne=0)

Definer tre indgangswidgets for at få værdierne for de to personer og vise deres status. Indstil det overordnede vindue, du vil placere widgets i, og de skrifttyper, det skal have.

Person1_field = Indgang (rod, skrifttype=("arial", 15, "fremhævet"))
Person2_field = Entry (root, font=("arial", 15, "fremhævet"))
Status_field = Indtastning (rod, skrifttype=("arial",15,"fremhævet"))

På samme måde kan du bruge grid manager til at organisere widgets i den anden kolonne. Brug ipadx egenskab for at indstille antallet af pixels, der skal udfyldes inden for widgettens grænser.

Person1_field.grid (row=1, kolonne=1, ipadx="50")
Person2_field.grid (row=2, kolonne=1, ipadx="50")
Status_field.grid (række=4, kolonne=1, ipadx="50")

Definer to knapper, Indsend og Klar. Indstil det overordnede vindue, du vil placere dem i, den tekst, det skal vise, baggrundsfarven, skriftfarven, de funktioner, de skal udføre, når de klikkes, og skrifttypestilene.

Brug gitterstyringen til at placere knapperne i henholdsvis fjerde og sjette række i den anden kolonne.

knap1 = Knap (rod, tekst="Indsend", bg="#00ff00", fg="sort", kommando=fortæl_status, skrifttype=("arial",13,"fremhævet") )
knap2 = Knap (rod, tekst="Klar", bg="#00ff00", fg="sort", kommando=ryd alt, skrifttype=("arial",13,"fremhævet"))
knap1.gitter (række=3, kolonne=1)
knap2.gitter (række=5, kolonne=1)

Det mainloop() funktion fortæller Python at køre Tkinter-hændelsesløkken og lytte efter hændelser, indtil du lukker vinduet.

root.mainloop()

Sæt al koden sammen, og gør dig klar til at spille FLAMES-spillet lige ved hånden.

Eksempel på output fra FLAMES-spillet

Når du kører programmet ovenfor, viser programmet FLAMES-spilapplikationen med tre etiketter, tre indtastningsfelter og to knapper arrangeret i et gitter. Når du indtaster navnene "Tony Stark" og "Pepper Potts", viser programmet deres forholdsstatus som "Kærlighed".

Spil du kan bygge med Python

Pygame, Arcade, Panda3D, PyOpenGL og Pyglet er nogle nyttige moduler, du kan bygge Python-spil med. Ved at bruge Pygame kan du bygge 2D-spil som Super Mario Bros, Flappy Bird og Snake. Ved at bruge Arcade kan du bygge en Pac-Man, Asteroids eller Breakout klon.

Panda3D kan hjælpe dig med at bygge 3D-spil som Toontown Online, Pirates of the Caribbean Online og Disneys Virtual Magic Kingdom.