2016-05-26 8 views
0

私は驚くべきコーダーではないと言って始めるので、コードはきわめてきれいではありません。私は本当に基本的なバージョンのヘビに取り組んでいます。現在、私はヘビと食べ物の衝突について困っています。 (x、yはヘビと食糧、食糧は食糧)。衝突検出は、現在は機能していないばかりで、何が間違っているのか分かりません。助けを前にありがとう。 できるだけシンプルにしておきましょう。私はまだそれらをどのように使用するかわからないので、クラスに参加したくありません。どのようにスネークゲームに衝突を組み込むことができますか?

編集:申し訳ありませんが、英語は母国語ではありません。コードは現在機能しています。食べ物との衝突後の衝突や食べ物の生成は機能しません。

import pygame 
import sys 
import random 
import math 
import time 

pygame.init() 
screen=pygame.display.set_mode((500,500)) 

red=(255,0,0) 
blue=(0,0,255) 
green=(0,255,0) 
black=(0,0,0) 

block1=1 
block2=0 

count=0 

screen.fill(black) 


randStart=random.randint(0,25) 

x=randStart*20 
y=randStart*20 
xd=20 
yd=0 

foodx=random.randint(0,480) 
foody=random.randint(0,480) 

snakecol=pygame.Rect(x,y,20,20) 
foodcol=pygame.Rect(foodx,foody,20,20) 




done=False 
while not done: 
    screen.fill(black) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 


#controls 

    if block1==1: 
     if(pygame.key.get_pressed()[pygame.K_a]): 
      yd=0 
      xd=-20 
      block1=0 
      block2=1 

    if block1==1: 
     if(pygame.key.get_pressed()[pygame.K_d]): 
      yd=0 
      xd=20 
      block1=0 
      block2=1 
    if block2==1:   
     if(pygame.key.get_pressed()[pygame.K_w]): 
      xd=0 
      yd=-20 
      block1=1 
      block2=0 
    if block2==1: 
     if(pygame.key.get_pressed()[pygame.K_s]): 
      xd=0 
      yd=20 
      block1=1 
      block2=0 


#stop moving paddle 

    if x<-20: 
     x=500 
    if x>500: 
     x=-20 
    if y<-20: 
     y=500 
    if y>500: 
     y=-20 

#food 
    if snakecol.colliderect(foodcol): 
     foodx=random.randint(0,480) 
     foody=random.randint(0,480) 





    x=x+xd 
    y=y+yd 



    pygame.draw.rect(screen,(255,255,255),(foodx,foody,20,20),0) 
    pygame.draw.rect(screen,(255,255,255),(x,y,20,20),0) 
    pygame.display.flip() 



    time.sleep(0.4) 
    count+=1 
pygame.quit() 
+1

あなたは「今はうまく機能していない」と述べています。どのように動作していないかを私たちに示すと、より良い応答を得ることができます。あなたがやっていることや期待していること、実際に起こっていることの例を教えてください。あなたがあなたに質問した努力が多ければ多いほど、あなたはあなたの答えを受け取るでしょう。また、Object Orientated Programmingを活用することで、デバッグ/テスト時間を100倍以上節約できます。 –

+0

私の悪い、本当に今ストレス。私は質問を編集しました。 –

+2

あなたは私のアドバイスに全く従っていないと思いますが、あなたは衝突が機能していないことを再確認しました。どのように機能していないのですか?何x、yの場所がヘビであったのか、そして衝突が起こったと思われるときの食べ物(私はヘビと食べ物は同じであると仮定しますが、それを述べています)。衝突が失敗したとき何が起こったのですか?何が起こるはずですか?あなたが助けるために実行できる小さなサンプルを提供する必要があります。ストレスを感じることは大丈夫ですが、多くの人があなたのためにあなたのプログラム全体をデバッグしたいと思っているわけではありません。 –

答えて

1

x = x + xdをsnakecol.x + = xdに、yを同じに変更します。次に、描画部分ではx、y、20,20ではなくrectとしてSnakecolを使用します。問題は、蛇の位置を決して更新しないことです。書式設定には申し訳ありませんが、仕事中とタブレット上にあります。

+0

よかった。私はこれを試して、それがどのように動作するか見る。 –

+0

更新:ちょっとした微調整の後に動作しました。どうもありがとうございます。 –

関連する問題