2017-08-17 9 views
0

私はConwayのゲームの試合をシミュレートしています。私は色で四角形をマーキングすることにいくつか問題があります。私は四角形の行列を使用しています。私が四角形をクリックすると、値が0から1に変更されます。それはそのようなものです。 私はこのコードを最初に試してみましたが、問題は、クリックしたときに、マークが付けられていないマークからマークされたマークなどに急速に変更されたことでした。Conwayのライフゲームの試合で四角をマークすると、色が速く変わります。

for event in pygame.event.get(): 
    if event.type == pygame.MOUSEBUTTONUP: 
     if grid[y][x] == 0: 
      mouse_x,mouse_y = pygame.mouse.get_pos() 
      x = mouse_x // (size + 1) 
      y = mouse_y // (size + 1) 
      grid[y][x] = 1 

     elif grid[y][x] == 1: 
      mouse_x,mouse_y = pygame.mouse.get_pos()       
      x = mouse_x // (size + 1) 
      y = mouse_y // (size + 1) 
      grid[y][x] = 0 

しかし、ここで問題が四角はもうマークされませんということです。私は他のコードを試してみたたより

if pygame.mouse.get_pressed()[0]: 
    if grid[y][x] == 0: 
     mouse_x,mouse_y = pygame.mouse.get_pos() 
     x = mouse_x // (size + 1) 
     y = mouse_y // (size + 1) 
     grid[y][x] = 1 

    elif grid[y][x] == 1: 
     mouse_x,mouse_y = pygame.mouse.get_pos() 
     x = mouse_x // (size + 1) 
     y = mouse_y // (size + 1) 
     grid[y][x] = 0 

+1

'pygame.mouse.get_pressed()'を含む解決策は、この種の問題を起こすでしょう。 2回目のコードは正しいアイデアです( 'MOUSEBUTTONUP'イベントは1回のクリックで1回だけ発生します)。実際にクリック位置から計算する前に' x'と 'y'を使用しているため、おそらく失敗します。 – jasonharper

+1

@jasonharper代わりに何をすべきですか? 'grid_ [y] [x] == 1'の前に' mouse_x、mouse_y'を設定する必要がありますか? – AV13

+0

'if grid [y] [x] == 0:'の前に、実際には、これらの3行のコードを2つの場所に複製して使用することはありません。 – jasonharper

答えて

0

time.time()でクリックごとにクールダウンを追加できます。何time.time()

# Start of program 
import time 
cooldown = 0 

cooleddown = time.time() - cooldown > 0.7 
if pygame.mouse.get_pressed()[0] and cooleddown: 
    cooleddown = time.time() 
    if grid[y][x] == 0: 
     mouse_x,mouse_y = pygame.mouse.get_pos() 
     x = mouse_x // (size + 1) 
     y = mouse_y // (size + 1) 
     grid[y][x] = 1 

    elif grid[y][x] == 1: 
     mouse_x,mouse_y = pygame.mouse.get_pos() 
     x = mouse_x // (size + 1) 
     y = mouse_y // (size + 1) 
     grid[y][x] = 0 

それは、これが問題を助けるかもしれないもう一度確認する前に、一定の時間を過ぎている場合は、テストのであれば1月1日午前0時1970年以降、現在の秒を返します。これはテストされていません

*あなたはほとんど、あるいは長期にに対するのも私も(ブール値を使用し、それらを使用する前に、xとyを設定してみてください

+0

ループ内では、 'cooleddown = time.time()'の代わりにtime.time() 'を使用しますか? – AV13

+0

それは動作しますが、2回のクリックを待たなければならないので、私が探しているコードではありません。 – AV13

0

を知らない0.7秒待つと遊んでする必要があるかもしれませんテストされていない):

for event in pygame.event.get(): 
    if event.type == pygame.MOUSEBUTTONUP: 
     mouse_x,mouse_y = pygame.mouse.get_pos() 
     x = mouse_x // (size + 1) 
     y = mouse_y // (size + 1) 
     grid[y][x] = not grid[y][x] 
関連する問題