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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Pygame

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

Python

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

Q&A

解決済

1回答

2316閲覧

pygameでのcollidelistを用いた当たり判定について

kei3709

総合スコア2

Pygame

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

Python

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

0グッド

0クリップ

投稿2021/10/21 09:32

python

1import pygame #pygame(ゲームエンジン)をインポート 2from pygame.locals import * 3import random 4 5def main(): 6 (w, h) = (500, 500) #画面サイズ 7 (x, y) = (150, 150) #初期位置 8 (pw, ph) = (30, 30) #プレイヤーの幅と高さ 9 (mv, mv2) = (10, 10) #移動速度(弾)と敵 10 fps = 30 #描画速度(フレームレート) 11 c = [] #弾を管理用のリスト 12 e = [] #敵の管理用のリスト 13 j = 0 #カウンタ(敵の出現管理) 14 cnt = 10 #敵の出現間隔 15 ss = 0 #スコアとダメージ 16 tt = 3 #ライフ 17 stxt = "" #文字列 18 19 pygame.init() #ライブラリの初期化 20 screen = pygame.display.set_mode((w,h)) #画面サイズをw,hで設定 21 pygame.display.set_caption('あたり判定の練習') #ウインドウのタイトル設定 22 r = Rect(x, y, pw, ph) #四角形(プレイヤー) 23 clock = pygame.time.Clock() #時間管理用オブジェクトの作成 24 font = pygame.font.SysFont("yumincho", 20) #フォントとサイズ指定 25 26 while 1: #イベント処理用ループ 27 screen.fill((0, 0, 0)) #黒で塗りつぶす 28 pygame.draw.rect(screen, (255, 0, 0), r) #四角形(プレイヤー) 29 30 for i,item in enumerate(c): #弾の数だけ繰り返し 31 item.move_ip(0, -mv) #弾の移動処理 32 pygame.draw.circle(screen, (0, 255, 0), (item.x, item.y), item.w/2) #弾の描画処理 33 if item.y < 0: #弾が画面外に出た場合 34 c.pop(i) #弾の削除 35 36 for I,item in enumerate(e): #敵の数だけ繰り返し 37 item.move_ip(0, mv2) #敵の移動処理 38 pygame.draw.rect(screen, (0, 0, 255), item) #敵の描画処理 39 if item.y > h: #敵が画面外に出た場合 40 e.pop(i) #敵の削除 41################################################################ 42 a = item.collidelist(c) 43 if a > -1: #当たり判定(敵とプレイヤーの弾) 44 ss += 1 #当たった場合はスコア+1 45 c.pop(a) #弾の削除 46 47 b = item.collidelist(e) 48 if b > -1: #当たり判定(敵とプレイヤー) 49 tt -= 1 #当たった場合はスコア-1 50 e.pop(b) #敵の削除 51################################################################# 52 j += 1 53 if j > cnt : 54 e.append(Rect(random.randrange(0, w), 0, pw, ph)) #敵生成 55 j = 0 56 57 stxt = "スコア:" + str(ss) #文字列を設定 58 txt = font.render(stxt, True, (255,0,0)) #テキスト生成 59 screen.blit(txt, (10, 10)) #テキストを描画する 60 pygame.display.update() #描画の更新 61 stxt = "残りライフ:" + str(tt) #文字列を設定 62 txt = font.render(stxt, True, (255,0,0)) #テキスト生成 63 screen.blit(txt, (10, 25)) #テキストを描画する 64 pygame.display.update() #描画の更新 65 clock.tick(fps) #FPSの設定 66 for event in pygame.event.get(): #イベント処理用の繰り返し 67 if event.type == QUIT: #ウインドウが閉じられた場合 68 return 69 if (event.type == KEYDOWN and event.key == K_ESCAPE): #エスケープキーが押された場合 70 return 71 if event.type == MOUSEMOTION: #マウスが移動した場合 72 x,y = event.pos 73 r.move_ip((x - r.x), (y - r.y)) 74 if event.type == MOUSEBUTTONDOWN and event.button == 1: #マウスをクリックした場合 75 cx,cy = event.pos #クリック時のマウス座標を取得 76 cx += pw/2 77 c.append(Rect(cx, cy, 10, 10)) #円(弾) 78if __name__ == '__main__': main()```

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

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

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

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

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

guest

回答1

0

自己解決

間違えました。投稿し直します。

投稿2021/10/21 09:33

kei3709

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問