前提・実現したいこと
Pythonのpygameを使用した簡単なシューティングゲームを作っています。
画面の上から敵が降らせることはできたのですが、一つずつしか降ってきません。敵の管理をlistで行い、敵を同時に複数表示可能なようにしたいです。
該当のソースコード
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 fps = 30 #描画速度(フレームレート) 10 mv = 10 #移動速度(弾) 11 c = [] #弾を管理用のリスト 12 (mv, mv2) = (10, 10) #移動速度(弾)と敵 13 j = 0 #カウンタ(敵の出現管理) 14 cnt = 50 #敵の出現間隔 15 pygame.init() #ライブラリの初期化 16 screen = pygame.display.set_mode((w,h)) #画面サイズをw,hで設定 17 pygame.display.set_caption('アニメーションの練習') #ウインドウのタイトル設定 18 r = Rect(x, y, pw, ph) #四角形(プレイヤー) 19 clock = pygame.time.Clock() #時間管理用オブジェクトの作成 20 e = Rect(random.randrange(0, w), 0, pw, ph) 21 22 while 1: #イベント処理用ループ 23 screen.fill((0, 0, 0)) #黒で塗りつぶす 24 pygame.draw.rect(screen, (255, 0, 0), r) #四角形(プレイヤー) 25 26 for i,item in enumerate(c): #弾の数だけ繰り返し 27 28 item.move_ip(0, -mv) #弾の移動処理 29 pygame.draw.circle(screen, (0, 255, 0), (item.x, item.y), item.w/2) #弾の描画処理 30 if item.y < 0: #弾が画面外に出た場合 31 c.pop(i) #弾の削除 32 33 34 35 e.move_ip(0, mv2) #敵の移動処理 36 pygame.draw.rect(screen, (0, 0, 255), e) #敵の描画処理 37 j += 1 #カウンタ増加 38 if j > cnt : #出現間隔チェック 39 e = Rect(random.randrange(0, w), 0, pw, ph) #敵生成 40 j = 0 #カウンタ初期化 41 42 43 pygame.display.update() #描画の更新 44 45 46 clock.tick(fps) #FPSの設定 47 for event in pygame.event.get(): #イベント処理用の繰り返し 48 if event.type == QUIT: #ウインドウが閉じられた場合 49 return 50 if (event.type == KEYDOWN and event.key == K_ESCAPE): #エスケープキーが押された場合 51 return 52 if event.type == MOUSEMOTION: #マウスが移動した場合 53 x,y = event.pos 54 r.move_ip((x - r.x), (y - r.y)) 55 if event.type == MOUSEBUTTONDOWN and event.button == 1: #マウスをクリックした場合 56 cx,cy = event.pos #クリック時のマウス座標を取得 57 cx += pw/2 58 c.append(Rect(cx, cy, 10, 10)) #円(弾)) 59if __name__ == '__main__': main()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/18 02:57 編集
2021/10/18 03:25
2021/10/18 08:01