要求:设计一个有 GUI 界面的猜数游戏。有 5 个游戏者依次玩猜数游戏,“系统随机产生一 个 1-500 之间整数,同学输入猜测数,猜不中,提示是大了还是小了,继续猜,直到猜中为 止,记录猜测次数。”所有游戏者均完成后,按照猜测次数由低到高的次序排序游戏者。界 面可参考下图。
时间: 2023-11-11 15:04:12 浏览: 80
以下是一个简单的猜数字游戏的GUI界面,使用Python的Tkinter库来实现:
```python
import random
import tkinter as tk
class GuessNumber:
def __init__(self, master):
self.master = master
self.master.title("猜数字游戏")
self.master.geometry("400x300")
self.number = random.randint(1, 500)
self.guesses = []
self.label = tk.Label(self.master, text="猜一个1-500的数字")
self.label.pack(pady=10)
self.entry = tk.Entry(self.master, width=20)
self.entry.pack(pady=10)
self.button = tk.Button(self.master, text="猜", command=self.guess_number)
self.button.pack(pady=10)
self.result = tk.Label(self.master, text="")
self.result.pack(pady=10)
self.players = []
self.player_count = 0
self.player_scores = {}
self.add_player_button = tk.Button(self.master, text="添加玩家", command=self.add_player)
self.add_player_button.pack(pady=10)
self.start_game_button = tk.Button(self.master, text="开始游戏", command=self.start_game, state=tk.DISABLED)
self.start_game_button.pack(pady=10)
self.player_list = tk.Listbox(self.master)
self.player_list.pack(pady=10)
def guess_number(self):
try:
guess = int(self.entry.get())
except ValueError:
self.result.config(text="请输入数字")
return
if guess < 1 or guess > 500:
self.result.config(text="请输入1-500的数字")
return
self.guesses.append(guess)
if guess == self.number:
self.result.config(text="恭喜你猜对了,你用了{}次猜中了数字{}".format(len(self.guesses), self.number))
self.start_game_button.config(state=tk.NORMAL)
self.button.config(state=tk.DISABLED)
elif guess < self.number:
self.result.config(text="你猜的数字太小了")
else:
self.result.config(text="你猜的数字太大了")
def add_player(self):
player_name = tk.simpledialog.askstring("添加玩家", "请输入玩家名字")
if player_name:
self.players.append(player_name)
self.player_list.insert(tk.END, player_name)
self.player_count += 1
if self.player_count >= 2:
self.start_game_button.config(state=tk.NORMAL)
def start_game(self):
if len(self.players) < 2:
return
for player in self.players:
self.guesses = []
self.number = random.randint(1, 500)
self.label.config(text="{}的回合,猜一个1-500的数字".format(player))
self.button.config(state=tk.NORMAL)
self.result.config(text="")
self.master.wait_window(self.result)
self.player_scores[player] = len(self.guesses)
sorted_scores = sorted(self.player_scores.items(), key=lambda x: x[1])
score_string = "\n".join(["{}: {}次".format(player, score) for player, score in sorted_scores])
tk.messagebox.showinfo("游戏结束", score_string)
root = tk.Tk()
app = GuessNumber(root)
root.mainloop()
```
这个游戏有两个主要的部分:
1. 一个猜数字的游戏,其中用户可以输入数字并得到提示,直到猜中为止。
2. 一个多人游戏,其中每个玩家依次玩猜数字游戏,然后记录他们的猜测次数并按照次数排序。
在上面的代码中,我们使用了Tkinter库来创建GUI界面。我们创建了一个名为`GuessNumber`的类,它包含了所有游戏逻辑和界面组件。我们在类的初始化方法中设置了窗口的标题、大小,并创建了所有必要的组件。我们还随机生成了一个1-500之间的数字,并将其存储在`self.number`中。
我们使用`self.entry`和`self.button`组件来获取用户的输入,然后在`guess_number`方法中检查输入是否有效,并根据输入给出提示。如果用户猜对了,我们使用`self.result`组件来显示恭喜消息,并将`self.start_game_button`按钮启用,以便用户可以开始下一个回合。如果用户猜错了,我们只是给他们一个提示,并继续等待他们的下一个猜测。
我们还有一个`add_player`方法,用于添加新的玩家。当用户单击“添加玩家”按钮时,我们使用`tk.simpledialog.askstring`方法来获取新玩家的名称,并将其添加到`self.players`列表中。我们还使用`self.player_list`组件来显示所有已添加的玩家,并在至少有两个玩家时启用“开始游戏”按钮。
当用户单击“开始游戏”按钮时,我们遍历所有已添加的玩家,并为每个玩家依次玩猜数字游戏。我们使用`self.master.wait_window`方法来等待用户的输入,然后将其猜测次数存储在`self.player_scores`字典中。最后,我们按照猜测次数对字典进行排序,并使用`tk.messagebox.showinfo`方法显示所有玩家的得分。
这只是一个简单的示例,您可以根据需要对其进行更改和扩展。
阅读全文