前提・実現したいこと
python (pygame) を使ってドライブゲームのようなものを作っています。
背景の道が一定速度で動いてくるので、道から外れないように車を左右に動かす、というゲーム(?)です。
道はpygame.draw.linesを用いて描出しています。
車はpygame.draw.circleを用いて描出しています。
車は左右(x軸方向)にのみ動き、上下(y軸方向)には動きません。
道が車と同じy座標(y=400)になったときの道の左側のlineのx座標をファイルに出力したいです。
発生している問題・エラーメッセージ
道の描出の際にpygame.draw.linesを用いて各座標をリストで示しているためか、while文の9行目(if ys1==400:)でエラーが出てしまいます。
エラーの直し方、もしくは修正案等を教えていただきたいです。
よろしくお願いいたします。
File "<stdin>", line 9, in <module> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
該当のソースコード
python
1import pygame 2from pygame.locals import * 3import sys 4import time 5import datetime as dt 6import random 7import numpy as np 8import heapq 9 10delay_inputs = [] 11 12now=dt.datetime.now() 13date = now.strftime('%Y%m%d-%H%M%S') 14'output_{}.txt'.format(date) 15 16start=time.time() 17 18BLACK = (0, 0, 0) 19RED = (255, 0, 0) 20WHITE = (255, 255, 255) 21 22pygame.init() #初期化 23screen = pygame.display.set_mode((640, 500)) #画面サイズ 24myclock = pygame.time.Clock() 25myclock.tick(30) 26pygame.display.flip() 27 28xs = [random.randint(0,590)] #Lineの各点のx座標 29for i in range(14): 30 xs.append( 31 random.randint(max(0, xs[-1]-50), min(590, xs[-1]+50)) 32 ) 33 34x_cir = xs[0]+25 #circleの初期位置指定 35 36xsplus=np.array(xs)+50 #xs+50の値を先に定義 37 38ys1=[450] #Lineの各点のy座標(前半) 39for i in range(14): 40 ys1.append(ys1[-1]-50) 41 42velocity_y=5 #Lineの動く速さ 43 44 45while True: 46 process_time=time.time()-start 47 time.sleep(0.1) 48 ys1=np.array(ys1) + velocity_y #Lineの各点のy座標+速さ 49 screen.fill(BLACK) 50 for x, y in zip(xs, ys1): #左側のlineの座標 51 points_l = list(zip(xs, ys1)) 52 pygame.draw.lines (screen, WHITE, False, points_l) 53 if ys1==400: 54 with open('y1output_{}.csv'.format(date), 'a') as f: 55 print('{},{},{}'.format(x_cir,xs,process_time),file=f) #時間を入れた 56 pygame.draw.circle(screen, RED, (x_cir, 400), 5) 57 pygame.display.update() 58 for event in pygame.event.get(): 59 if event.type==pygame.QUIT: 60 pygame.quit() 61 sys.exit() 62 pressed_key=pygame.key.get_pressed() 63 if (pressed_key[K_LEFT] and x_cir>0): 64 x_cir -= 5 65 if (pressed_key[K_RIGHT] and x_cir<640): 66 x_cir += 5 67 if pressed_key[K_ESCAPE]: 68 pygame.quit() 69 sys.exit() 70 if time.time()-start>120: 71 pygame.quit() 72 sys.exit() 73
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/26 04:08
2020/06/26 07:02 編集
2020/06/26 06:50
2020/06/26 06:54
2020/06/26 06:56
2020/06/26 06:57
2020/06/26 06:58
2020/06/26 07:03 編集