2016-12-15 15 views
0

あなたはこれがかなりの問題だと知っていますが、問題はこれです。 私はゲームを作ってるんだと私は巨大な空間のエリアはプログラムのランダム化を停止できません。 Pygame

に星をランダム化したいが、私は得ることの結果は以下のとおりです。

  1. スペースは星ので、すべてが動くの場所をrecaculating続けます。
  2. これは、ウィンドウの左上隅に1つの星のみを表示します。ここで

完全なコードです:

import os 
import pygame 
from pygame.locals import * 
import random 

gstars = 500 
gstarmax = 0 
red = (255,0,0) 
yellow = (240,250,60) 
timer = 0 
size = [1600, 1000] 
screen = pygame.display.set_mode((1600, 1000), HWSURFACE | DOUBLEBUF | RESIZABLE) 
pygame.display.set_caption('planet system test') 
clock = pygame.time.Clock() 

area = pygame.image.load("screenMonitor.png") 


done = False 
while done == False: 
    pygame.event.pump() 
    mouse_x, mouse_y = pygame.mouse.get_pos() 

    timer += 1 
    if timer > 99: 
     timer = 0 
    screen.fill((0,0,0)) 
    pygame.draw.rect(screen, red, (20, 20, 1350, 480), 2) 
    pygame.draw.rect(screen,yellow,(2,2,2,2),2) 
    go = True 
    if go == True: 
     for i in range(gstars): 
      s1 = random.randrange(1,1600) 
      s2 = random.randrange(1,1000) 
      colorSelect = random.randrange(0,5) 


      if colorSelect == 1: 
       yellow = (240,250,60) 

      if colorSelect == 2: 
       yellow = (249,173,60) 

      if colorSelect == 3: 
       yellow = (226,43,68) 

      if colorSelect == 4: 
       yellow = (52,173,84) 

      go = False 
      pygame.draw.rect(screen,yellow,(2+s1,2+s2,2,2),2) 





    pygame.display.flip() 

    clock.tick(30) 
    pygame.quit() 

答えて

1

トラブルがメイン/イベントループです。

あなたは星をメインループの内側に配置するコードを入れます。繰り返しごとにランダム化されるため、移動します。

go = Falseが削除され、おそらく1つの星しか表示されない可能性があります。

次のコードでは、インデックス0と1、および2の色のタプルを持つ星のリストを作成します。 色のタプルはrandom.choice(Sequence)関数を使用してランダムに選択されます。 https://docs.python.org/2/library/random.html

import pygame 
from pygame import * 
import random 

gstars = 500 
gstarmax = 0 
red = (255,0,0) 
yellow = (240,250,60) 
timer = 0 
size = [1600, 1000] 

    pygame.init()  
    pygame.display.set_caption('planet system test') 
    screen = pygame.display.set_mode((size[0], size[1])) 
    clock = pygame.time.Clock() 

    area = pygame.image.load("screenMonitor.png") 

    color = ((240,250,60),(249,173,60),(226,43,68),(52,173,84)) 
    stars = [] 
    for i in range(gstars): 
     s1 = random.randrange(1,1600) 
     s2 = random.randrange(1,1000) 
     starcolor = random.choice(color) 
     stars.append([s1, s2, starcolor]) 

    done = False 
    while done == False: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: #Quit the game if X 
       done = False 

     screen.fill(0) 
     pygame.draw.rect(screen, red, (20, 20, 1350, 480), 2) 
     pygame.draw.rect(screen,yellow,(2,2,2,2),2) 
     for star in stars: 
      pygame.draw.rect(screen,star[2],(2+star[0],2+star[1],2,2),2) 


     pygame.display.flip() 

     clock.tick(30) 

EDIT:テッド・クラインバーグマンのアドバイス、次のコードを修正します。

+0

コードが正しく動作するように見えますが、星が正しく生成されますが、プログラムが停止します。それはただ応答を停止するクラッシュメッセージを与えません。それを理解しようとしましたが、そこに何も間違っていないことが分かりました。 – cmdtvt

+0

申し訳ありませんが、私のコードに小さな間違いがあります: 'pygame.event.pump()'。 ()を忘れてください。 pygame.event.get()内のイベントのpygame 'のメインループを終了するには、次のコードを使用することをお勧めします: event.typeがpygame.QUITなら#Quit the game X done = False' –

+0

あなたはそれに 'pygame.quit()'を追加しましたが、まだそれを行います。そして、これは星の世代を一回だけ動かすのだろうか?編集:ああ申し訳ありませんが、私は悪いそれは星を実行し、クラッシュは動作するように思われる – cmdtvt

関連する問題