投稿

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

イメージ
 早速本題から入ります ようやく2個目のマップが完成?しました なぜ「?」なのかも含め説明していきます まずプログラムとしてはマップ0でガーゴイルを追加したのと同じようにゴーレム1とゴーレム2を追加しました と言いたいところなのですが、マップを見ていただけるとわかるようにここには出口がありません ここではゴーレム二体に生死それぞれに判定を付けており、ゴーレムが倒されると判定がfalseになりどこかの壁が通れるようになります こんな感じですね モンスター全てに倒されたらfalseになるというプログラムが付与されたので今後出てくるモンスターにも使うことができます そして、大きな変更点が画像にあるようにimgidというコードで画像をそのままよびだせるようにしました なぜかというと今までの状態だとimg=ガーゴイルとなっていたため、ゴーレムの画像を呼び出せずにエラーが起きてしまいます これで違うモンスターをステージごとに呼べるようになりました さらに追加点としてステージ移動できるようにしました changestageという機能を追加しました ここには主人公が指定したステージのX座標とY座標に入るとchangestageが動き、指定のステージと座標に移動できます (ステージの数字、X座標、Y座標)こんな感じです 追加でこれは謎のエラーが出たときのコードです 2個目のステージに入ったとたんに槍が出なくなるという現象が起きました 原因は gc.drawImage(document.getElementById("syujinnkou"), ...) これです ステージ0ではpaintから主人公を描画していたのですが、ステージ1・2・3は直接画像を呼び出してました 主人公の向き矢印や攻撃エフェクト、ここだと槍の画像はすべてpaintに集約されています 今後注意していきたいですね ざっと追加した機能はこのあたりです そしてなぜ?なのかというと、 ゴーレムを倒すと壁を通れるようになると書きましたが、その通れる壁がそのまま変わらないままなのです しかし!どこを通れるのか探すというのもめんどくさいですが、一興だとも思うのです 探してもらうためにも探すという行為に誘導するための何かが必要なのですがまだその点に至っておりません… とりあえず全ステージを完成させるのが先なので...

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

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

プログラミング日誌4~壁~

イメージ
 もっと投稿頻度を増やしたかったのですが壁に当り進行が止まってました ヒットチェックの解説を行いたかったのですが、まだできなそうなので今なぜ行きどまっているのかをお伝えできればと思います まず今のプログラムに以前から使用しているtiledで作成しているマップを組み込むところから始めました 始めは真っ白な画面で開けなかったのですが開けるところまではいけました しかし画像の通り... 原因はプログラムでおいてマップ=ステージとしておいているのですがそこの紐づけがうまくいっていなかったようです 因みにこの段階で歩くことはできません 次にマップを読み込むことに成功しました しかし主人公が壁に埋め込まれ歩くことができません 壁に埋まった原因としては床→主人公→壁と描写しているのですが、壁に階段も含まれているのでそのせいでした なので床→階段→主人公→壁と描写しなおすことで解決できます(まだできてない) そしてよく見ると画面の大きさとマップの大きさがあっていません これは純粋に授業で使用した際のマップの大きさから自分のマップの大きさに設定しなおしていませんでした... これが今の一番の問題です 歩けるようになりモンスターの追加もできたのですが、御覧のとおり主人公・モンスターともに壁を貫通してしまっています その他のヒットチェックや前述した歩くコードは問題なく動いています またコンソールでエラーが出ないのです もしかしたらマップの数字がずれているのではと何回も確認したのですがミスはなし 因みにこのマップが歩けるところを888、歩けないところを111とおいています そして主人公が二体生成されているという... これはスタート地点に生成するプログラム(動かせない)と移動できるプログラムがそれぞれ独立しているからだと思われます さらに、よくわからないところで壁の判定があり画面外にも行ける場所がありもうよくわからないことになっています 神頼みでchatgdpに聞くも解決せず... どうしようもないので授業で使用した元のヒットチェックのプログラムを1から触りながらやっていきたいと思います 以上が現状です 前述した通り1からまたやり直すので次の投稿までまた時間が空くと思います それではまた

プログラミング日誌3~マップの解説~

イメージ
 前回ステージとともにヒットチェックの解説も行うと記述しました そもそもヒットチェックとは当たり判定を付けるプログラムの名前です 今までの行っていたものとはプログラムが違うので、ヒットチェックだけのファイルを用意し以前のファイルとこのファイルを行き来できるようします 今回はマップの解説です 以下4つのマップは一つ目のファイルにマップである教会の地下に位置しています マップ1 教会から入るとまずここに出ます モンスターも沸くので死なないように、時に倒しながら出口を目指してください 入ったばっかなのでモンスターの強さはあまり高くしないように設定する予定です マップ2 さっきと違いとても開けたマップになりました ここでは先ほどより強いモンスターが出るようになります さらにここのモンスターをすべて倒さなければ次のマップに進めません 頑張ってください。 倒すと右上の当りが空きます マップ3 ここはいわゆるボス部屋的なところです 先ほどより強いモンスターが出る予定です というか出します 倒せると扉が開きます マップ4 モンスターをすべて倒すとここにたどり着きます 何やら怪しい像が立ち並んでいます 物語の根幹に関わる情報が聞けるかもしれません (そんなことより早くタイトルを決めなおさなければ) 以上が新しく追加したマップです まだ制作する予定のマップがあるのでそちらも今後紹介していきます 次はこのマップの後半戦であるヒットチェックの説明です それではまた

プログラミング日誌2~ストーリーの変更~

 お久しぶりです リアルが忙しく更新が滞っていました 忙しいながらもプログラミングに取り組める時間が取れたときのためにいろいろと考えていたのですが、その中で大きな変更点が一つ… ズバリ「ストーリーの変更」です! 以前ヒットチェックについて投稿しました。こちらを以前から考えていたストーリーにどのように組み込むか考えたのですが、難しいことに気が付きました。 ということでストーリーの変更またその変更に伴いタイトルの変更も行います。 今後の流れとしましては、 ①ステージ制作 ②そのステージにヒットチェックを取り入れる ③既存のファイルとヒットチェックのファイルを行き来できるようにする ④ストーリーに関わるフラグを一つ一つ完成させていく という感じになると思います。 次回はステージの解説とともにそのステージにヒットチェックを組み込むところまでご紹介できたらと思います。 それではまた

プログラミング日誌1~卒論に向けて~

イメージ
初めまして!とお久しぶりです! 東京経済大学4年の髙田です 以前は卒業研究という形でブログを投稿していましたが、今回は卒業論文に向けての投稿になりました! https://www.blogger.com/blogposts/?hl=ja 以前の投稿をご覧になりたい方はこちらから 以前から開発していたゲームに追加要素を加えて、完成させるのがこれからの目標です 完成までどうぞお付き合い下さい ということでゲームの中身の説明に入っていきたいと思います! 今回は新要素として敵キャラとの当たり判定・ライフ要素等の説明です こちらです! 少しわかりづらいんですけど、モンスターと主人公にはそれぞれライフが3個与えられていて倒すと上の壁が開き倒されるとGame Overと表示されるようになっています 細かいコードにつきましては次回の投稿にてまとめてあげたいと思います こちらの要素を自分のゲーム内に取り入れるのが1番初めの課題ですね それではまた