如何让我的播放器环绕水平而不是撞墙?

时间:2017-03-10 04:30:13

标签: python pygame-surface

我怎样才能让玩家绕到另一边(类似于Pacman如何从地图的一侧移动到另一侧)?另外,我想在拍子弹时添加一些声音效果,但我发现很难找到关于Pygame 3.6的任何深度。 (这可能需要重新格式化,我手动间隔代码,以便发布)

import pygame, time, os, random
from pygame.locals import
pygame.init()
bcolor = pygame.Color("red")
 surfacex = 400  # Surface X size
 surfacey = 400  # Surface Y size
 surface = pygame.display.set_mode([surfacex, surfacey])
 surface.fill(bcolor)

  move_direction = 0
  enemy_direction = 0


  class obj_player(object):
   def __init__(self):
    self.rect = pygame.Rect(200, 350, 16, 16)

def move(self, dir):
    if dir == 0 and self.rect.x <= surfacex - 16:
        self.rect.x += 5
    if dir == 1 and self.rect.x >= 0:
        self.rect.x -= 5


 class shoot_bullet(object):
def __init__(self):
    list_bullets.append(self)
    self.rect = pygame.Rect(player.rect.x + 8, 350, 4, 8)

def update(self):
    self.rect.y -= 5

    for enemy in list_enemies:
        if self.rect.colliderect(enemy.rect):
            list_bullets.remove(self)
            list_enemies.remove(enemy)


  class obj_enemy(object):
    def __init__(self, pos):
    list_enemies.append(self)
       self.rect = pygame.Rect(pos[0], pos[1], 16, 16)

def update(self, dir):
    if dir == 0:
        self.rect.x += 2
    if dir == 1:
        self.rect.x -= 2


   player = obj_player()
   clock = pygame.time.Clock()

   can_shoot = True

   list_bullets = []
   list_enemies = []

  pygame.time.set_timer(USEREVENT + 1, 2000)

  for yy in range(5):
   for xx in range(5):
    obj_enemy((0 + 35 * xx, 50 + 35 * yy))

 while True:
clock.tick(60)
surface.fill([0, 0, 0])

if pygame.event.peek(pygame.QUIT):
    pygame.display.quit()
    quit()

key = pygame.key.get_pressed()
if key[pygame.K_LEFT]:
    move_direction = 1
if key[pygame.K_RIGHT]:
    move_direction = 0
if key[pygame.K_SPACE] and can_shoot == True:
    can_shoot = False
    shoot_bullet()
if key[pygame.K_SPACE] == False and can_shoot == False:
    can_shoot = True
player.move((move_direction))

for bullet in list_bullets:
    bullet.update()
    pygame.draw.rect(surface, (46, 222, 16), bullet.rect)

for enemy in list_enemies:
    enemy.update(enemy_direction)
    pygame.draw.rect(surface, (46, 222, 16), enemy.rect)

pygame.draw.rect(surface, (0, 255, 255), player.rect)
pygame.display.flip()

   for event in pygame.event.get():
    if event.type == USEREVENT + 1:
        if enemy_direction == 0:
            enemy_direction = 1
        else:
            enemy_direction = 0
   if len(list_enemies) == 0:
    print("YOU WIN")
    break
  pygame.display.quit()

2 个答案:

答案 0 :(得分:0)

当前的obj_player.move方法只是检查是否有空间在当前方向上移动,如果存在则移动。对于每个方向,您需要添加将播放器移动到屏幕另一侧的行为,此时无法在当前方向移动。

def move(self, direction):
    if direction:
        if self.rect.x:
            self.rect.x -= 5
        else:
            self.rect.x = surfacex-20
    else:
        if self.rect.x <= surfacex-16:
            self.rect.x += 5
        else:
            self.rect = 0

答案 1 :(得分:0)

将此添加到move()方法

if self.rect.x > surfacex:
    self.rect.x = 0

if self.rect.right < 0:
    self.rect.right = surfacex

if self.rect.y > surfacey:
    self.rect.y = 0

if self.rect.bottom < 0:
    self.rect.bottom = surfacey

这意味着:如果你的播放器不在屏幕上,那么#34;移动&#34;他到了对手那边。