Bygg detta roliga numerologispel i Python för att öva på strängmanipulation och lära dig mer om Tkinter.

FLAMES är ett roligt spel för barn som står för vänner, älskare, tillgivna, äktenskap och fiender. Spelet tar namnen på två personer och bestämmer med en rad steg deras förhållande. För att spela FLAMES, anteckna namnen på de två personerna, ta bort de matchande bokstäverna och få antalet tecken kvar.

Iterera över bokstäverna i ordet, FLAMES med hjälp av räkningen och ta bort den bokstaven. Till exempel, om antalet är fyra, ta bort bokstaven M. Räkningen börjar från E igen. Upprepa denna process tills endast en bokstav återstår, vilket anger relationsstatus.

Tkinter-modulen

För att bygga FLAMES-spelet använder du Tkinter-modulen. Tkinter är en plattformsoberoende, enkel och användarvänlig modul som du kan använda för att snabbt skapa grafiska användargränssnitt. Några av applikationerna du kan bygga som nybörjare med Tkinter inkluderar en Musikspelare, Kalender, Viktkonverteringsverktyg, och en Word Jumble Game.

instagram viewer

För att installera tkinter i ditt system, kör följande kommando i terminalen:

pip installera tkinter

Hur man bygger FLAMES-spel med Python

Du kan hitta källkoden för FLAMES-spelet med Python i detta GitHub-förråd.

Importera Tkinter-modulen. Definiera en funktion, remove_match_char() som accepterar två listor som input. Använd en kapslad för-loop för att iterera över båda listorna. Kontrollera om det finns en matchande karaktär; om det finns, ta bort den från båda listorna och skapa en tredje lista som sammanfogar båda listorna med en asterisk emellan. Asterisken fungerar som en avgränsare.

Returnera den tredje listan tillsammans med matchningen som hittats som Sann. Om inga bokstäver matchar, returnera listan enligt ovan.

från tkinter importera *

defremove_match_char(lista1, lista2):
för i i intervall (len (lista1)):
för j i intervall (len (lista2)):
om lista1[i] == lista2[j]:
c = lista1[i]
list1.remove (c)
list2.remove (c)
lista3 = lista1 + ["*"] + lista2
lämna tillbaka [lista3, Sann]
lista3 = lista1 + ["*"] + lista2
lämna tillbaka [lista3, Falsk]

Definiera en funktion, tell_status(). Hämta namnet på personen som användaren angav med hjälp av skaffa sig() metod i widgeten Entry. Konvertera alla bokstäver till gemener och ta bort mellanslag däremellan. Konvertera namnet till en lista med tecken. Upprepa detta med namnet på den andra personen och ställ in Fortsätt variabel till Sann.

deftell_status():
p1 = Person1_field.get()
p1 = p1.lower()
p1.replace(" ", "")
p1_list = lista (p1)
p2 = Person2_field.get()
p2 = p2.lower()
p2.ersätt(" ", "")
p2_list = lista (p2)
fortsätt = Sann

Tills värdet av fortsätt är sant, ring remove_match_char() funktion och skicka de två listorna du just skapade. Lagra den sammanlänkade listan och flaggstatusen som tas emot från funktionen. Hitta indexet för asterisken du infogade och dela upp strängarna i två listor före och efter den.

Räkna antalet tecken i de två listorna och definiera en lista som lagrar de olika status som en relation kan ha enligt FLAMES-spelet.

medan Fortsätt:
ret_list = remove_match_char (p1_list, p2_list)
con_list = ret_list[0]
fortsätt = ret_list[1]
star_index = con_list.index("*")
p1_list = con_list[: star_index]
p2_list = con_list[stjärna_index + 1:]

count = len (p1_list) + len (p2_list)
resultat = ["Vänner", "Kärlek", "Tillgivenhet", "Äktenskap", "Fiende", "Syskon"]

Tills bokstäverna i resultatlistan inte är noll, lagra indexvärdet där du måste utföra skivningen. Om indexet är större än eller lika med noll, dela listorna i två delar och lagra den sammanlänkade strängen med den högra delen först i ordning. Detta säkerställer att du kan räkna moturs.

Infoga resultatet i statusfältet vid den första teckenpositionen för att visa relationsstatusen.

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

om split_index >= 0:
höger = resultat[split_index + 1:]
vänster = resultat[: split_index]
resultat = höger + vänster
annan:
resultat = resultat[: len (resultat) - 1]

Status_field.insert(0, resultat[0])

Definiera en funktion, Rensa alla(). Använd delete()-funktionen från det första indexet till det sista i de tre inmatningsfälten för att rensa bort innehållet som visas på skärmen. Använd metoden focus_set() i det första inmatningsfältet för att aktivera och indikera att användaren ska ange värden i det.

defRensa alla():
Person1_field.delete(0, SLUTET)
Person2_field.delete(0, SLUTET)
Status_field.delete(0, SLUTET)
Person1_field.focus_set()

Initiera Tkinter-instansen och visa rotfönstret genom att skicka det till klassen. Ställ in den bakgrundsfärg du väljer, storleken och titeln på din ansökan.

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

Definiera tre etiketter för att beteckna de två personerna och deras relationsstatus. Ställ in det överordnade fönstret du vill placera dem i, texten som ska visas, teckensnittsfärgen, bakgrundsfärgen och typsnittsstilarna. Lägg till lite stoppning i horisontell riktning.

label1 = Etikett (root, text="Namn 1:", fg='#ffffff',bg='#A020F0', typsnitt=("arial",20,"djärv"), padx='20')
label2 = Etikett (root, text="Namn 2:", fg='#ffffff',bg='#A020F0', typsnitt=("arial",20,"djärv"), padx='20')
label3 = Etikett (root, text="Relationsstatus:", fg='#ffffff', bg='#A020F0',font=("arial",20,"djärv"), padx='20')

Använd grid manager för att ordna de tre widgetarna i den första kolumnen. Placera den första etiketten i den andra raden, den andra etiketten i den tredje raden och den tredje etiketten i den fjärde raden.

label1.grid (rad=1, kolumn=0)
label2.grid (rad=2, kolumn=0)
label3.grid (rad=4, kolumn=0)

Definiera tre ingångswidgetar för att få värdena för de två personerna och visa deras status. Ställ in det överordnade fönstret du vill placera widgetarna i och de teckensnitt som det ska ha.

Person1_field = Entry (root, font=("arial", 15, "djärv"))
Person2_field = Entry (root, font=("arial", 15, "djärv"))
Status_field = Entry (root, font=("arial",15,"djärv"))

På samma sätt använder du grid manager för att organisera widgetarna i den andra kolumnen. Använd ipadx egenskap för att ställa in antalet pixlar som ska fyllas innanför widgetens kanter.

Person1_field.grid (rad=1, kolumn=1, ipadx="50")
Person2_field.grid (rad=2, kolumn=1, ipadx="50")
Status_field.grid (rad=4, kolumn=1, ipadx="50")

Definiera två knappar, Skicka in och Klar. Ställ in det överordnade fönstret du vill placera dem i, texten den ska visa, bakgrundsfärgen, teckensnittsfärgen, de funktioner de ska köra när de klickas och typsnittsstilarna.

Använd grid manager för att placera knapparna i den fjärde respektive sjätte raden i den andra kolumnen.

knapp1 = Knapp (root, text="Skicka in", bg="#00ff00", fg="svart", command=tell_status, font=("arial",13,"djärv") )
button2 = Knapp (root, text="Klar", bg="#00ff00", fg="svart", command=clear_all, font=("arial",13,"djärv"))
button1.grid (rad=3, kolumn=1)
button2.grid (rad=5, kolumn=1)

De mainloop() funktionen säger åt Python att köra Tkinter-händelsslingan och lyssna efter händelser tills du stänger fönstret.

root.mainloop()

Sätt ihop all kod och gör dig redo att spela FLAMES-spelet till hands.

Exempel på utdata från FLAMES-spelet

När du kör programmet ovan visar programmet FLAMES-spelapplikationen med tre etiketter, tre inmatningsfält och två knappar ordnade i ett rutnät. När du skriver in namnen "Tony Stark" och "Pepper Potts", visar programmet deras relationsstatus som "Love".

Spel du kan bygga med Python

Pygame, Arcade, Panda3D, PyOpenGL och Pyglet är några användbara moduler du kan bygga Python-spel med. Med Pygame kan du bygga 2D-spel som Super Mario Bros, Flappy Bird och Snake. Med Arcade kan du bygga en Pac-Man-, Asteroids- eller Breakout-klon.

Panda3D kan hjälpa dig att bygga 3D-spel som Toontown Online, Pirates of the Caribbean Online och Disneys Virtual Magic Kingdom.