2020年12月21日

師匠のVB.NETどたばた塾~第16回

sisyo.gif
師匠T:むぅ、いよいよ寒くなってきたの。風邪薬を飲むのが欠かせなくなってきたぞ。
いつも眠くてきついわい。

deshi.gif
弟子D:そのまま永遠の眠りにつかないように気を付けてください。……いや、ついてくれればこの講座は俺のものに……(飛び蹴りを喰らう

sisyo.gif
たわけが。この講座、そう簡単にお主に譲らぬわ。さて、今回は自機のショットについて説明していく。準備はよいかな?

deshi.gif
は、はい……。

sisyo.gif
ではいくぞ! 着いてくるがよい!

【 弾は配列変数で 】

sisyo.gif
さて。画面上に一つしかない自機とは違い、連射ができるSTGでは、ショットは複数画面の中に存在することになる。さて、このように複数存在しているものを扱うには、どうしたらいいかな?

deshi.gif
えーと、確か配列変数を使うんでしたっけ。

sisyo.gif
うむ、その通りじゃ。発射した時には、その配列変数から使われていないものを探し、それに情報をセットする。そして、移動、描画させるときには、使われているものに対し、その処理を行うようにするのじゃ。

deshi.gif
画面から出た時には、その配列を使われていない状態に戻すこともしなければなりませんね。

sisyo.gif
おぉ、いいことに気づいたのう。ということで、これがショットを表すShotクラスと、ショット関係の処理を行うShotModuleの内容じゃ。

vb2012-01.JPG
↑Shotクラス

vb2012-02.JPG
↑ShotModuleモジュール

sisyo.gif
では、まずはShotクラスから説明していくとしよう。
まずはコンストラクタから。と言っても、難しいことはない。引数として渡されたものを、クラス内の変数に格納してるだけじゃ。

deshi.gif
あの師匠。このfVX、fVYとはなんぞや。それとどうして、クラス内に移動処理を持たせてるんですか?

sisyo.gif
うむ、いい質問じゃ。このfVX、fVYは、ショットが進む方向じゃ。今回は、前方に直進させるだけだから必要ないかもしれんが、例えば3WAYにする場合だと、ショットごとに進む方向が変わるじゃろ? そこで、そのショットごとに移動量を設定させているのじゃ。クラス内にMoveEx()という移動処理を持たせているのも似たような理由からじゃ。この中で移動処理を持たせてやれば、ShotModuleでは、この処理を呼び出すだけで済むからの。

deshi.gif
なるほど。

sisyo.gif
それと、今回はショットが画面が消えたら、それを消す仕様にするので、ReviseプロパティはFalseにしておる。そして、モジュールの方で、そのショットのOutプロパティをチェックし、Trueになったらそのショットを消すようにする予定じゃ。

deshi.gif
なるほど!

【 空きショットを探そう 】

sisyo.gif
さて。では、ShotModuleの説明に入っていくとしよう。まずは一番の肝、使われていないショットを探す関数、EmptyShotID()関数じゃ。
vb2012-03.JPG


sisyo.gif
と言ってもやっていることは簡単。Forループでショットを扱う配列oShot()を探して使われていないものが見つかったら、その番号を戻り値に入れる、それだけじゃ。

deshi.gif
あの、師匠。この『Is Nothing』とはなんですか?

sisyo.gif
うむ。それは、その配列の中にオブジェクトが入っていないかどうかを表す演算子じゃ。入っていなければTrue、入っていればFalseを返す。なお、入っているかどうか(つまり入っていればTrue)を調べたければ、Isnot Nothingを使えばよい。

deshi.gif
ふむふむ。そういえば師匠、一つ質問が。

sisyo.gif
なんじゃ?

deshi.gif
ショットは、自機のところから出てくるものですよね。では、その自機の位置は、どうやって知るのでしょうか?

sisyo.gif
……あ。

deshi.gif
もしかして師匠……。

sisyo.gif
そ、それはこれから解説しようと思っていたところじゃ。MyCharaModuleに、次の関数を追加するがよい。

vb2012-04.JPG

sisyo.gif
これらの関数は、もし自機が存在していれば、その座標やサイズを返してくれる、というものじゃ。なお、もし自機がない場合は、-1を返すようになっておる。

deshi.gif
ふむふむ(感情のこもってない声で

sisyo.gif
うぅ、弟子の冷たい声が痛い。やはり新しい弟子をとるべきか……。

deshi.gif
そ、そんなことはありませんっ、師匠っ。俺は師匠を尊敬しておりますっ!

sisyo.gif
そうじゃろうそうじゃろう。では、それを踏まえたうえで、ショットを作るShotCreate()サブプロシージャの内容がこれじゃ。

vb2012-05.JPG

sisyo.gif
このサブプロシージャでは、まず先ほどのEmptyShotID()関数を使って、開いているショット配列を探し、その後、Shotクラスのインスタンスを作り、該当する配列に格納しておる。

deshi.gif
あの師匠。この数式がさっぱりわからないのですが。

sisyo.gif
何難しいことはない。ただ、ショットの初期位置を計算しているだけじゃ。

----------
MyX() + MyW() / 2 - 5 / 2
----------

sisyo.gif
この部分では、自機の横の中心を計算(X座標+幅/2)し、さらにショットの幅(5)の半分を引いている。中心を計算しただけでは、ショットの幅の分だけ右にずれてしまうからの。

----------
MyY() - 29
----------

sisyo.gif
この部分では、ショットが、自機の前に出現するように設定しておる。29というのは、ショットの高さじゃ。

deshi.gif
なるほど。

sisyo.gif
さて。ここまでくればあとは簡単。ShotMove()とShotDraw()だが、これも難しいことはない。ループで、ショットの配列を調べ、中にショットが入っているものがあれば、それを移動または表示させておるだけだ。
なお、移動させた時は、画面からはみ出たかどうかをOutプロパティを使って調べ、もしはみ出ていれば、ショットを消すようにしておる。

deshi.gif
ふむふむ。

sisyo.gif
ここまで出来たら、後はXキーを押した時に、ShotCreate()を呼び出し、さらにGameMain()の中に、ShotMove()とShotDraw()を呼び出すコードを書けばいいだけ。それが下のコードじゃ。

vb2012-06.JPG
↑MyCharaModuleの変更点

vb2012-07.JPG
↑MainModuleの変更点

sisyo.gif
これでショットを撃つ処理は出来上がりじゃ。実行してみよ。

deshi.gif
おーーー!! 弾が出る!……のはいいのですが、早く出すぎて、線みたいになってますよ。どうすればいいんでしょう?

sisyo.gif
それは次回に回しておこう。次回は、この件の解決と、処理をさらにスマートにする方法について解説していく。予習復習をしっかりするように。

deshi.gif
師匠もしっかりしてくださいね(冷たい瞳

sisyo.gif
弟子は、一番弟子の座が惜しくないと見えるな……

deshi.gif
そ、そんなことないです。俺はずっと師匠を尊敬しておりますよーーーー!!



※次の更新予定は、特集『パソレクSP・コマンドプロンプトを使いこなすのじゃ!』の予定です。お楽しみに! 更新は、1月9日ごろの予定です。

posted by 裏編 at 14:20| Comment(0) | 師匠のVB.NETどたばた塾 | 更新情報をチェックする

2020年12月15日

師匠TのチャレンジARSゲーム!~第弐拾伍回:MONTHLY HOUSE【よっしー 氏】

ars2012-01.JPG

うむ、師匠Tである! 今回の『師匠TのチャレンジARSゲーム!』は、久しぶりにフリーのゲームを紹介するぞ!
今回紹介するのはMONTHLY HOUSE。ADV黎明期によくあった、館ものと呼ばれるジャンルのアドベンチャーゲームじゃ。
このゲームでは、300コマンドという時間制限が緊張感を盛り上げるぞ。ではやっていくとしようぞ。

どんなゲームも完全制覇じゃ!!

【 プロローグ 】

 謎の秘宝 『BLACK DIAMOND』に魅入られた大富豪が、ある日不慮の事故で死んでしまいました。
相続人の居ない大富豪の豪邸は地元不動産業者により売りに出されたが大富豪のあまりにも不自然な死に方のせいか、長い間買い手が見つかりませんでした。そこで不動産業者は、出張や単身赴任など短期滞在者向けに敷金や礼金の要らないマンスリーハウス(月払い賃貸一軒家)にする事にしました。
 ある日あなたは大富豪が隠した謎の秘宝の噂を聞きつけ、このマンスリーハウスを借りる事にしました。早速マンスリーハウスに向かいましたが、実はこのマンスリーハウスに入った者は未だかつて一人も生きて出て来た人はいないと言うのです。
 さあ、あなたは1ヶ月以内(300コマンド内)にこのマンスリーハウスのどこかに有る大富豪が隠した謎の秘宝を見つけだし無事に生還できるでしょうか?

【 本編 】

ars2012-02.JPG
まずは、家の入口の前からスタートじゃ。まさかここでつまずく奴はおらぬな?

ars2012-03.JPG
中に入ったぞ。ところでゲーム画面は、向いている方角のものが描かれておる。
自分がどちらを向いているかは、別ウィンドウに表示されておるぞ。

ars2012-04.JPG
台所に来たぞ。片隅にある棚が気にかかるが……

ars2012-05.JPG
暖炉と絵がある部屋じゃな。壁にかけられている絵といえば……

ars2012-06.JPG
テーブルが置いてあるのう。このテーブルは何かに使えるか?

ars2012-07.JPG
ここにも絵が! 一体これらの絵は、何の意味があるのであろうか?
さて。この先どうなるかは……


ここから先はキミの目で確かめるのじゃ!
健闘を祈っておるぞ!!

※次の更新は、『師匠のVB.NETどたばた塾』の予定です。お楽しみに!

posted by 裏編 at 11:13| Comment(0) | チャレンジARS | 更新情報をチェックする

2020年12月07日

見逃してませんか?PCの危険な兆候

 メッセが突然切断され、表示されるエラーメッセージ……
 何もしてないのに、アクセスランプがちかちか着くハードディスク……
 ハードディスクから聞こえる、ガリガリとした変な音……

 特に気にすることもなく見逃してませんか?

 ちょっと待ったぁっ!!

 それらの兆候は、見逃して放置していると、とんでもないことになる可能性があります! そう、ビートたけしの医学番組のように、

 そのまま放っておくと、大変なことになりますよ

って勢いで。

 そこで今回は、ネットを検索して見つけた、PCの危険な兆候について、いくつか紹介していこうと思います。

【 他の場所からサインインしました 】

 MSNのメッセンジャーを使っているとき、突然切断されて、『他の場所からサインインしました』とエラーが表示されることはありませんか? あるいは、サインインしたときに上記のメッセージが出たり。

 インターネットで調べてみたところ、MSN MessangerとWindows Live Messangerの両方がインストされている場合、どちらかをインしているときに、もう片方でサインインしたときに発生することがある、とのことですが、もしそうでない場合……

 恐ろしいことに!

 誰かが、あなたのパスワードを盗み、それであなたのアカウントをのっとってサインインしている場合があります。アカウントを乗っ取られると、そのHotmailから迷惑メールを送られたり、Hotmailに登録するさいに個人情報を入力した場合、それを盗まれたりと、大変なことになることがあります。

 そんな兆候があったらただちに……

対応策

 ただちにパスワードを変更する。できれば、ただちにウィルススキャンを。

【 特に何もしてないのにハードディスクが…… 】

 特に何もしてないのにハードディスクのアクセスランプが点滅していることはありませんか?
 また、大きなファイルを送受信しているわけじゃないのに、データの送信量が桁外れに多くなっていることはありませんか?

 前者の場合、Windowsがアクセスしている可能性もありますが……

 恐ろしい可能性の場合も!

 何者かが、あなたのPCにハッキング(正しくはクラッキングですね)を仕掛けている可能性があります。ファイアウォールなどのログを確認し、同じアドレスからパケットが送られてきた場合は、確実と思われます。
 Windows Updateをしっかりと行ったり、アンチウィルスを導入したりと、セキュリティ対策を行っていれば、まず大丈夫かと思われますが、油断は禁物。
 ハッキングされたら、そこをハッカー攻撃の中継点にされたら、パスワードなどの重要な情報を奪われたりするかもしれません。

 なので、ただちに……

対応策

 ハッキングかそうでないか、ファイアウォールやアンチウィルスのログなどを見て確認。もしハッキングの疑い濃厚なら、念のためウィルススキャンをかけたほうが安心。

【 ハードディスクから異音が…… 】

 ハードディスクから聞こえてくる、ガリガリとした、いつもとは違う音や変な金属音。
 通常より、処理速度が低下している
 こんなことはありませんか?

 もしあったら、それはハードディスクが故障する前兆かもしれません。

 ハードディスクの内部は、基本的に、回転する円盤の上に、本当にかすかな隙間を隔てて、読み書き用のヘッドが浮いている……という構造になっています。つまり、金属音や異音が聞こえるということは、ハードディスクが異常な状態になっている可能性が高いというわけです。 ヘッドがディスクに接触して傷を付けたり……
 ハードディスクにはさまざまな大切な情報が保存されています。ハードディスクが故障したら、それらは読み込むことができなくなり、失われてしまいます。(現に裏編も、このような異音がした後に、外付けハードディスクがやられて、再フォーマットする羽目になりました。当然、その中のデータはみんなパーです)

 なので……

対応策

 ハードディスクのエラーチェック、そして重要なデータのバックアップを! クラッシュしてからでは遅いです!

 なお、ハードディスクのエラーチェックは、Windows7では、エクスプローラにて、そのハードディスクを右クリックしてプロパティを選び、ツールのタブに切り替えて、エラーチェックの枠のボタンを押すことで実行できますよ。

【 他にも…… 】

 他にも体験談としては、今までは問題なく動いていてネトゲが突然フリーズしたり、ということもありました。他のソフトは問題なく動いているのに。
 PCを変えたので、調べてはいないのですが、もしかしたらマザーボードかビデオカードあたりがやられていたのかもしれません。

 これまで説明したとおり、ほんのささいな異常でも、それは故障やハッキングの前兆なのかもしれません。
 見過ごしたりせず、発見したら、ネットで調べたりするようにしましょう。

 人間の健康もPCの健康も、早期発見・早期治療が肝心です。



※次の更新は、『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!
posted by 裏編 at 09:30| Comment(0) | 特集 | 更新情報をチェックする