鱼C论坛

 找回密码
 立即注册
查看: 788|回复: 2

[已解决]pygame贪吃蛇问题(又又是我)

[复制链接]
发表于 2023-11-19 14:43:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pygame
import sys
from pygame.locals import *
import 金币
pygame.init()
size = width, height = 600, 400
bg = (255, 255, 255)
YELLOW = (255, 255, 0)
snake = (0, 255, 0)
BLACK = (0, 0, 0)
fanxiang = 'right'
left = 300
top = 200
screen = pygame.display.set_mode(size)
pygame.display.set_caption('贪吃蛇')
move = USEREVENT
pygame.time.set_timer(move, 1 * 1000)
money = USEREVENT + 1
pygame.time.set_timer(money, 5 * 1000)
score = 0
score_font = pygame.font.Font(None, 20)

Money = pygame.sprite.Group()


while True:
   
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == move:
            if fanxiang == 'left':
                left -= 11
            elif fanxiang == 'top':
                top -= 11
            elif fanxiang == 'right':
                left += 11
            elif fanxiang == 'bottom':
                top += 11
        #生成金币
        elif event.type == money:
            
            m = 金币.money()
            Money.add(m)
   
    key_pressed = pygame.key.get_pressed()
   
    #控制方向
    if key_pressed[K_w] or key_pressed[K_UP]:
        fanxiang = 'top'
    if key_pressed[K_s] or key_pressed[K_DOWN]:
        fanxiang = 'bottom'
    if key_pressed[K_d] or key_pressed[K_RIGHT]:
        fanxiang = 'right'
    if key_pressed[K_a] or key_pressed[K_LEFT]:
        fanxiang = 'left'

   #显示字迹
    score_text = score_font.render(f'Score:{score}', True, BLACK)
    screen.blit(score_text, (10, 5))
   
        

    screen.fill(bg)
    #金币机制
    for i in Money:
        pygame.draw.rect(screen, YELLOW, i.rect, 0)
        if i.rect.colliderect(pygame.Rect(left, top, 10, 10)):
            score+=1000
            Money.remove(i)
    #绘制贪吃蛇
    pygame.draw.rect(screen, snake, (left, top, 10, 10), 0)
    pygame.display.flip()
问,为什么无法显示字迹?谢谢
最佳答案
2023-11-19 14:43:40
您好,根据您的代码,您需要将 screen.blit 和 pygame.display.flip 的顺序调换一下。将 screen.blit 放在 screen.fill(bg) 之后, pygame.display.flip 放在最后即可。这样做可以确保字迹能够显示在屏幕上。希望能帮到您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 14:43:40 | 显示全部楼层    本楼为最佳答案   
您好,根据您的代码,您需要将 screen.blit 和 pygame.display.flip 的顺序调换一下。将 screen.blit 放在 screen.fill(bg) 之后, pygame.display.flip 放在最后即可。这样做可以确保字迹能够显示在屏幕上。希望能帮到您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 14:46:52 | 显示全部楼层
问题分析:
你的代码中,在每一帧绘制画面之前,你使用screen.fill(bg)将屏幕背景填充为白色。然后在这之后,你绘制了金币、贪吃蛇和字迹。由于字迹是在最后绘制的,所以会被覆盖掉,导致无法显示。

解决方法:
你需要将screen.fill(bg)的位置放到绘制字迹之前,这样字迹就能显示在背景之上了。

修改后的代码如下所示:
  1. # ...
  2. while True:
  3.     for event in pygame.event.get():
  4.         if event.type == pygame.QUIT:
  5.             sys.exit()
  6.         elif event.type == move:
  7.             # 移动逻辑...
  8.         elif event.type == money:
  9.             # 生成金币...
  10.     key_pressed = pygame.key.get_pressed()
  11.    
  12.     # 控制方向...
  13.    
  14.     # 显示字迹
  15.     score_text = score_font.render(f'Score:{score}', True, BLACK)
  16.     screen.blit(score_text, (10, 5))
  17.    
  18.     screen.fill(bg)  # 将屏幕背景填充为白色
  19.    
  20.     # 金币机制...
  21.     # 绘制贪吃蛇...
  22.     pygame.display.flip()
复制代码

这样修改后,应该就可以正确显示字迹了。

希望能帮到你!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表