質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1050閲覧

2つのリストの値をそれぞれx座標、y座標としてLineを描きたい

kappar

総合スコア12

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/22 02:46

前提・実現したいこと

python(pygame)を使って、ドライブゲームのようなものを作ろうとしています。
今は、pygame.draw.lineを用いて車が走る道を描こうとしています。
その中でstとenの2点を定義しなくてはならず、(x座標、y座標)のそれぞれをリストを用いて決めています。
ソースコード中のxsがx座標、ysがy座標です。
道はランダムでいろいろな角度のものを作りたいと思っているので、x座標はランダムな数値を入れています。

発生している問題・エラーメッセージ

まず、2つのリスト中の14個の数値すべてを座標として結合?する方法がわかりません。また、それをループさせる方法がわかりません。

例)
仮に
xs [96, 70, 92, 113]
ys [400, 350, 300, 250]
としたときに
st[(70,350),(92,300),(113,250)]
en[(96,400),(70,350),(92,300)]
となり、3つのLineが引けて、じぐさぐの1本の直線が生成されてほしいです。

以下のソースコードは書いてみたものの、
while文中のdefの部分がうまくいきません。

ご意見をいただけたら嬉しいです
よろしくお願いいたします。

エラーメッセージ

該当のソースコード

python

1import pygame 2from pygame.locals import * 3import sys 4import time 5import datetime as dt 6import random 7import numpy as np 8 9BLACK = (0, 0, 0) 10WHITE = (255, 255, 255) 11 12pygame.init() #初期化 13screen = pygame.display.set_mode((640, 500)) #画面サイズ 14myclock = pygame.time.Clock() 15myclock.tick(30) 16pygame.display.flip() 17 18xs = [random.randint(0,590)] #Lineの各点のx座標 19for i in range(14): 20 xs.append( 21 random.randint(max(0, xs[-1]-50), min(590, xs[-1]+50)) 22 ) 23 24ys=[450] #Lineの各点のy座標(前半) 25for i in range(14): 26 ys1.append(ys1[-1]-50) 27 28 29while True: 30 time.sleep(0.1) 31 screen.fill(BLACK) 32 def trytype(i,n): 33 st=(xs[+1],ys[+1]) 34 en=(xs[+0],ys[+0]) 35 n=n+1 36 return n 37 pygame.draw.line (screen, WHITE, st, en) 38 pygame.display.update() 39 for event in pygame.event.get(): 40 if event.type==pygame.QUIT: 41 pygame.quit() 42 sys.exit() 43 pressed_key=pygame.key.get_pressed() 44 if pressed_key[K_ESCAPE]: 45 pygame.quit() 46 sys.exit() 47 if time.time()-start>120: 48 pygame.quit() 49 sys.exit() 50

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

zip 関数が使えます。

python

1 2xs = [96, 70, 92, 113] 3ys = [400, 350, 300, 250] 4 5# for x, y in zip(xs, ys): 6# print(x, y) 7 8points = list(zip(xs, ys))

3つのLineが引けて、じぐさぐの1本の直線が生成されてほしいです。

st = points[1:] en = points[:-1]

ですが、始点・終点のリストを個別に用意するよりも
pygame.draw.lines を使った方が良いです。連結点の座標のみで済みます。

投稿2020/06/22 04:02

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kappar

2020/06/24 04:47

教えていただいた通りlinesを使ったらとても楽にできて、コードも短くなりました…ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問