投稿

プログラミング日誌11~最後の投稿と完成~

イメージ
 ついにこの時を迎えました… そうです!完成です!! ようやく完成と呼べるとこ路までたどり着きました 欲を言えばもっとやりたいことがあったのですが、時間とやる気の問題で妥協しました 何を追加したかったかは多いので省略します ということでとりあえず前回の続きを書いてから総評といきます 前回はモンスターが出てくるファイルが完成、まで行きましたね 今回はファイルをつなげる、そのファイル内のマップ及びコードを完成させるところまでで完全終了です まずファイルをつなげるところですが、 if ( talkend ){             // 別ファイルへ移動             window . location . href = "真実.html" ;                 } とてもシンプルでグローバル変数にtalkendという関数を加え(ここではfalse)、会話の終わり部分でtrueにしてやることで上記のコードが呼ばれ上のファイルに飛ぶというわけです 次にその真実とかいうファイルを見ていきます この二つのステージで成り立っています なんと家の地下にこんな場所につながっていたなんて!という感じです (いや気づけよ) ここではファイル名にあるように真実が語られます 会話のコードやセリフボックスは他のファイルのものと同じなので特に説明はしません 一応こんな感じです 家の外には出られないようになっています 一旦行こうとするとわかります そしてストーリーを成り立たせるために以前研究ノートで作ったファイルの方もかなりいじりました map : 12 ,   // map12 のとき             x : 13 ,             y : 3 ,             texts : [         ...

プログラミング日誌10~修正・追加の山~

イメージ
 前回からかなり修正と追加を加えてもはやどこをいじったかすべて把握するのが難しくなってしまいました... できる限り思い出してお伝えできればと思います まずは前回からの目標①の体力バーです 左上のバーがそうです player変数に現在の体力だけでなく最大の体力を指定しました そしてライフバーを描画するための関数を設定し、そこに変数から体力を呼び出しています ダメージを受けると現在体力を参照にゲージも減ります 体力に関連して回復スポットまで作っちゃいました         var healUsed = false ; //回復を使ったかどうか         var healStage = 2 ;         var healX = 1 ;         var healY = 18 ; まずグローバル変数に回復に必要なものを入れました 書いてある通り回復を使ったかどうかを判断する変数と回復する座標です             //回復の関数             if (                 ! healUsed &&                 stage === healStage &&                 syujinnkou . px === healX &&                 syujinnkou . py === healY             ) {   ...

プログラミング日誌9~細かい追加・修正点~

前回ほとんど完成したと書きましたが、バグがあったのでそれをここに記します それに加え追加点が何個かあるのでそちらもまとめて報告します まずバグについて これはかなりとんでもないバグでした モンスターは倒されたら透明=ステージから消えるという感じになっているのですが、透明になった後も当たり判定がそこに残されるというバグです これは見た目は描画しないというプログラムは働いているのですが、当たり判定の処理がまだ残っているため起きていました そこで if ( pmonster . dead || pmonster . life <= 0 ) return ; このコードを当たり判定を判断するコードの中に組み込みました これはこのモンスターはもう存在しないものとして扱うという宣言をするコードです ifは中の文がtrueなら実行されます pmonster.deadはfalseだと生きている、trueだと死んでいるの二つを判断しています pmonster.lifeはモンスターの体力を判断しておりlife<=0はモンスターが死んでいる状態を表します そして||これはAまたはBのどちらかがtrueならtrueを表してます でreturnはこの関数をすぐに終わらすという意味になります これを当たり判定のプログラムの先頭に置くことで 1、この関数が呼ばれる 2、死んでいるか判断する YES→即return NO→当たり判定処理に向かう モンスターが倒されるたびにこの関数が働くので当たり判定がなくなります 倒しても当たり判定が残るなんてゲームとひては致命的なミスなので早めに気づけて良かったです 続きまして追加点です           var talkTexts = [];         var talkone = false ;         var talkgolem = false ;         var talkend = false ; グローバル変数を3つ追加しました talkTextsは前回から形を変更しました まずはtalkTextsから 今までは一つしか会...

プログラミング日誌8~終盤戦~

イメージ
 あけましておめでとうございます いよいよこのファイルのプログラムも終盤戦に差し掛かってます 前回 1エラーを解消しマップ4へとつなげる 2たどり着いた先でコメント欄的なのが表示され会話シーンへと突入する 3マップ4から以前研究ノートで作ったマップへとつなげる これが目標でしたがすべて完成しました! まず1に関してはエラーは解消しました 全てのモンスターを倒すとこの扉が現れ、中に入れるといったプログラムを組んでいたのですがここでエラーが発生し進めませんでした なので左の扉がない状態ですでに壁に入れるようにしました つまりモンスターを倒さなくてもマップ4にいけるのです まぁ壁の中に突っ込む人はなかなかいないと思うので、大丈夫かと そしてプログラムとしては「すべてのモンスターを倒すと扉の像に切り替わる」だけのこしました とこんなかんじです 通常の壁と床を描画しフラグを解消すると上記の扉付きの画像に切り替わります お次は2です var talkEvent = false ; //会話中かどうか         var talkIndex = 0 ;     //今何行目か         var talkTexts = [             "よくここまでたどりつきましたね" ,             "しんじつをしりたいですか" ,             "まぁもどればすぐにわかるでしょう" ,             "さようなら"         ]; 手順としてはまずグローバル変数を追加しました これで会話をいつでも呼び出せます //会話開始の判定             if (             stage === 3 ...

プログラミング日誌7~マップ3への苦労~

イメージ
 もう今年が終わりますね ということで早速本題です マップ3(ステージ2)には悪魔が3体出てきます 真ん中のやつが体力多めです 悪魔を倒すとマップの描画が変わり、マップ4への扉が開きます ただ、悪魔を倒すだけで開くわけではないのでそこは頑張ってやってみてください 前回ゴーレムにフラグを付けましたが、そちらをまた悪魔にも使っています ここまでがざっとマップ3の説明です 苦労した点はまず下のエラーした時の画像を見てください と言いたいところだったのですがしっかり保存されておらず、載せることができませんでした… どんなエラーかというとまず悪魔がすべてのステージに出現し、マップ3の壁がすべてのステージに重なって描画されるという何ともカオスなエラーです ステージとモンスターそして主人公の描写は各ステージごとに行われています fieldpaintと名付けたプログラムなのですがここでは if(stage == 0){  背景(床) モンスター描画  主人公描画 背景()壁                      } こんな感じで構成されています これが else if(stage == 2){     背景床  主人公 } 悪魔描画  背景壁 このように }の外に打ち込まれていました そりゃエラーもでますね そして現在マップ3の扉を開ける、つまり今の何もない状態の壁から扉を出現させるわけですがこれはモンスターが倒されたら扉がある状態の画像に切り替えるというプログラムを組もうとしています ここですっごい量のエラーが出てしまい、停滞中ということです 次までに 1エラーを解消しマップ4へとつなげる 2たどり着いた先でコメント欄的なのが表示され会話シーンへと突入する 3マップ4から以前研究ノートで作ったマップへとつなげる ここまでいきたいです それではよいお年をお迎えください

プログラミング日誌6~ステージ2~

イメージ
 早速本題から入ります ようやく2個目のマップが完成?しました なぜ「?」なのかも含め説明していきます まずプログラムとしてはマップ0でガーゴイルを追加したのと同じようにゴーレム1とゴーレム2を追加しました と言いたいところなのですが、マップを見ていただけるとわかるようにここには出口がありません ここではゴーレム二体に生死それぞれに判定を付けており、ゴーレムが倒されると判定がfalseになりどこかの壁が通れるようになります function monster ( px , py , life , imgid ) {             this . px = px ;             this . py = py ;             this . dx = 0 ;             this . dy = 0 ;             this . dir = 2 ;             this . life = life ;             this . dead = false ;             this . movecnt = 0 ;             this . imgid = imgid ; //ここが大事、ここでimgを呼ぶ こんな感じですね モンスター全てに倒されたらfalseになるというプログラムが付与されたので今後出てくるモンスターにも使うことができます そして、大きな変更点が画像にあるようにimgidというコードで画像をそのままよびだせるようにしました なぜかというと今までの状態だとimg=ガーゴイルとなっていたため、ゴーレムの画像...

プログラミング日誌5~壁突破~

イメージ
 お疲れ様です 久しぶりの投稿ですが進捗はあります まずは前回の課題であった、壁をすり抜けてしまう点これは先生の協力もあり解決することができました。 原因は使っているマップチップの大きさとプログラムで指定している一マスの大きさが位置していないことでした。そのあたり全て確認したはずなのですが… 次にそれを突破できたのはいいものの、今度はモンスターへの当たり判定がない状態でした。 問題点は2つありました。 1つ目はAIを使ったことによる文を全体で見たときの互換性がなくなっていたことです。 当たり判定に関したプログラムとしてattackcheckとhitcheckというコードを使っています。名前の通り攻撃判定と当り判定を認識するコードなのですが、以前のブログでもお伝えした通り、どうにも進まなくなりAIが作ったコードをここに使用しました。 二つの判定コードを単体で見たとき、特に何もないのですがこれを他のコードと組み込むと互換性がなくなり判定が効かなくなるということでした。 AIの難しさを実感しましたね... 問題点2はここにありました。上記は修正済みなのですが、以前までif文の主人公とガーゴイルの場所が逆になっており、ガーゴイルが攻撃した時に~という条件になっていたのです。 こんな単純なミスに気付かなかったなんて これらを解決した結果モンスターを倒すことができ、また壁にめり込むこともなくなりました。 今回の報告はこれで以上です! 次回は他のステージを一気に紹介するとともに、以前研究ノートで作ったプログラムに飛べるようにします。 それではまた