2019年12月31日)2008-09-27エイリアンの反撃Pygameエイリアンがビームを撃つようにします。invader05.zipビームクラスエイリアンが発射するビームを実装します。Shotクラスを全部コピーしてください。これで9割完成です(笑)プレイヤーが発射する弾とエイリアンが発射するビームはほとんど同じです。弾は上に飛んでいくのに対し、ビームは下に飛んでいくことだけが違います。update()を少し変えるだけです。self.kill()speedはShotより少し遅くしています。ビームは下へ移動するのでmove_ip()でself.speedという正の値を指定します。次にビームを使ってエイリアンが攻撃する処理です。Alienクラスのupdate()に追加します。self.images[self.frame/self.animcycle%2]prob_beamは、現在のフレームでビームを発射する確率です。この確率が高いとビームが出やすくなります。小さめにしておかないとありえないくらい大量に出ます(笑)Pythonで乱数を扱うのがrandomモジュールです。random.random()で0以上1未満の乱数を返します。この乱数がprob_beamより小さかったらBeamオブジェクトを作ります。引数にはエイリアンの座標を与えます。しておくとエイリアンからビームが出たように見えます。Beamクラスはスプライトグループに登録してあるのでオブジェクトを作るだけで描画、更新されます。最後にエイリアンの発射したビームとプレイヤーの衝突判定を実装します。この処理はエイリアンとミサイルの衝突判定とほとんど同じです。collision_detection()です。ゲームオーバー処理エイリアンとミサイルの衝突判定と違って、プレイヤースプライトはただ1つなのでpygame.sprite.groupcollide()ではなく、スプライトとスプライトグループの衝突を調べるpygame.sprite.spritecollide()を使います。dokill)という形式の関数でspriteとgroup内のいずれかのスプライトが衝突したか調べ、group内の衝突したスプライトをリストで返します。dokillをTrueにしておくとspriteと衝突したgroup内のスプライトをすべてgroupから消します。draw()されなくなるので画面からも消えます。この関数はブロック崩し編でボールとブロックの衝突判定(2008/8/11)にも使いました。上の例では、プレイヤーと衝突したビームがあった場合に爆発音を鳴らしています。プレイヤーは無敵でまだゲームオーバーにはなりません。23:54エイリアンの反撃Tweet広告を非表示にする関連記事2008-10-12ゲームオーバー画面タイトル画面とゲームオーバー画面を追加します。自機から発射したミサイルでエイリアンを倒せるようにします。...2008-08-30自機を動かすまず、プレイヤーである自機をキーボードで動かせるようにしま...2008-08-11ブロックを壊すブロックを配置してボールが当たると壊れるようにします。»プロフィールid:aidiary人工知能とその関連分野に興味があります。)はてなブログをはじめよう!aidiaryさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。