需要帮助完成飞镖计分系统

-2 投票
1 回答
2159 浏览
提问于 2025-04-18 08:30

我创建了一个飞镖计分系统,可以支持多个玩家,并且在tkinter的图形界面上显示。就像真实的飞镖游戏一样,每个玩家一开始都有501分,我设置了按钮来减少分数,以模拟投掷飞镖的过程。

我快完成了,但我希望能让玩家的分数不低于0。目前的情况是,分数会变成负数。例如,如果一个玩家的分数是5分,然后投中了20分,那么分数就会变成-15,而不是停在0分。

希望能得到一些帮助!

这是我的代码(抱歉有点长):

import tkinter
from tkinter import *

class Application(object):

    def __init__(self):
        self.playerNames = []
        self.playerScores = []
        self.root = tkinter.Tk()

        self.gameCounter=0

        self.numberPlayers=0
        self.inputNumber=0
        self.root.title("Darts!")
        self.root.configure(background="light blue")

        self.welcomeLabel = tkinter.Label(text="Welcome to Darts!", bg="light blue", fg="red")
        self.welcomeLabel.grid(column=0, row=0)

        self.dartsLabel = tkinter.Label(text = "Enter Player names in one by one", bg="light blue", fg="Dark blue")
        self.dartsLabel.grid(column=0, row=1)

        self.nameEntry = tkinter.Entry(text="OK", fg="purple")
        self.nameEntry.grid(column=0, row=2)

        self.btnAddListItem = tkinter.Button(text = "Add Player", command = self.addNewName, bg="light grey")
        self.btnAddListItem.grid(column=0, row=3)

        self.finishedAdding = tkinter.Button(text = "Play Darts!", command = self.displayNames, bg="light grey")
        self.finishedAdding.grid(column=0, row=4)

        self.QuitBtn = tkinter.Button(text="Quit", command=self.comfirmQuit, bg="light grey")
        self.QuitBtn.grid(column=0, row=20)

    def comfirmQuit(self):
        self.comfirmQuitLabel = tkinter.Label(text="Are you sure?", bg="light blue", fg="red")
        self.comfirmQuitLabel.grid(column=0, row=21)

        self.comfirmQuitButton = tkinter.Button(text="Yes", command= self.quitGame, bg="light grey")
        self.comfirmQuitButton.grid(column=0, row=22)

        self.cancelQuitButton = tkinter.Button(text="No", command=self.cancelQuit, bg="light grey")
        self.cancelQuitButton.grid(column=0, row=23)

    def quitGame(self):
        global root
        self.root.destroy()

    def cancelQuit(self):
        self.comfirmQuitButton.destroy()
        self.cancelQuitButton.destroy()
        self.comfirmQuitLabel.destroy()

    def addNewName(self):
        Inputname = self.nameEntry.get()
        self.playerNames.append(Inputname)
        self.nameEntry.delete(0, tkinter.END)

    def displayNames(self):
        self.welcomeLabel.destroy()
        self.dartsLabel.destroy()
        self.nameEntry.destroy()
        self.btnAddListItem.destroy()
        self.finishedAdding.destroy()
        self.labelsForPlayerNames = []
        self.numberPlayers=len(self.playerNames)
        while self.numberPlayers>self.gameCounter:
            self.playerScores.append(501)
            self.gameCounter+=1
        self.turnCounter=0
        self.playerCounter=0
        self.roundNumber=1
        self.theScore()

    def theScore(self):

        self.dartsLabel = tkinter.Label(text = "Turn: " + self.playerNames[0], bg="light blue", fg="dark blue")
        self.dartsLabel.grid(column=0, row=0)
        self.playerScoreLabel = tkinter.Label(text =self.playerScores[0], bg="light blue", fg="red")
        self.playerScoreLabel.grid(column=0, row=3)
        self.scoreSpin=Spinbox(from_ =1, to=20, bg="light grey", fg="purple")
        self.scoreSpin.grid(column=0, row=2)

        self.btnAddListItem = tkinter.Button(text = "No Multiplier", command = self.singleScore, bg="light grey")
        self.btnAddListItem.grid(column=0, row=4)
        self.btnAddListItem = tkinter.Button(text = "2x Multiplier", command = self.doubleScore, bg="light grey")
        self.btnAddListItem.grid(column=0, row=5)
        self.btnAddListItem = tkinter.Button(text = "3x Multiplier", command = self.tripleScore, bg="light grey")
        self.btnAddListItem.grid(column=0, row=6)
        self.btnAddListItem = tkinter.Button(text = "Half Bullseye", command = self.scoreHalfBullseye, bg="light grey")
        self.btnAddListItem.grid(column=0, row=7)
        self.btnAddListItem = tkinter.Button(text = "Bullseye", command = self.scoreBullseye, bg="light grey")
        self.btnAddListItem.grid(column=0, row=8)

    def singleScore(self):
        self.inputNumber = int(self.scoreSpin.get())
        self.scoringSystem()
    def doubleScore(self):
        self.inputNumber = int(self.scoreSpin.get())
        self.inputNumber=self.inputNumber*2
        self.scoringSystem()

    def tripleScore(self):
        self.inputNumber = int(self.scoreSpin.get())
        self.inputNumber=self.inputNumber*3
        self.scoringSystem()
    def scoreHalfBullseye(self):
        self.inputNumber = 25
        self.scoringSystem()
    def scoreBullseye(self):
        self.inputNumber = 50
        self.scoringSystem()

    def scoringSystem(self):
        self.turnCounter+=1
        self.playerScores[self.playerCounter]=self.playerScores[self.playerCounter]-self.inputNumber
        self.playerScoreLabel.config(text= self.playerScores[self.playerCounter])
        self.dartsLabel.grid(column=0, row=3)

        if self.turnCounter>2:                
            self.playerCounter+=1
            self.turnCounter=0

        if self.playerCounter>=self.numberPlayers:
            self.playerCounter=0
            self.roundNumber+=1
            self.displayScores()
        self.dartsLabel.config(text= "Turn: " + self.playerNames[self.playerCounter])
        self.dartsLabel.grid(column=0, row=0)
        self.root.wm_title("Round: %d" % self.roundNumber)

    def displayScores(self):
        self.dartsLabel.destroy()
        self.scoreSpin.destroy()
        self.btnAddListItem.destroy()
        self.root.wm_title("Round Scores")
        self.theScore()   

myApp = Application()
myApp.root.mainloop()

1 个回答

0

假设你希望在潜在得分大于实际得分时,不发生任何事情:

if potential_score > actual_score:
    pass
else:
    compute_score()

撰写回答