0

好的,所以整晚我和其他 5 个人一直在为我们的 pygame 模块开发一个项目。我们的讲师没有给我们任何可供参考的程序,他只是向我们扔了一堆代码(没有评论)并期望我们明白了。我们从九月初才开始使用python。我们真的需要一些帮助。

所以我们有一个由 WAS & D 控制的人类玩家和 15 个在屏幕上移动的随机点。我们需要使用向量(我们从未使用过)来射击随机点。

请有人帮忙。

添加编辑代码~

import pygame class Terminator(pygame.sprite.Sprite): def __init__(self, screen): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((20, 20)) self.image.fill((0, 0, 0)) pygame.draw.circle(self.image, (255, 0, 0), (10, 10), 10, 0) self.rect = self.image.get_rect() self.dx = screen.get_width()/2 self.dy = screen.get_height()/2 self.rect.center = (self.dx, self.dy) self.speed = 5 self.screen = screen def update(self): self.rect.center = (self.dx, self.dy) def MoveLeft(self): if self.rect.left < 0: self.dx += 0 else: self.dx -= self.speed def MoveRight(self): if self.rect.right > self.screen.get_width(): self.dx += 0 else: self.dx += self.speed def MoveUp(self): if self.rect.top <0: self.dy += 0 else: self.dy -= self.speed def MoveDown(self): if self.rect.bottom > self.screen.get_height(): self.dy += 0 else: self.dy += self.speed <code> humansprite.py <pre> import pygame import random import math class Humans(pygame.sprite.Sprite): def __init__(self, screen): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((16, 16)) self.image.fill((0, 0, 0)) pygame.draw.circle(self.image, (0, 0, 255), (8, 8), 8, 0) self.rect = self.image.get_rect() self.dx = random.randrange(0, screen.get_height()) self.dy = random.randrange(0, screen.get_width()) self.screen = screen self.speed = 1 self.alive = True def update(self): self.rect.centerx -= self.dx self.rect.centery -= self.dy if self.rect.right < 0: self.reset() def reset(self): self.rect.left = self.screen.get_width() self.rect.centery = random.randrange(0, self.screen.get_height()) self.dy = random.randrange(-2, 2) self.dx = random.randrange(1, 4) <code> seekandDestory.py <pre> import pygame from TerminatorSprite import Terminator from humansSprite import Humans pygame.init() def checkKeys(myData): (event, ship) = myData if event.key == pygame.K_LEFT: print 'LEFT' ship.MoveLeft() if event.key == pygame.K_RIGHT: print 'RIGHT' ship.MoveRight() if event.key == pygame.K_UP: print 'UP' ship.MoveUp() if event.key == pygame.K_DOWN: print 'DOWN' ship.MoveDown() def main(): screen = pygame.display.set_mode((640, 480)) pygame.display.set_caption("Seek and Destroy") background = pygame.Surface(screen.get_size()) clock = pygame.time.Clock() screen.blit(background, (0, 0)) terminator = Terminator(screen) humans = [] for people in range(15): people = Humans(screen) humans.append(people) terminatorGroup = pygame.sprite.Group(terminator) humanGroup = pygame.sprite.Group(humans) clock = pygame.time.Clock() keepGoing = True pygame.key.set_repeat(10, 10) while keepGoing: clock.tick(60) pygame.mouse.set_visible(False) for event in pygame.event.get(): if event.type == pygame.QUIT: keepGoing = False if event.type == pygame.KEYDOWN: myData = (event, terminator) checkKeys(myData) #if pygame.sprite.spritecollide(terminator, humanGroup, False): terminatorGroup.clear(screen, background) terminatorGroup.update() terminatorGroup.draw(screen) humanGroup.clear(screen, background) humanGroup.update() humanGroup.draw(screen) pygame.display.flip() pygame.mouse.set_visible(True) if __name__ == "__main__": main() <code>
4

1 回答 1

0

我昨晚刚刚完成了这组示例!查看 Lunar Lander 示例,尤其是我在 lunarlander.py 中处理矢量的方式- 它提供了一个类V, 用于矢量管理。

您可能需要为您的人创建一个精灵,其矢量代表他的速度(时刻,可能为 0)和角度,然后是每个随机点的精灵,具有相似的矢量和角度。当你射击时,创建一个新的精灵,其矢量的角度与你的人所面对的当前角度相匹配,并且大小与子弹的速度相匹配。然后,在该update()方法中,移动每个精灵(项目符号、随机点)。非常类似于我正在做的事情lunarlander.py

祝你好运!如果您刚刚开始使用 Python,那将是一项艰巨的任务。快乐编码!

于 2013-10-22T19:35:27.500 回答