python - 如何让蛇超出屏幕后,它会回到屏幕的另一边

标签 python pygame

嘿伙计们,我刚刚编写了贪吃蛇游戏,但我想要当 x=0(我的蛇位于位置 0)时,然后立即 x=600,就像它没有碰撞墙挡住它一样,我该怎么做?

编程语言:Python

我使用的库是 pygame

这是我的代码

import pygame, time

pygame.init()
clock = pygame.time.Clock()
#màu
black = (0, 0, 0)
white = (255,252,252)
red = (176, 59, 19)

screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption('Snake game by Vinhsieucapvjppro')

x = 300
y = 300
x_size = 10
y_size = 10
x1_change = 0       
y1_change = 0
vel = 5

game = True
while game:
    print(screen)
    screen.fill(black)
    pygame.draw.rect(screen,red,(x,y,x_size,y_size))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game = False
    #di chuyển
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        x1_change = -5
        y1_change = 0 
    if keys[pygame.K_RIGHT]:
        x1_change = 5
        y1_change = 0
    if keys[pygame.K_UP]:
        y1_change = -5
        x1_change = 0
    if keys[pygame.K_DOWN]:
        y1_change = 5
        x1_change = 0

    x += x1_change
    y += y1_change
    if x == 0:  #<---- ở đây có lỗi
        x = 600
    if x == 600:
        x = 0
    if y == 0:  #<---- ở đây có lỗi
        y = 600 
    if y == 600:
        y = 0
    pygame.display.flip()
    pygame.display.update()
    clock.tick(120)
    pygame.quit()

最佳答案

使用%(模)运算符。模运算符计算积分除法的余数:

x = (x + x1_change) % 600
y = (y + y1_change) % 600

代码中的实际问题是您设置了 x = 600,但您在以下行测试了 x == 600

if x == 0: 
   x = 600
if x == 600:
   x = 0

如果想带条件实现,就得用if-elif:

x += x1_change
y += y1_change

if x <= 0:
    x = 600
elif x >= 600:
    x = 0
    
if y <= 0:
    y = 600 
elif y >= 600:
    y = 0

关于python - 如何让蛇超出屏幕后,它会回到屏幕的另一边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70022866/

相关文章:

python - 根据特定元组值删除列表中的元素

python - 如何在 Pygame 环境中绘制矩形和圆形

python - 如何使用 tf.data.Dataset api 训练 keras.concatenate 模型?

python - 使用 MySQLdb 模块连接到 mysql 数据库的问题 (python)

python - 从日期时间中去除微秒

python - 如何让两个按键同时响应?

python - 使用 pygame 显示 unicode 符号

python - 在Python中用单个逗号替换行中可变数量的空格

python - PyGame 中弹跳球动画时出现奇怪的计时问题

python - pygame.time.set_timer() 事件重置?