LWS大蛇 2025-03-01 15:42 采纳率: 100%
浏览 5
已结题

为什么运行不了jajakak


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)
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-01 15:42
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你的问题是关于使用 Python 和 Pygame 创建游戏时,为什么无法运行的。根据你提供的代码,问题可能出在多个地方。

    首先,Pygame 和 Tkinter 是两个不同的库,不能直接混合使用。Pygame 是一个游戏开发库,Tkinter 是一个 GUI 库。它们之间没有直接的关系。

    其次,Pygame 的初始化语句是 pygame.init(),而你代码中没有这个语句。

    最后,代码中有一些语法错误,例如 pygame.i 应该是 pygame.init()

    解决方案:

    1. 将 Tkinter 和 Pygame 分别使用。
    2. 在使用 Pygame 之前,需要初始化 Pygame 使用 pygame.init()
    3. 修复代码中的语法错误。

    以下是一个简单的示例代码,使用 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()
    

    这个示例代码创建了一个窗口,并监听用户关闭窗口的事件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月19日
  • 已采纳回答 2月11日
  • 创建了问题 3月1日