以tk主界面一个按钮指令作为pygame限时计分打地鼠游戏开始的打地鼠函数
时间: 2024-05-10 07:17:36 浏览: 155
好的,以下是一个简单的打地鼠游戏的代码,使用了Pygame库,并且以tkinter GUI界面的一个按钮作为触发器。
```python
import pygame
import os
import random
import tkinter as tk
# 初始化Pygame
pygame.init()
# 设置游戏窗口大小
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 400
# 设置游戏界面背景颜色
BACKGROUND_COLOR = (255, 255, 255)
# 设置地鼠出现和消失的时间间隔
MOLE_APPEAR_TIME = 1000
MOLE_DISAPPEAR_TIME = 500
# 设置地鼠出现的位置
MOLE_X_POSITIONS = [100, 200, 300, 400, 500]
MOLE_Y_POSITIONS = [100, 200, 300]
# 设置地鼠图片的大小
MOLE_WIDTH = 70
MOLE_HEIGHT = 70
# 加载地鼠图片
MOLE_IMAGE = pygame.image.load(os.path.join("resources", "mole.png"))
# 设置游戏字体
FONT = pygame.font.Font(None, 36)
# 初始化计分和剩余时间
SCORE = 0
TIME_LEFT = 30
# 设置Pygame窗口
game_window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("打地鼠游戏")
# 创建一个计时器
clock = pygame.time.Clock()
# 创建一个地鼠类
class Mole:
def __init__(self, x, y, appear_time, disappear_time):
self.x = x
self.y = y
self.appear_time = appear_time
self.disappear_time = disappear_time
self.time = 0
self.visible = False
def draw(self, window):
if self.visible:
window.blit(MOLE_IMAGE, (self.x, self.y))
def update(self, dt):
self.time += dt
if self.time >= self.appear_time and not self.visible:
self.visible = True
self.time = 0
if self.time >= self.disappear_time and self.visible:
self.visible = False
self.time = 0
def check_hit(self, x, y):
if self.visible and self.x <= x <= self.x + MOLE_WIDTH and self.y <= y <= self.y + MOLE_HEIGHT:
self.visible = False
return True
return False
# 创建地鼠对象列表
moles = [Mole(x, y, MOLE_APPEAR_TIME, MOLE_DISAPPEAR_TIME) for x in MOLE_X_POSITIONS for y in MOLE_Y_POSITIONS]
# 创建游戏主循环
def main_loop():
global SCORE, TIME_LEFT
# 设置计时器
last_tick = pygame.time.get_ticks()
# 游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
elif event.type == pygame.MOUSEBUTTONDOWN:
# 检测是否有地鼠被打中
for mole in moles:
if mole.check_hit(*event.pos):
SCORE += 1
# 获取当前时间
current_tick = pygame.time.get_ticks()
# 计算时间差
dt = current_tick - last_tick
last_tick = current_tick
# 更新地鼠状态
for mole in moles:
mole.update(dt)
# 绘制游戏界面
game_window.fill(BACKGROUND_COLOR)
for mole in moles:
mole.draw(game_window)
score_text = FONT.render("得分: {}".format(SCORE), True, (0, 0, 0))
game_window.blit(score_text, (10, 10))
time_text = FONT.render("剩余时间: {}".format(TIME_LEFT), True, (0, 0, 0))
game_window.blit(time_text, (WINDOW_WIDTH - time_text.get_width() - 10, 10))
# 更新游戏时间
TIME_LEFT -= dt / 1000
# 判断游戏是否结束
if TIME_LEFT <= 0:
game_over_text = FONT.render("游戏结束", True, (0, 0, 0))
game_window.blit(game_over_text, ((WINDOW_WIDTH - game_over_text.get_width()) / 2, (WINDOW_HEIGHT - game_over_text.get_height()) / 2))
pygame.display.update()
pygame.time.wait(3000)
pygame.quit()
quit()
# 更新游戏界面
pygame.display.update()
# 设置游戏帧率
clock.tick(60)
# 创建一个开始游戏的函数
def start_game():
global SCORE, TIME_LEFT
# 重置计分和剩余时间
SCORE = 0
TIME_LEFT = 30
# 开始游戏主循环
main_loop()
# 创建一个tkinter窗口
root = tk.Tk()
root.geometry("200x100")
# 创建一个开始游戏的按钮
start_button = tk.Button(root, text="开始游戏", command=start_game)
start_button.pack()
# 进入tkinter主循环
root.mainloop()
```
这个程序会在tkinter窗口中创建一个"开始游戏"的按钮,当用户点击该按钮时,程序会进入游戏主循环,开始打地鼠游戏。游戏界面会在Pygame窗口中显示,用户可以用鼠标点击地鼠来打中它们,每打中一个地鼠,计分器就会加1分,游戏时间为30秒,时间到了游戏结束。
阅读全文