人工知能に関する断創録

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

Pygame

ボールの反射音

ボールがブロックやパドルに当たったとき音が鳴るように改良します。効果音はザ・マッチメイカァズさんからお借りしています。breakout04.zip 効果音のロード まず効果音をロードします。効果音はすべてBallのクラス変数へセットします。クラス変数なのでボ…

ブロックを壊す

ブロックを配置してボールが当たると壊れるようにします。ブロックをブロックグループに追加し、ボールスプライトとブロックグループの衝突判定を行います。Spriteの衝突判定機能を使うと簡単にできます。ここまでくるとゲームっぽくなってきます。breakout0…

ボールの反射

次に画面内を跳ね回るボールを実装します。パドルにボールを当てると跳ね返ります。breakout02.zip ボールスプライト まずボールを表すクラスです。これもパドルと同じくSpriteを継承してデフォルトスプライトグループ(containers)も指定します。 class Ba…

パドルの移動

これから数回にわたってブロック崩しを作ろうと思います。今回は、ボールを跳ね返すラケット(パドル)をマウスで動かせるところまで作ります。ブロック崩しの素材は、FLYING YOGI(リンク切れ)さんからお借りしています。breakout01.zip パドルスプライト …

戦闘画面

まだ戦えるわけではありませんが、戦闘画面を実装してみました。フィールドを歩いていると何か強そうな(笑)モンスターに襲われます。コマンドの選択などはすべてスペースキーを使います。とりあえずにげることしかできません。モンスターのグラフィックは…

ゲーム状態の導入

今回はタイトル画面をつけます。タイトル画面のように別の画面が入ってくると実装がこんがらがってくるため、ゲーム状態によって更新・描画・イベントハンドラを分離するようにスクリプトを修正します。また、今までmain()に書いていた処理をクラス化します…

パーティー

今までずっとプレイヤーは1人だったので仲間を増やしてパーティを組みます。説明を読む前にスクリプトを動かしてパーティの各プレイヤーの動きがどうなっているか観察してみることをおすすめします。観察のポイントは、先頭ではないプレイヤーは1人前にいる…

町をつくる

今回は新しい町のマップを追加します。新しいマップを追加するためにはスクリプトを書き換える必要はないです。マップエディタでtown.mapを作る、イベントファイルtown.evtを作る、field.evtに町へ移動する移動イベントを配置するだけです。それとは別に町の…

コマンドウィンドウ

コマンドウィンドウを実装します。メッセージウィンドウの表示で説明したWindowクラスを拡張してCommandWindowクラスを作ります。コマンドは、はなす、つよさ、そうび、とびら、じゅもん、どうぐ、さくせん、しらべるの8つです。ドラクエと同じか(笑)スペ…

宝箱と扉を開ける

今回は3つのイベントを追加します。宝箱と扉と一般オブジェクトです。宝箱と扉はスクリーンショットで見えますね。扉は前に立ってスペースキーを押すと開きます。宝箱は上に乗ってスペースキーを押すと調べます。一般オブジェクトとは玉座・いす・机などの特…

デバッグ情報の表示

今回はちょっと簡単ですが、画面上にデバッグ情報が表示されるようにします。下のスクリーンショットのように画面の左上にマップ名、プレイヤー名、プレイヤー座標(単位:マス)を表示します。せっかくなので前に作ったメッセージエンジン(2008/6/28)を使…

効果音を鳴らす

マップ間移動するときにザッザッザッと鳴るようにしてみます。いずれは宝箱を開けるときにガチャ、扉を開けるときにバタンと鳴るようにしますが今回はザッザッザッだけです。効果音はザ・マッチメイカァズさんからお借りしています。効果音入るとリアルにな…

BGMを鳴らす

無音の世界で寂しかったので今回はBGMを鳴らしてみます。現在の仕様ではBGMイベントを作り、マップをロードするときにBGMを鳴らすようにしています。音楽の再生の方法はBGMと効果音の再生(2008/5/11)で解説してるので参照してください。BGMはTAM Music Fac…

マップ間移動

別のマップに移動できるようにします。王様たちも待っていることですし、今回はお城でも作りましょう。pyrpg18.zip 移動イベント キャラクターイベント(2008/6/22)と同じように移動イベントを配置することでマップ間移動を行います。プレイヤーが移動イベ…

マップの読み込み

マップの保存で作成したバイナリ形式のマップを読み込めるようにします。マップの読み込みはLキーを押してください。ウィンドウが開くのでマップ名を入力します。マップファイルの拡張子を除いて大文字にした名前がマップ名です。たとえば、field.mapを読み…

マップの保存

作ったマップを保存できるようにしましょう。マップは1マス8bitのバイナリ形式でファイルに保存します。1マス8bitで表現するので256種類までマップチップが使える計算です。マップの保存はSキーを押してください。ウィンドウが開くのでマップ名を入力します…

バイナリマップのロード

マップエディタ編のマップの保存で作成したバイナリマップを読み込めるようにします。またキャラクターチップとマップチップを大幅強化してキャラクターチップとマップチップ(2008/6/24)がすべて使えるように拡張します。pyrpg17.zip キャラクターチップの…

マップの新規作成

今回は新しいマップを作れるようにします。新しいマップを作るときはマップの名前、行数、列数、デフォルトマップチップを指定します。これらの情報を入力する必要がありますが、Pygameにはテキストボックスが用意されていません。自作する必要があります。R…

選択マップチップの表示

今回はちょっとした修正です。画面の左上に現在選択中のマップチップとマウスの座標を表示してみます。また、Gキーを押すとグリッドが表示されるようにします。pymap04.zip 選択中マップチップとマウス座標の表示 main()の下の部分です。 while True: clock.…

マップチップパレット

前回は草地マップでしか描画できませんでしたが、今回はいろんなマップチップが使えるように拡張します。スペースキーを押すと下図のように画面がマップチップパレットに切り替わり、マウスクリックで使いたいマップチップを選択できるようにします。またマ…

マップチップの描画

今回は、マップチップを描けるようにしてみます。マウスの左クリックでマップチップを描画します。の上にを描画して陸地を作ってみます。pymap02.zip マップチップの描画 マウスでクリックした場所のマップチップをに変更しているのはMapのupdate()です。 de…

カーソルの移動

マップを作る(2008/5/24)やマップのロード(2008/6/1)のようにマップのデータを数値で打ち込んでいくのは大変です。マップエディタ編では、お絵描きするような感じで簡単にマップを作成できるマップエディタを作っていきます。今回はマップ内をカーソル(…

流れるメッセージ

MessageWindowをもう少し改良してドラクエのようにメッセージが流れるようにアニメーションで表示されるようにします。これは思ったより簡単です。今までアニメーションするときどうしてたか思い出してください。フレームごとに状態を更新するupdate()があれ…

会話する

キャラクターイベント(2008/6/22)で作ったイベントファイルに各キャラクターのメッセージを登録したの覚えてますか?今回は話しかけたときにそのメッセージを話すようにしてみます。メッセージウィンドウの表示(2008/6/28)ではすべてのウィンドウの基礎…

メッセージエンジン

画面の好きな位置にウィンドウを表示できるようになったので今度は画面の好きな場所に文字を描画できるようにします。今回は画面の好きな位置に文字列を描画できるメッセージエンジンの作り方を説明します。pyrpg14.zip 文字画像 画面に文字を表示する方法と…

メッセージウィンドウの表示

今回から4回にわたってメッセージウィンドウを実装します。まずは、ドラクエのような黒い背景に白い枠のウィンドウを表示してみることから始めます。今回作成するWindowクラスはメッセージウィンドウだけではなく、コマンドウィンドウ、ステータスウィンドウ…

キャラクターチップとマップチップ

これからRPGを拡張していくにあたって使用できるキャラクターチップやマップチップを整理しておきます。今回作成するサンプルRPGではここにある素材しか使いません。すべてのキャラクターチップ、多くのマップチップは、下のDotWordさん(リンク切れ)からお…

キャラクターイベント

簡単イベントを導入します。キャラクターイベントです。今までは王様や兵士などの作成、追加はmain()に直接書き込んでいました。今回は、キャラクターを外部のイベントファイルから読み込んでキャラクターを簡単に追加できるようにします。pyrpg12.zip イベ…

フルスクリーンモード

ゲームはフルスクリーンでやると臨場感がありますね。Pygameはウィンドウモードとフルスクリーンモードの切り替えがものすごく簡単にできます。F2キーを押すたびにウィンドウモードとフルスクリーンモードが切り替わります。このスクリプトはスプライトグル…

キャラクターを追加

プレイヤー1人のさびしい世界でしたがついに王様の登場です。ついでに王様の側近の大臣と王様のまわりをぶらぶらしている護衛である兵士も登場させましょう。今回はこの3人を追加します。プレイヤーを表すPlayerクラスを流用してCharacterクラスを作ることで…