2017-03-24 9 views
-2

私はここで間違っているのか分かりません。これはコードがちょうど応答しない、トレースバックを与えず、「通常」のように実行する数少ないケースの1つです。ここでの目標は、バスケットを前後に動かすシンプルなゲームを作成することです。私はそれを特に奇妙な方法でコード化しましたが、メソッドが汚れているように感じました。私はそれが私を悩ますために戻ってくると思います。 先生、IRC、友人と相談しました。誰も私にまっすぐな答えを与えていない、または問題が本当に何であるかを知らないことを認めているか、ドキュメンテーションを見ている一般的な答えを教えてください。パイの卵とバスケット;卵とバスケットの衝突検知に苦労しています

#The egg and basket game 

import pygame 
from pygame.locals import * 
import time 
import random 
x=260 
y=541 
score = 0 
lives = 3 

#Screen initialize 
pygame.init() 
pygame.font.init() 
screen=pygame.display.set_mode((600,600)) 
pygame.display.set_caption("egg") 
clock = pygame.time.Clock() 

#Basket 
basket=pygame.image.load("art/basket.png") 
basket_rect = basket.get_rect() 

#egg 
egg=pygame.image.load("art/egg.png") 
egg_rect = egg.get_rect() 

def eggy(xegg, yegg): 
    screen.blit(egg,(xegg, yegg)) 

def basketey(x, y): 
    screen.blit(basket,(x, y)) 

#Movement of basket 
ychange=0 
xchange=0 
exiting=False 


xegg = random.randrange(50,550) 
yegg = 20 
while not exiting: 
    if yegg<550: 
     yegg += 2 
     eggy(xegg, yegg) 

    elif egg_rect.colliderect(basket_rect): 
     yegg=20 
     xegg = random.randrange(50,550) 
     yegg=yegg+ychange 

     score += 1 

     eggy(xegg, yegg) 

    else: 
     yegg=20 
     xegg = random.randrange(50,550) 
     yegg=yegg+ychange 

     lives -= 1 

     eggy(xegg, yegg) 

    clock.tick(60) 
    for event in pygame.event.get(): 
     if event.type==pygame.QUIT: 
      exiting=True 
      pygame.quit() 
      quit() 
     if event.type==pygame.KEYDOWN: 
      if event.key==pygame.K_LEFT: 
       xchange=-5 
      if event.key==pygame.K_RIGHT: 
       xchange=5 
     if event.type==pygame.KEYUP: 
      if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT: 
       xchange=0 

    x=x+xchange 

    screen.fill((255, 255, 255)) 
    basketey(x, y) 
    eggy(xegg, yegg) 

    if x > 600 - 78 or x < 0: 
     xchange = 0 

    if lives == 0: 
     print("Game Over, Your score was: %s" % score) 
     exiting = True 

    pygame.display.update() 

ychange=0 
+0

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

+0

うまくいかない場合はどうしたらいいですか?それが重要な場合は、あなたは決して 'ychange'を変更することはありません –

答えて

0

だから、主な問題は、あなたが呼んでいるということです。

egg_rect.colliderect(basket_rect) 

これは正しいですが、あなたは長方形を更新することはありません。各矩形には、x、y、width、およびheightプロパティがあります。更新するのは変数yeggだけです。 yeggのすべてのインスタンスをegg_rect.yに置き換えると、衝突が機能するように卵の矩形を更新しています。

バスケットの場合も同じです。矩形のx、y座標を更新していることを確認してください。これは、衝突のために必要なものです。例えば

if egg_rect.y < 550: 
    egg_rect.y += 2 
else: 
    egg_rect.y = 20 
    egg_rect.x = random.randrange(50, 550) 
    lives -= 1 

if egg_rect.colliderect(basket_rect): 
    egg_rect.y=20 
    egg_rect.x = random.randrange(50,550) 
    score += 1 

は、私はあなたに残りの部分を残します。

関連する問題