2019年10月28日

NIKONIKO CINEMA!~音と未来のCM

 ようこそ、古今東西の面白い動画を集めたNIKONIKO CINEMAへ。
 今宵も、面白い動画を取り揃えております。

 それでは、今月も楽しい時間を……

~美味しい音を集めてみた


 料理の音を集めた動画。どれもおいしそうな音ばかりで、これを聞くと、おなかがすいてくること請け合いですね。あと、タグの「炊いたら負け」もポイント高いです。座布団一枚!

~14年前に放送された未来予想CM


 今から十数年前に、外国で放送されたCMだそうです。
 パソコンで本を読む(→PDF)、カーナビ、タブレットでメモや描画など……ここで描かれた未来のほとんどが現実になったのですから、技術の進歩はすごいですよね。

~最後に
今月は、すんなりと動画を選べてよかったです。
美味しい音を聞いて、今日のご飯に想いを飛ばすのもよし、未来予想CMを見て、技術の進歩に想いを馳せるのもよし、と、なかなか良いラインナップではないかと自画自賛しております(笑

それではまた次回、面白い動画を用意して、皆様のお越しをお待ちしております。

それではまた来週お会いしましょう。 フガクク(某国民的主婦的

==========

※次の更新は、特集『古いスマホを有効活用!』の予定です。お楽しみに!
posted by 裏編 at 09:48| Comment(0) | PCメディア情報 | 更新情報をチェックする

2019年10月24日

レトロゲーレビュー:銀河の三人【1983年・任天堂・FC】

ret1910-00.JPG

※この記事に掲載されている画像の著作権は、各ゲームの開発者様(任天堂/スクウェア・エニックス)にあります。ここに掲載されている画像の二次使用を禁じます。

 この『銀河の三人』は、PC-8801やFM-7などの機種用に、ENIX(現・スクウェアエニックス)から発売された、『地球戦士ライーザ』のリメイク作である。
 この銀河の三人は、ファミコンユーザーにもプレイしやすくリメイクしながらも、原作のSFテイストも、そのまま残された良リメイク作である。
 そこで今回は、原作である『地球戦士ライーザ』との比較も入れながら、このゲームについてレビューしていこうと思う。

【 SYSTEM GUIDE 】

 さて、このゲームはロボット『ライーザ』を操縦して、敵を撃破していくSFRPGである。 そのSFテイストは、すでにシステムの時点からかもしだされている。
 ゲーム中でプレイヤーは、ライーザを駆って太陽系内を移動するのだが、その移動システムは……

ret1910-01.JPG
▲ 太陽系内マップ。 ここで移動する目的地を指定する。

 まずは、上のマップ画面で目的地を指定する。しかる後に、『跳躍』コマンドで移動していくのだ。『跳躍』コマンドを実行して跳躍(ワープのようなものと考えればよし)移動すると、設定した移動距離(ブースターの数まで)だけ、目的地に移動する。例えば、移動距離を2に指定したとき、目的地までの距離20のところに行くには、10回跳躍すればいいわけだ。
 また、跳躍後や、ダンジョン内で敵に遭遇すると、戦闘になる。

ret1910-02.JPG
▲ 敵と遭遇!

 戦闘ではバルカンとミサイルの両方で敵を攻撃する。バルカンは無限に撃てるが、威力は低い。ミサイルは威力はあるが弾数に制限がある、という違いがある。

 と、このように『地球戦士ライーザ』と『銀河の三人』は、システム面でもSFらしさを追求したものになっているのだ。

【 REMAKE AND ORIGINAL 】

 さて、ここからは原作である『地球戦士ライーザ』との違いを紹介していくことにしよう。

 まずはストーリーである。 原作では……

ret1910-04.JPG

 このように、司令部は、地球側は一大作戦を仕掛けるため、各地の部隊を集結させ、主人公たちも、火星から地球に向かうのだが、『銀河の三人』では……

ret1910-03.JPG

 このように、主人公たちは、すでに地球にいて、そこから出撃するようになっているのだ。

 次はキャラクター。まずは相棒のブルーである。

ret1910-06.jpg
▲ 原作版

ret1910-05.JPG
▲ 銀河の三人版

 変わりすぎである(笑 筆者は、原作版のほうが好きなのだが……

 また、ヒロインのリミも……

ret1910-08.jpg
▲ 原作版

ret1910-07.JPG
▲ 銀河の三人版

 心なしか、見た目の年令が下がってるような気が。ただ、これはプレイヤーによって好き嫌いが分かれるかもしれないが。なお、このキャラデザの修正が、エンディングにささやかな違和感を生じることになるのだが……それは後述。

 また、システムでもアレンジがなされている。

ret1910-09.JPG

 このように、惑星内部がダンジョンになっているのだ。やはりこれは、ファミコンユーザーがプレイすることを考えたアレンジだろうか?(当時のゲームは、RPGでなくてもダンジョン探索の要素がついてるものが多かったような気がする。スーパースターフォースしかり)

【 EXTRA 】

 さて、『地球戦士ライーザ』、『銀河の三人』ともに最大のポイントといえば、そのストーリーだろう。『追い詰められた地球側』という極限の状況からはじまることもさることながら、クライマックス、そのエンディングは、ファミコンのゲームの中でも有数の悲劇といわれている。
 ここではあえて書かないが、下の動画を見て、ぜひその悲劇に触れていただきたい。


▲ 原作版(20:00ごろから)


▲ 銀河の三人にて

 なお、このエンディングだが、『銀河の三人』では、リミがちょっと幼く見えるせいで、やや違和感があるとのこと。もう少し年上に見えたらよかったのだろうが……(17,8とか……)

 だが、この『銀河の三人』は、本当に、SFテイストあふれ、ストーリーも素晴らしい、いいゲームである。難易度が高いという難点はあるが、埋もれさせては惜しい一作だと思う。
 ぜひ、ブルーの原作版採用、リミのグラフィック変更、そして難易度やシステムの調整を加えたうえでPSPなどにリメイクしてほしいと思うのだが……(現に、一部のサイトでは、リメイク希望の投稿もある)

==========

※次の更新は、『NIKONIKO-CINEMA!』の予定です。お楽しみに!
posted by 裏編 at 13:26| Comment(0) | その他のゲーム情報 | 更新情報をチェックする

2019年10月22日

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

sisyo.gif
師匠T:さて。前回は、入出力と変数について説明したが、実はあることを説明するのを忘れておった。

deshi.gif
弟子D:さすがに師匠もそろそろボケ……いてっ。
それで、忘れていたことってなんなんです?

sisyo.gif
うむ。それは、保存についてじゃ。これができぬと、VB.NETを終了させたら、せっかくのプログラムが消えてしまうからの。
それで保存についてじゃが、VB.NET終了時に保存するかどうか聞かれるが、メニューバーのディスクのアイコンを押すことでも保存することができる。

vb1910-g01.JPG
↑保存していなくても、VB.NET終了時に保存するかどうか聞かれるぞ。

vb1910-g02.JPG
↑このアイコンをクリックして保存するのだ!

sisyo.gif
また、プロジェクトを読み込むときは、開始時の画面の左半分に、今までに開いたプロジェクトのリストがあるからそれをクリックしてもいいし、右側の『プロジェクトやソリューションを開く』をクリックしてもいい。どちらの方法でも読み込むことができるぞ。後者の場合は、クリックした後に、ファイルを選ぶダイアログが開くから、そこから目的のプロジェクトを選ぶがよい。

vb1910-g03.JPG
↑どちらを使っても読み込めるぞ!

deshi.gif
なるほど!

sisyo.gif
さて、ではここからが本題じゃ、いくぞ!

【 なぜ? 】

sisyo.gif
さて。今回はいきなり、わしのほうからプログラムを見せよう。これを例の如く、Sub Main()とEnd Subの間に書くがよい。

vb1910-l01.JPG

sisyo.gif
できたら実行してみよ。最初は5を入力してみるがよい。

deshi.gif
はい!

vb1910-g04.JPG
↑5を入力した結果

deshi.gif
入力してみました。『10個のリンゴを5人で分けると、一人2個』と表示されましたよ。

sisyo.gif
うむ。では続いて、もう一度実行し、今度は0を入力してみよ。

deshi.gif
はい……あっ!

vb1910-g05.JPG
↑あっ!

deshi.gif
何やら、変なウィンドウが出てきましたよ!

sisyo.gif
うむ。これは、7行目の c = a / b が原因じゃ。今の入力では変数aに10が、bには今おぬしが入力した0が入っておる。これを見て、何か気づかぬかな?

deshi.gif
あっ! 確か、0で割ることはできなかったのでは?

sisyo.gif
うむ、その通り。そんな計算をしたから、VB.NETは『そんな割り算はできんぞ!』と例外を出したのじゃ。『例外』については覚えておるか?

deshi.gif
はい。Java道場で勉強した覚えが……。エラーみたいなものでしたっけ。でも、これを解決するにはどうしたらいいのですか?

sisyo.gif
うむ。Javaの時と同じように、例外処理の構文を使うのも一つの手ではあるが、それは条件判断文について学ぶという今回の趣旨に反する。
そこで今回は、変数bに0が入った時には、計算する前に警告のメッセージを表示させることにしよう。

deshi.gif
なるほど。それで、どうやって。

sisyo.gif
うむ。まず、変数bが0かどうかをチェックする。そして、0なら警告メッセージを出し、0でなければ普通に計算させて、結果を表示させるようにするのだ。そこで!

deshi.gif
おおっ!!

sisyo.gif
『もし~なら~をおこなう』というような処理を行わせる時に使うのが、今回説明するIF~THEN文なのじゃ!

deshi.gif
おおぉぉっ!

sisyo.gif
このIF~THEN文は、次のように使うぞ。

If 式 Then
式がtrueの時に行う処理
Else
式がfalseの時に行う処理
End If

例:
If a >= 5 Then
  b = 0
Else
  b = 1
End If

sisyo.gif
式がtrueの時は、IfとElseの間にある処理を、falseの場合は、ElseとEnd Ifの間の処理を実行する。
例の場合だと、aが5以上の時は、If~とElseの間にあるb = 0が実行される。そうでなければ、ElseとEnd Ifの間にある、b = 1が実行されるのじゃ。

deshi.gif
ふむふむ。

sisyo.gif
それと、falseの時には何もしないのであれば、Elseは省略することもできるぞ。

deshi.gif
なるほど。式はどのように書けばいいのですか?

sisyo.gif
うむ。基本的は、Javaの時と同じじゃ。普通の式を書いてもいいし、条件式を書いても良い。
なお、上の説明では、式がtrueかfalseによって処理が分岐する、となっておるが、VB.NETの条件式でも、成立すればtrue、成立しなければfalseを返すので、『式が成立すれば~』『式が成立しなければ~』と読み替えてもおかしくはないであろう。
なお、条件式はJavaと同じようにこのように書く。

値or式or変数 比較演算子 値or式or変数

sisyo.gif
ただし、比較演算子は、一部Javaのものとは異なっておるので注意が必要じゃ。

vb1910-c01.JPG
↑VB.NETとJavaの比較演算子の対応

deshi.gif
『等しい』と『ではない』の比較演算子が違ってるわけですね。

sisyo.gif
うむ。それと、もちろん論理演算子で二つの式をつなぐこともできるが、Javaでは使えた&&や||は使うことはできぬ。前者はAnd、後者はOrを使うので気を付けること。なお、Andは二つの式が共にtrueならtrue、Orは二つの式のうちどちらかがtrueならtrueを返すぞ。

〇 (a>5) And (b=3) ×(a>5)&&(b==3)
〇 (c=5) Or (d<>2) ×(c==5)||(d!=2)

sisyo.gif
さて、ではここまでのことを踏まえて、先ほどのプログラムを直してみるとしようぞ。
どうすればいいかな?

deshi.gif
うーん。変数bが0なら警告を出して、そうでなければ従来の処理を行えばいいんだから……カタカタ……これでどうでしょう?

vb1910-l02.JPG

sisyo.gif
ふむ。実行してみるがよい。

deshi.gif
はい!

vb1910-g06.JPG

sisyo.gif
うむ、ちゃんと警告メッセージが出ているの。正解じゃな。見事じゃ!

deshi.gif
ありがとうございます! 俺だって本気を出せばこのくらい……いてっ。

sisyo.gif
調子にのるでない。さて、話はもうちょっと続くのじゃ。

【 SELECT CASEとはなんぞや? 】

sisyo.gif
条件判断を行う文は、If~Then文だけではない。Select Case文というのもあるのじゃ。

deshi.gif
それはどのようなっ?

sisyo.gif
うむ。Java道場で勉強したswitch文は覚えておるか?

deshi.gif
えーと……なんでしたっけ?

sisyo.gif
はあっ!!(飛び蹴り)

deshi.gif
うわあっ。

sisyo.gif
指定した変数の値によって、処理を分岐させる文じゃ。それと同じ働きをするのじゃ。
さて、このSelect Case文の書き方はこうじゃ。

Select Case 変数
Case 値1
変数が値1の時に行う処理
Case 値2
変数が値2の時に行う処理
……
End Select

sisyo.gif
なお、switchと違い、Select Caseでは、処理の最後にbreak(に該当する命令)を入れる必要はない。

deshi.gif
ということは、breakを省略して、処理をまとめる裏技は使えないわけですか……。

sisyo.gif
そういうことじゃな。あと、Javaでのdefaultのように、列挙した数以外の値が来たときの処理を書きたいときは、Case Elseを使う。

Select Case a
Case 1
Case 2
Case 3
Case Else
〇〇〇←1、2、3以外の数の時は、ここが実行される
End Select

deshi.gif
なるほど!

sisyo.gif
では、今日はここまで。次回は、繰り返しの文、Do~LoopとFor~Nextについて説明するぞ。
ここまでの復習、そして予習を忘れないように!



※次の更新は、『レトロゲーレビュー』の予定です。お楽しみに!

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

2019年10月17日

師匠TのチャレンジARSゲーム!~第拾七回:『サザンクロス』 【バンダイ】(その2)

※この記事に使われている画像は、問題があれば削除いたします。
※この画像の著作権は、開発元のバンダイ様にあります。この画像の二次使用を禁じます。

うむ、師匠Tである!
今回も、前回に引き続き、バンダイの名作ADV・『サザンクロス』を攻略していくぞ!

どうやら今回は、星座の世界が舞台のようじゃ。
果たしてどんな冒険が待ち受けておるのか?

ではいくぞ!

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

【 本編 】

ars191001.JPG
まず最初に遭遇したのは、冬の星座で有名なオリオンじゃ!
どうやら彼は、悩みを抱えておるらしいが……

ars191002.JPG
続いて遭遇したのはカニじゃ。なおここからは、移動のためのコマンドが『FBLR(前後左右)』ではなく、『NSEW(北南東西)』に切り替わるので気を付けるように。

ars191003.JPG
続いて遭遇したのは、メデューサ退治で有名なペルセウスじゃ。彼も何やら困っているらしい。
彼にあるものを渡してやると、二つのうち一つをプレゼントしてもらえるのだが、どれをもらうべきか……
うむむ、実に迷うわい

ars191004.JPG
続いてはライオンじゃ! 倒さねばならぬだろうが、そのための武器はどこじゃ?

ars191005.JPG
箱があるぞ。中には何が入っておるのか?

ars191006.JPG
白鳥がおるな。向こう岸に渡るには、彼の力を借りねばならぬが、どうすれば助けてもらえるのか……。



次回に続くのじゃ!!

==========
※次の更新は、新連載『師匠のVB.NETどたばた塾』の予定です。お楽しみに!
posted by 裏編 at 09:11| Comment(0) | チャレンジARS | 更新情報をチェックする

2019年10月14日

ActiveBasicとDXライブラリでゲームプログラミング!~第12回・シューティングゲームを作ろう!その4

n88_reon.gif
玲音:こんにちは! 玲音です!

n88_kaede.gif
楓:こんにちは! 気づいたら、この講座に引きずり込まれてた、玲音先輩の後輩の楓です!
今月もよろしくお願いします!

n88_reon.gif
あ、言われちゃった。しまったなぁ。だから、引きずり込んだんじゃないってばぁ……。

n88_kaede.gif
えへへ、それで先輩。今回は、弾の発射処理を作るんでしたよね?


n88_reon.gif
うん。その通り。今回は、弾の発射角度の計算から、そこから弾の移動量を計算する処理、そして実際の弾の移動をやっていくよ。張り切っていこう!

n88_kaede.gif
はーい!


~まずするべきことは?

n88_reon.gif
さてさて。弾の処理を作る前にするべきことがあります。それはなんでしょう?

n88_kaede.gif
はーい! 弾の変数を用意して初期化し、そして弾の画像を読み込んでおくことでーす!

n88_reon.gif
それでは、まずは弾の変数の定義からやっていこうー!
''メイン関数 の前あたりに、次の文を書いてね。

abdx1910c01.JPG

n88_kaede.gif
新しい配列変数、bVX()とbVY()が登場しましたね。これはどんな役割をする変数なんですか?

n88_reon.gif
うん。この二つは、弾の移動量を保存しておく変数だよ。bVX()がX(横)方向、bVY()がY(縦)方向。この分だけ、弾を動かすようにするんだ。

n88_kaede.gif
なるほどー。

n88_reon.gif
bFlag()はその弾が存在しているかどうかを表す変数、bX()、bY()が位置を表す変数だよ。

n88_kaede.gif
hnbBalletは、弾の画像のハンドルが入る変数ですよね。

n88_reon.gif
その通り。そして、BALLETSは弾の数を表す定数だよ。では続いて、弾の初期化をする関数を作っていこう!
こちらだよ。

abdx1910c02.JPG

n88_kaede.gif
そんなに難しくないですね。

n88_reon.gif
そうだね。For~Nextで回して、配列変数bFlag()に0を入れてるだけだからね。
あ、そうだ。敵キャラの情報を初期化するサブプロシージャも作らないとね。こちらだよ。

abdx1910c03.JPG

n88_reon.gif
では、これらを呼び出す命令も入れていこう。サブプロシージャStageInitの中にこれを書いてね。

abdx1910c04.JPG

abdx1910l01.JPG
↑入れた後のStageInitはこうなります。(赤枠が追加した文)

n88_reon.gif

続いて、画像を読み込む部分も書いていこうか。サブプロシージャMaterialLoadにこれを追加して。


abdx1910c05.JPG

abdx1910l02.JPG
↑入れた後のMaterialLoadはこうなります。(赤枠が追加した文)

n88_reon.gif
さて、ここまでできたら準備はOK! いよいよ本番だよ!

n88_kaede.gif
はーい!


~弾を作るために必要なものは?

n88_reon.gif
さて、弾を作る処理を作る前に、一つ作らなければならない処理があります。それはなんでしょう?

n88_kaede.gif
うーん、なんでしょうか? わからないですー。

n88_reon.gif
くすくす。それは、弾を撃つ敵機と自機との角度を求めることと、その角度を元に移動量を計算することでーす。
ということで、まずは角度を計算する関数を作ろう。まずは、次のファイルをダウンロードして、解凍したAtan2.dllをプログラムのフォルダに入れてね。


n88_reon.gif
それが済んだら、次の行をプログラムの一行目に追加してください。

abdx1910c06.JPG

n88_reon.gif
それができたら、いよいよ関数を作っていきましょう! こちらです!

abdx1910c07.JPG

n88_reon.gif
まず、最初に追加したDeclareから始まる文は、ActiveBasicに、Atan2.Dllの中に入っている_Atan2という関数を使いますよ、と教えている文だよ。これを書くことによって、この関数を使えるようになるの。

n88_kaede.gif
ふむふむ。

n88_reon.gif
そして関数の中身だけど、ちょっと難しいから細かいことは省略するね。やっていることは、自機と敵機の間の角度を求めている、というもの。なお、求めているのは普通の角度ではなくてラジアンだよ。

n88_kaede.gif
ラジアン?

n88_reon.gif
ラジアンというのは、(180÷π)度を1ラジアンとする、特別な角度の単位で、コンピュータの世界ではよく使われるんだよ。さて、続いて、弾を作る処理をやっていこうか。まずは、空いている弾を探す関数ね。

abdx1910c08.JPG

n88_reon.gif
これについて難しくないよね。今までやってきたのと同じだから。

n88_kaede.gif
はいっ。

n88_reon.gif
それでは続いて、弾を作る処理です!

abdx1910c09.JPG

n88_reon.gif
ここは、基本的には、敵やショットを作るときと同じ。弾の位置を決める方法が違うのと、移動量を決めているのが違いだね。

n88_kaede.gif
弾の位置を決める時には、どうして16を足して、5を引く、というようなことをしてるんですか?

n88_reon.gif
それは、弾の初期位置が敵の中心にしているのと、そしてdxDrawGraphを使うとき、指定するのは画像の左上隅の座標だからだよ。敵の画像サイズは32×32だから、その半分の16を足して、敵の中心の位置を計算して、そこから弾のサイズの10の半分である5を引いて、弾の左上の座標を計算してるんだ。
Angle関数の中で、敵の位置に16を足しているのも同じ理由だし、自機の位置に数値を足してるのも同じ。

n88_kaede.gif
なるほどー。

n88_reon.gif
さて、そしたら後は弾の処理だね。まずは弾の移動!

abdx1910c10.JPG

n88_reon.gif
弾は、いろんな方向に飛ぶから、ここでは上下左右について、画面外に出たかどうかをチェックしているよ。そして出たら弾を消している、と。では続いて、弾の描画処理です!

abdx1910c11.JPG

n88_reon.gif
そして、これらの処理を呼び出すBalletMainサブプロシージャです!

abdx1910c12.JPG

n88_reon.gif
そして、弾を発射するコードを、MoveEnemyサブプロシージャ内に書きましょう!
配列関数eTimeCnt()を1ずつ増やしていき、eFireTime()と同じ値になったら、BalletCreateサブプロシージャを呼び出して、eTimeCnt()を0にする、ということをしているよ。

abdx1910c13.JPG
↑処理を追加した後のMoveEnemyはこうなります。(赤枠が追加した部分)

n88_reon.gif
そして、後は、GameMainサブプロシージャに次の一行を書き加えればOKだよ。できたら実行してみてね。

abdx1910c14.JPG

abdx1910l03.JPG
↑入れた後のGameMainはこうなります。(赤枠が追加した文)

n88_kaede.gif
おー! 敵が弾を撃ってくるようになりましたよ!




n88_reon.gif
それでは、今回はここまで。次回は自機と敵、自機と敵弾、敵とショットの当たり判定を作っていくよ! また次回!

n88_reon.gif
そうそう、今回から、その回までのソースファイルを公開することにしたよ。こちらからダウンロードしてね!


==========

※次の更新は、『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!