人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

Pygame

Pythonでゲーム作りますが何か?のGitHubリポジトリをEclipseで読み込む

Javaでゲーム作りますが何か?のGitHubリポジトリをEclipseで読み込む(2014/9/6)に引き続き、Pythonでゲーム作りますが何か?の全スクリプトもGitHub上で公開しました。 Pythonでゲーム作りますが何か? - 人工知能に関する断創録 この記事では、GitHubの…

フォントファイルのロード

pygameではデフォルトのフォントで日本語を表示することができません。MSゴシックなどを指定すればOKかもしれませんが、OSによって使用できるフォントが違うので環境依存になってしまいます。この解決策としてゲームにフリーのフォントファイルを添付すると…

マップスクロール

今回は少し大きめのマップを読み込んでみます。画面内には収まりきらないためプレイヤーの移動に応じて画面をスクロールする必要が出てきます。マップスクロールの方針は、 マップ全体(キャラクターやアイテム含む)をSurfaceに描画 オフセットに合わせてマ…

マップファイル

ファイルからマップを読み込んでみます。基本的にRPG編のマップのロード(2008/6/1)とほとんど同じです。load_map.zip Mapクラス マップを表すMapというクラスを新たに追加します。Mapクラスはマップ内のプレイヤースプライト、まだ登場してませんが敵スプ…

二段ジャンプ

二段ジャンプというのはジャンプ中に空中でもう一回ジャンプできるアクションです。スペースキーでジャンプして空中にいる間にもう一度スペースキーを押すとさらにジャンプできます。これで高いところにも上れます。double_jump.zip ジャンプ回数 変更はPyth…

ブロックとの衝突判定

ブロックを作成します。パイソンはブロックと衝突するのでぶつかったり、乗ったりできるようになります。block.zip ブロッククラス まずブロックを表すクラスを作成します。ブロックもスプライトなのでSpriteを継承して作ります。 class Block(pygame.sprite…

ジャンプ

上キーでジャンプできるようにしてきます。ジャンプをかっこよく見せるには重力を実装する必要があります。jump.zip ジャンプ処理 Pythonのupdate()をみてください。 JUMP_SPEED = 8.0 # ジャンプの初速度 GRAVITY = 0.2 # 重力加速度 def __init__(self): .…

左右移動

蛇(パイソン)を左キー、右キーで左右に移動できます。アクションゲームではキャラクターの微妙な動きが必要なので移動は小数で計算し、画面に描画するときに整数座標に戻しています。move.zip サンプルスクリプト #!/usr/bin/env python #coding: utf-8 im…

ファイアボール

ここでは始点から終点へ向けて弾をまっすぐ飛ばす方法を説明します。1945では敵機が自機に向けてまっすぐ弾を飛ばす際に同じアルゴリズムを使っています。サンプルスクリプトでは、画面の中央(始点)からマウスでクリックした方向(終点)にファイアボール…

キーボードの利用

キーボードを使う方法です。ティーポットがキーボードによって回転します。上下左右キーで回転速度が上がります。また、Lキーを押すとライティングのオンオフを切り替えます。照明をオフにするとマテリアルが無効になるのでglColor3f()で設定した青色が見え…

1945

縦スクロールのシューティングゲームです。このゲームは、Game Programming at scriptedfunさんのページを参考にしています。カテゴリの1945に作り方のチュートリアルがあります。素材は、FLYING YOGI(リンク切れ)さん、効果音はザ・マッチメイカァズさん…

ゲームオーバー画面

タイトル画面とゲームオーバー画面を追加します。画面間の遷移はゲーム状態を導入するとわりと簡単にできます。invader07.zip ゲームのクラス化 前回までと違ってmain()に書いていた処理をInvaderクラスに変えました。 START, PLAY, GAMEOVER = (0, 1, 2) # …

爆発エフェクト

ミサイルがエイリアンに当たったときに爆発エフェクトが出るようにします。爆発エフェクトもスプライトとして実装するのでエイリアンやミサイルと作り方はほとんど同じです。invader06.zip 爆発アニメーション 爆発には上の画像を使います。キャラクターアニ…

ライティング

ライティングとは3次元空間に光源を置いてオブジェクトを照らすことをいいます。光が当たると陰ができて3次元っぽく見えるようになります。ライティングしてないティーポット(2008/9/6)と比べてみると違いは明らかだと思います。また、3次元オブジェクトの…

エイリアンの反撃

エイリアンがビームを撃つようにします。invader05.zip ビームクラス エイリアンが発射するビームを実装します。まずShotクラスを全部コピーしてください。これで9割完成です(笑)プレイヤーが発射する弾とエイリアンが発射するビームはほとんど同じです。…

プレイヤーの攻撃

自機から発射したミサイルでエイリアンを倒せるようにします。そのためには、ミサイルとエイリアンが衝突したかを検出する必要があります。Pygameには衝突判定の簡単な方法がたくさんあります。ここではスプライトグループ同士の衝突判定を使います。invader…

惑星

恒星のまわりを回る惑星とその衛星です。太陽と地球と月をイメージしてますが縮尺はめちゃくちゃです。実際、太陽はもっとずっと大きいです。月を太陽ではなく地球を中心にして回すのに苦労しました・・・座標変換は慣れないと難しい。このプログラムはOpenG…

神々のトライフォース

某ゲームのあれです。三角形を3つ書いて回転させるだけです。何かなつかしい。triforce.py 神々のトライフォース #!/usr/bin/env python #coding:utf-8 from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * import sys angle = 0.0…

回転キューブ

OpenGLに慣れるためにここまでの知識を使っていろいろ作ってみます。まずは、立方体の描画(2008/8/31)で作ったカラフルな立方体(カラーキューブ)を回転させてみます。スクリーンショットは何か歪んでますが立方体です。rotating_cube.py 回転キューブ #!…

平行移動・回転・拡大縮小

ティーポットのような3次元オブジェクトを平行移動、回転、拡大縮小する方法です。平行移動、回転、拡大縮小は3次元オブジェクトの頂点座標を変換することで実現できるのでモデリング変換とかアフィン変換と呼ばれます。数学的には頂点の座標にある行列をか…

ライフゲーム

人工知能というより人工生命の分野ですが最初はライフゲームを作ってみます。ライフは人生という意味もありますがライフゲームは人生ゲームとはまったく関係ありません。まず、フィールド(黒い部分)をマウスクリックすると、黄色い■が出てきます。もう一度…

エイリアン襲来

を実装します。invader03.zip エイリアンクラス エイリアンも自機、ミサイルと同様にスプライトなので作り方はほとんど同じです。 class Alien(pygame.sprite.Sprite): """エイリアン""" speed = 2 # 移動速度 animcycle = 18 # アニメーション速度 frame = …

ミサイルの発射

スペースキーを押すと自機からミサイルが発射できるようにします。invader02.zip ミサイルクラス まず発射されるミサイルを表すクラスShotを作成します。これもスプライトで実装します。 class Shot(pygame.sprite.Sprite): """プレイヤーが発射するミサイル…

ティーポット

立方体の描画(2008/8/31)では、四角形プリミティブを6枚使って自分で立方体を作ったわけですが、3次元オブジェクトを作るコマンドがあらかじめ用意されています。今回はそれを使って3次元オブジェクトを描画してみます。サンプルは有名なティーポットと呼…

立方体の描画

プリミティブの描画(2008/8/24)で使った四角形を6枚張り合わせて立方体を作ってみます。いよいよ3次元空間へ突入。cube.py サンプルスクリプト #!/usr/bin/env python #coding:utf-8 from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT i…

自機を動かす

まず、プレイヤーである自機をキーボードで動かせるようにします。ブロック崩し編のパドルの移動(2008/8/9)で解説したパドルと作り方はほとんど同じです。だだし、今回はキーボードで左右に移動するようにします。invader01.zip 自機スプライト まず自機Pl…

プリミティブの描画

プリミティブを描くサンプルです。プリミティブとはOpenGLで使える図形のことで、点、線、三角形、四角形、ポリゴンなどがあります。primitive.py サンプルスクリプト #!/usr/bin/env python #coding:utf-8 from OpenGL.GL import * from OpenGL.GLU import …

OpenGLウィンドウの表示

PyOpenGLで遊ぶためのウィンドウを表示するところまで。OpenGL自体にはウィンドウを表示する関数はないためGLUTと呼ばれる拡張ツールキットを使います。以下のサンプルを実行するにはPyOpenGLとGLUTのインストールが必要です。PyOpenGLのインストール(2008/…

スコアの表示

ゲームスコアが画面の中央に表示されるようにします。ブロックを連続して壊すことで高得点が狙えるようにしました。ボールを落としてしまうと減点です。breakout06.zip スコアの表示 まず、スコアボードを表すクラスScoreBoardを作ります。 class ScoreBoard…

反射方向の調整

前回までのプログラムを実行してしばらく遊んでみるとわかりますが、ボールがいつも同じ方向に跳ね返るためまったく面白くありません。プレイヤーができるのはボールを落とさないようにすることだけです。今回は、ボールがパドルに当たる位置によって反射方…