2016-11-28 26 views
-2

私のプログラミングの割り当てに助けが必要です。私はそれを作る必要がありますので、ゲームのブロックが衝突したときにお互いに跳ね返ります。以下のコードはPygameを使用しています。私は今数時間これをやろうとしていて、壁にはまっている。ここでPygameの衝突ゲーム

import pygame 
from pygame.locals import * 
import time 

class Block: 
    def __init__(self,win,left,top, 
     width,height,color,velocity): 
     self.win = win 
     self.rect = pygame.Rect(left,top, 
      width,height) 
     self.color = color 
     self.velocity = velocity 
    def move(self): 
     self.rect = self.rect.move(
      self.velocity[0],self.velocity[1]) 
     if ((self.rect.top < 0) or 
      (self.rect.bottom > self.win.height)): 
       self.velocity[1] = -self.velocity[1] 
     if ((self.rect.left < 0) or 
      (self.rect.right > self.win.width)): 
       self.velocity[0] = -self.velocity[0] 
    def tupleRep(block): 
     return ((block.rect.left, block.rect.top),(block.rect.right,  block.rect.bottom)) 
     colliderect() 
    def draw(self): 
     pygame.draw.rect(self.win.surface, 
      self.color, self.rect,0) 

class BlockWindow: 
    def __init__(self,width,height,caption): 
     self.surface = pygame.display.set_mode((width,height)) 
     self.caption = caption 
     pygame.display.set_caption(self.caption) 
     self.height = height 
     self.width = width 
     self.blocks = [ ] 
     self.blocks.append(Block(self,300,80,50, 
      100,RED,[BASESPEED,-BASESPEED])) 
     self.blocks.append(Block(self,200,200,20, 
      20,GREEN,[-BASESPEED,-BASESPEED])) 
     self.blocks.append(Block(self,100,150,60, 
      60,BLUE,[-BASESPEED,BASESPEED])) 
     self.blocks.append(Block(self,100,100,70, 
      200,PURPLE,[BASESPEED,BASESPEED])) 
     self.blocks.append(Block(self,300,70,50, 
      60,TEAL,[-BASESPEED,BASESPEED])) 
     Quit = False 
     while not Quit: 
      self.surface.fill(BLACK) 
      for b in self.blocks: 
       b.move() 
       b.draw() 
      pygame.display.update() 
      time.sleep(0.02) #import what for this? 
      for event in pygame.event.get(): 
       if event.type == QUIT: 
        Quit = True 
# set up the colors 
BLACK = (0, 0, 0) 
RED = (255, 0, 0) 
GREEN = (0, 255, 0) 
BLUE = (0, 0, 255) 
PURPLE= (200,0,200) 
TEAL = (0,200,200) 

BASESPEED = 2 
# set up pygame 
pygame.init() 

win = BlockWindow(800,800,'Animation with Objects') 

pygame.quit() 
+0

あなたが試したことを示すことが重要です。それは、あなたの問題を解決するために努力したことを示し、すでに試したことを繰り返すことができません。 –

+0

ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。コードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。ここでは、2つのブロックが衝突する時を決定しようとする試みは見られません。 – Prune

+0

pygameは2つの矩形間の衝突をチェックする機能を持っています。つまり、 'block1.rect.colliderect(block2.rect)'ですが、ブロックが左右に衝突するか、上下に衝突するかは答えられません。方向を垂直または水平に変更する必要があります。あなた自身の関数を実行し、あるブロックと他のブロックとの衝突をチェックする必要があります。例えば、 'block1.rect.collidepoint(block2.rect.topleft)'などを使うことができます。 – furas

答えて

関連する問題