How to add levels in a game built in python onely with TKINTER? [closed]

ぃ、小莉子 提交于 2021-02-16 21:25:58

问题


I'm working on a memory game that you have to find the position of the red ball,once you move your ball, the red one disappeare, so in order to get more points you had to move as fast as you can, my problem is how to add more levels, for example Level 1 : find 5 red ball's position, Level 2 Find 10 positions. here's the code below: '''

 from tkinter import *
from random import *
import time

global posPlayer ; global posGoal ; global n ; global c ; global score
global nbGoal ; global gameTime

score=0 ; posPlayer=[0,0] ; n=15 ; c=50

########### #### Shifts management #################################

def right(event = None):
    posPlayer[0]+=50
    if posPlayer[0]>700:
        posPlayer[0]=700
    dep_right()

def dep_right():
    c1.delete(ALL)
    rond= c1.create_oval(posPlayer[0],posPlayer[1],posPlayer[0]+c, posPlayer[1]+c,fill='#fff')
    play()

def left(event = None):
    posPlayer[0]-=50
    if posPlayer[0]<0:
        posPlayer[0]=0
    dep_left()

def dep_left():
    c1.delete(ALL)
    rond = c1.create_oval(posPlayer[0],posPlayer[1],posPlayer[0]+c, posPlayer[1]+c,fill='#fff')
    play()

def down(event = None):
    posPlayer[1]+=50
    if posPlayer[1]>700:
        posPlayer[1]=700
    dep_down()

def dep_down():
    c1.delete(ALL)
    rond = c1.create_oval(posPlayer[0],posPlayer[1],posPlayer[0]+c, posPlayer[1]+c,fill='#fff')
    play()

def up(event = None):
    posPlayer[1]-=50
    if posPlayer[1]<0:
        posPlayer[1]=0
    dep_up()

def dep_up():
    c1.delete(ALL)
    rond = c1.create_oval(posPlayer[0],posPlayer[1],posPlayer[0]+c, posPlayer[1]+c,fill='#fff')
    play()


################# game management #########################################

def startGame():
    global score ; global gameTime ; global nbGoal ; global posPlayer
    global posGoal
    nbGoal=0
    gameTime=[time.time(),0]
    score=0
    posPlayer = [0, 0]
    posGoal = [0, 0]
    Goal()

def Goal():
    global nbGoal
    nbGoal =nbGoal+ 1
    posGoal[0]=randint(0,14)*50
    posGoal[1]=randint(0,14)*50
    but=c1.create_oval(posGoal[0],posGoal[1],posGoal[0]+c,posGoal[1]+c, fill="red")
    play()


def play():
    global score
    if posPlayer[0]==posGoal[0] and posPlayer[1]==posGoal[1]:
        if nbGoal==5:
            gameTime[1]=time.time()
            score=round(1/(gameTime[1]-gameTime[0])*1000,2)
            displayScore.set("Score =" +str(score))
            c1.create_text(c*n/2, c*n/2, font="Purisa",
                               text="Jeu terminé !",fill="red")
            c1.pack()
        else:
            Goal()


################# main program ####################################

f1=Tk()
f1.title("Python Game Challenge")
f1.bind("<Right>", right) ; f1.bind("<Left>", left)
f1.bind("<Down>", down) ; f1.bind("<Up>", up)

l1 = Label(f1, text="Welcome to my GAME !")
l1.pack(side="top",ipadx=30,ipady=30)

displayScore=StringVar()
displayScore.set("Score =00.00")
l2 = Label(f1, textvariable=displayScore)
l2.pack(side="right",ipadx=10,ipady=10)

b1=Button(f1,text="play",fg='yellow',bg="black", command=startGame)
b1.pack(side="left",ipadx=10,ipady=10)

b2=Button(f1,text="Close",fg='yellow',bg="black",command=f1.destroy)
b2.pack(side="left",ipadx=10,ipady=10)

c1=Canvas(f1,width=n*c,height=n*c, bg="black")
rond = c1.create_oval(posPlayer[0],posPlayer[1],posPlayer[0]+c, posPlayer[1]+c,fill='#fff')
c1.pack()
f1.mainloop()

''' 

回答1:


After I get how this game is meant to play I think I found the solution:

if nbBut==5:

is the instance that decide if the game is over or not. So the first step would be to make the comperator variable and set it higher like:

goal = IntVar()

def jouer():
    global score
    if posJoueur[0]==posBut[0] and posJoueur[1]==posBut[1]:
        if nbBut==goal:
            ...
            goal.set(goal.get()+1)

full code, let me know if something missing here:

from tkinter import *
from random import *
import time

global posJoueur ; global posBut ; global n ; global c ; global score
global nbBut ; global gameTime

score=0 ; posJoueur=[0,0] ; n=15 ; c=50

'########### #### Gestion des déplacements #################################'

def droite(event = None):
    posJoueur[0]+=50
    if posJoueur[0]>700:
        posJoueur[0]=700
    dep_droite()

def dep_droite():
    c1.delete(ALL)
    rond= c1.create_oval(posJoueur[0],posJoueur[1],posJoueur[0]+c, posJoueur[1]+c,fill='#fff')
    jouer()

def gauche(event = None):
    posJoueur[0]-=50
    if posJoueur[0]<0:
        posJoueur[0]=0
    dep_gauche()

def dep_gauche():
    c1.delete(ALL)
    rond = c1.create_oval(posJoueur[0],posJoueur[1],posJoueur[0]+c, posJoueur[1]+c,fill='#fff')
    jouer()

def bas(event = None):
    posJoueur[1]+=50
    if posJoueur[1]>700:
        posJoueur[1]=700
    dep_bas()

def dep_bas():
    c1.delete(ALL)
    rond = c1.create_oval(posJoueur[0],posJoueur[1],posJoueur[0]+c, posJoueur[1]+c,fill='#fff')
    jouer()

def haut(event = None):
    posJoueur[1]-=50
    if posJoueur[1]<0:
        posJoueur[1]=0
    dep_haut()

def dep_haut():
    c1.delete(ALL)
    rond = c1.create_oval(posJoueur[0],posJoueur[1],posJoueur[0]+c, posJoueur[1]+c,fill='#fff')
    jouer()


'################# Gestion du jeu #########################################'

def commencerJeu():
    global score ; global gameTime ; global nbBut ; global posJoueur
    global posBut
    nbBut=0
    gameTime=[time.time(),0]
    score=0
    posJoueur = [0, 0]
    posBut = [0, 0]
    But()

def But():
    global nbBut
    nbBut =nbBut+ 1
    posBut[0]=randint(0,14)*50
    posBut[1]=randint(0,14)*50
    but=c1.create_oval(posBut[0],posBut[1],posBut[0]+c,posBut[1]+c, fill="red")
    jouer()

def jouer():
    global score
    if posJoueur[0]==posBut[0] and posJoueur[1]==posBut[1]:
        if nbBut==goal.get():
            gameTime[1]=time.time()
            score=round(1/(gameTime[1]-gameTime[0])*1000,2)
            affichageScore.set("Score =" +str(score))
            c1.create_text(c*n/2, c*n/2, font="Purisa",
                               text="Jeu terminé !",fill="red")
            c1.pack()
            goal.set(goal.get()+1)
        else:
            But()


'################# programme principale ####################################'

f1=Tk()
f1.title("Python Game Challenge")
f1.bind("<Right>", droite) ; f1.bind("<Left>", gauche)
f1.bind("<Down>", bas) ; f1.bind("<Up>", haut)

l1 = Label(f1, text="Bienvenu dans mon jeu !")
l1.pack(side="top",ipadx=30,ipady=30)

affichageScore=StringVar()
affichageScore.set("Score =00.00")
l2 = Label(f1, textvariable=affichageScore)
l2.pack(side="right",ipadx=10,ipady=10)

b1=Button(f1,text="Jouer",fg='yellow',bg="black", command=commencerJeu)
b1.pack(side="left",ipadx=10,ipady=10)

b2=Button(f1,text="Fermer",fg='yellow',bg="black",command=f1.destroy)
b2.pack(side="left",ipadx=10,ipady=10)

c1=Canvas(f1,width=n*c,height=n*c, bg="black")
rond = c1.create_oval(posJoueur[0],posJoueur[1],posJoueur[0]+c, posJoueur[1]+c,fill='#fff')
c1.pack()

goal = IntVar()
goal.set(1)

f1.mainloop()


来源:https://stackoverflow.com/questions/66194817/how-to-add-levels-in-a-game-built-in-python-onely-with-tkinter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!