2013-10-22 38 views
0

好吧,讓我和其他5人一直在爲我們的pygame模塊開發一個項目。我們的講師並沒有給我們提供任何程序來引用他剛剛拋出一堆代碼我們(沒有評論),並希望我們能夠理解它。我們從9月開始纔開始使用python。我們確實需要一些幫助。所以我們有一個人類播放器,它由W A S & D和隨機點在屏幕上移動的15個隨機點控制。我們需要使用矢量(我們從未使用過)在隨機點上拍攝。Pygame使用矢量子彈射擊

請別人幫忙。

編輯代碼添加〜

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>
+0

代碼在哪裏? –

+0

[這是一個例子](https://stackoverflow.com/a/43953216/6220679),它演示瞭如何使用pygame向量移動精靈。 – skrx

回答

0

我剛剛完成了this set of examples昨晚!查看Lunar Lander示例,特別是the way I'm handling vectors in lunarlander.py - 它提供了一個類,V,用於矢量管理。

你可能需要的是一個精靈,爲你的傢伙提供一個表示他的速度(瞬時,可能爲0)和角度的向量,然後是每個具有相似向量和角度的隨機點的精靈。當你射擊時,創建一個新的精靈,其矢量的角度與你的傢伙正面對的當前角度相匹配,並且大小與子彈的速度相符。然後,在update()方法中,移動每個精靈(子彈,隨機點)。非常類似於我在lunarlander.py中所做的。

祝你好運!如果你剛開始使用Python,那是一件艱難的任務。快樂的編碼!

+0

代碼看起來不錯。但爲什麼你把Lander的父類稱爲最後一個語句而不是第一個? – ninMonkey

+0

我習慣於將'super(superclass,self).__ init __(* args,** kwargs)'作爲一個習慣用語。這實際上是不正確的? –

+0

你有任何關於它的鏈接?我嘗試搜索以驗證任何一種方式,但它搜索不好。像'kwargs'一樣使用'super'是很正常的。但如果這是最後一個陳述,我想如果你碰巧修改了超類的變量,它可以在你的代碼之後撤消/設置它們。 – ninMonkey