问题
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