如何使用TKINTER在python内置的游戏中添加关卡?

2024-09-30 02:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个记忆游戏,你必须找到红球的位置,一旦你移动你的球,红球就会消失,所以为了得到更多的分数,你必须尽可能快地移动,我的问题是如何添加更多的级别,例如级别1:找到5个红球的位置,级别2找到10个位置。 下面是代码: '''

 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()

''' 

Tags: playifdefcreatefillglobalf1score
1条回答
网友
1楼 · 发布于 2024-09-30 02:36:59

在我了解了这个游戏的意义后,我想我找到了解决方案:

if nbBut==5:

是决定游戏是否结束的实例。因此,第一步是使comperator变量并将其设置得更高,如:

goal = IntVar()

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

完整代码,如果此处缺少某些内容,请通知我:

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()

相关问题 更多 >

    热门问题