0

プレーヤーを反対側にループさせるにはどうすればよいですか (パックマンがマップの片側から反対側に移動するのと同じように)? また、弾丸を撃ったときの効果音を追加したいのですが、3.6 の Pygame について詳細を見つけるのはかなり難しいと感じました。(これは再フォーマットする必要があるかもしれません。投稿するように手動でコードの間隔を空けました)

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()
4

2 に答える 2

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
于 2017-03-10T04:53:39.067 に答える