上回python+pygame实现推箱子小游戏之一完成了推箱子工人的类的实现,现在可以完成其他一些元素的类的实现
二
其他的页面元素(箱子box,外墙wall,终点target)class gameElementSprite,同样继承自pygame.sprite.Sprite,用elementtype来区别,只有box可以被移动,同时在移动之前,要判断在当前的位置和方向上的下一个位置能不能到达,因此要返回下一个位置。有了前面的基础,这个的实现较为简单。
import os
import pygame
from params import Params
'''
游戏元素
'''
class gameElementSprite(pygame.sprite.Sprite):
def __init__(self, elementname, col, row):
pygame.sprite.Sprite.__init__(self)
# box.png/target.png/wall.png 分别代表箱子,终点,外墙
self.imagepath = os.path.join(Params.get('resourcePath'), Params.get('imgFolder'), elementname)
self.image = pygame.image.load(self.imagepath).convert_alpha()
self.rect = self.image.get_rect()
self.elementtype = elementname.split('.')[0] # 元素精灵类型,即box,target,wall
self.col = col
self.row = row
'''
移动游戏元素
'''
def move(self, direction):
if self.elementtype == 'box': #元素中只有box可以移动
if direction == 'up':
self.row -= 1
elif direction == 'down':
self.row += 1
elif direction == 'left':
self.col -= 1
elif direction == 'right':
self.col += 1
'''
获取下一个点的位置
'''
def getNextPos(self, direction):
if direction == 'up':
return self.col, self.row - 1
elif direction == 'down':
return self.col, self.row + 1
elif direction == 'left':
return self.col - 1, self.row
elif direction == 'right':
return self.col + 1, self.row
'''
将元素画到游戏界面上
'''
def draw(self, gamescreen):
self.rect.x = self.rect.width * self.col
self.rect.y = self.rect.height * self.row
gamescreen.blit(self.image, self.rect)
注解:
1、后续构造时,例如传进来的wall.png,就会在相应的坐标上draw一个“外墙”,其elementtype就是wall。
2、箱子box,外墙wall,终点target三者中,只有box是可以移动的。
待续...