如何让我的玩家在关卡中循环而不是撞到墙上?
How to make my player loop around the level instead of hit the wall?
我怎样才能让玩家绕到另一边(类似于吃豆人如何从地图的一侧移动到另一侧)?另外,我想为我射击子弹时添加一些音效,但我发现很难找到关于 3.6 的 Pygame 的任何深入内容。
(这可能需要重新格式化,我手动将代码隔开,这样就可以 post)
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()
当前的 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
将此添加到您的 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
这意味着:如果你的球员在屏幕外"move"他到对手方。
我怎样才能让玩家绕到另一边(类似于吃豆人如何从地图的一侧移动到另一侧)?另外,我想为我射击子弹时添加一些音效,但我发现很难找到关于 3.6 的 Pygame 的任何深入内容。 (这可能需要重新格式化,我手动将代码隔开,这样就可以 post)
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()
当前的 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
将此添加到您的 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
这意味着:如果你的球员在屏幕外"move"他到对手方。