import pygame
import random
import tkinter as tk
from tkinter import messagebox as msgbox
pygame.init()
add_enemies = pygame.USEREVENT
pygame.time.set_timer(add_enemies, 400)
height = 800
width = 1000
score = 0
font = pygame.font.Font(None, 30)
font_ = pygame.font.Font(None, 30)
scores = int(open("highest-score.score").read())
class Highest():
def __init__(self):
self.sur = pygame.Surface((20, 4000))
self.sur.fill("yellow")
self.rect = self.sur.get_rect(x=2500, y=0)
def draw(self):
screen.blit(self.sur, self.rect)
def move(self):
self.rect.right -= 9
class Enemy(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.sur = pygame.Surface((random.randint(40, 160),random.randint(60, 180)))
self.sur.fill("red")
self.rect = self.sur.get_rect(x=2600, y=random.randint(0, 1000))
def draw(self):
screen.blit(self.sur, self.rect)
def move(self):
self.speed = 8 + int(score / 200)
self.rect.right -= self.speed
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.sur = pygame.Surface((50,50))
self.rect = self.sur.get_rect()
self.sur.fill("green")
def draw(self):
screen.blit(self.sur, self.rect)
def move(self, dx, dy):
# NOTE: 修改移动逻辑,通过参数控制移动方向
self.rect.x += dx
self.rect.y += dy
highest = Highest()
player = Player()
screen = pygame.display.set_mode((width, height))
enemies = pygame.sprite.Group()
# NOTE: 定义按钮的初始位置和大小
button_width = 180
button_height = 100
buttons = [
pygame.ect(2000, height - button_height, button_width, button_height), # 左
pygame.Rect(150, height - button_height - 150, button_width, button_height), # 上
pygame.Rect(150, height - button_height + 150, button_width, button_height), # 下
pygame.Rect(2300, height - button_height, button_width, button_height) # 右
]
button_colors = ["grey", "grey", "grey", "grey"]
button_labels = ["Left", "Up", "Down", "Right"]
clock = pygame.time.Clock()
while True:
score += 1
text_ = font.render(f"score{score} ", True, "black")
if score >= scores:
text_1 = font_.render(f"highest-score {score}", True, "red")
else:
text_1 = font_.render(f"highest-score {scores}", True, "red")
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == add_enemies:
enemies.add(Enemy())
# NOTE: 处理按钮点击事件
if event.type == pygame.MOUSEBUTTONDOWN:
mouse_pos = pygame.mouse.get_pos()
for i, button in enumerate(buttons):
if button.collidepoint(mouse_pos):
if i == 0:
player.rect.right -= 30 # 左移
elif i == 1:
player.rect.bottom -= 30 # 上移
elif i == 2:
player.rect.bottom += 30 # 下移
elif i == 3:
player.rect.right += 30 # 右移
for enemy in enemies:
if pygame.sprite.collide_rect(enemy, player):
score_ = int(open("highest-score.score").read())
if score >= score_:
with open("highest-score.score", mode="w", encoding="utf-8")as f:
f.write(str(score))
pygame.quit()
if score >= score_:
msgbox.showwarning("Game Over", f"你获得了{score}分,创造了新纪录!")
if score <= score_:
msgbox.showwarning("Game Over", f"你获得了{score}分,最高分{score_}")
screen.fill("white")
player.draw()
s = scores - 250
if score >= s:
highest.draw()
highest.move()
for enemy in enemies:
enemy.draw()
for enemy in enemies:
enemy.move()
screen.blit(text_, (10, 20))
screen.blit(text_1, (10, 60))
# NOTE: 绘制按钮
for i, button in enumerate(buttons):
pygame.draw.rect(screen, button_colors[i], button)
font = pygame.font.Font(None, 36)
text = font.render(button_labels[i], True, "black")
screen.blit(text, (button.x + 10, button.y + 10))
pygame.display.flip()
clock.tick(60)
为什么运行不了jajakak
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
阿里嘎多学长 2025-03-01 15:42关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
问题解答
你的问题是关于使用 Python 和 Pygame 创建游戏时,为什么无法运行的。根据你提供的代码,问题可能出在多个地方。
首先,Pygame 和 Tkinter 是两个不同的库,不能直接混合使用。Pygame 是一个游戏开发库,Tkinter 是一个 GUI 库。它们之间没有直接的关系。
其次,Pygame 的初始化语句是
pygame.init(),而你代码中没有这个语句。最后,代码中有一些语法错误,例如
pygame.i应该是pygame.init()。解决方案:
- 将 Tkinter 和 Pygame 分别使用。
- 在使用 Pygame 之前,需要初始化 Pygame 使用
pygame.init()。 - 修复代码中的语法错误。
以下是一个简单的示例代码,使用 Pygame 创建一个窗口:
import pygame pygame.init() screen = pygame.display.set_mode((640, 480)) pygame.display.set_caption('My Game') running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit()这个示例代码创建了一个窗口,并监听用户关闭窗口的事件。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报