2018年05月21日

どっちのゲームSHOW!~ワルキューレの冒険vsドルアーガの塔

※本記事では、それぞれのゲームの紹介のために、ゲームの画像を引用させていただいております。
 ここに掲載されている画像は、問題があれば削除いたします。
 また、ここに掲載されている画像の二次使用を禁じます。

do-1805-00a.png

do-1805-00b.png

 どもども、ゲムぐち博と申しますー。いやはや、だいぶ前の話ですが、復活しましたねー。『どっちの料@ショー』。
 わたくし、ゲムぐちも好きな番組だったので、とても嬉しいです。
 そこで今回は、2つの似たジャンルのゲームを、『どっちの料@ショー』風に比較・紹介してみたいと思います。
 今回のお題は、アクションRPG対決! かたや、『ワルキューレの冒険』、かたや、『ドルアーガの塔』。
 「両方とも同じナムコ」とか、「ドルアーガの塔はアクションRPGとは違うんじゃないか」と思われるかもしれませんが、まぁ気にしない方向で。ではいってみましょう!

☆This is ワルキューレ(の冒険)☆
 さて、ワルキューレの冒険は、アクションRPGです。プレイヤーはワルキューレを操作し、敵を倒して経験値を稼ぎレベルを上げ、重要アイテムを見つけて、フィールドを駆けまわって目的の達成を目指すのです。

do-1805-01.png
▲ ワルキューレの冒険は、スタンダードなアクションRPGだ!

 そうそう、魔法も使うことができます。魔法には、攻撃の魔法や回復の魔法など、基本的な魔法が一通りそろっていますよ。

☆これがドルアーガの塔だ☆
 さて、ドルアーガの塔は、アクションRPGというよりも、アクションRPGっぽいアクションと言ったほうがいいかもしれません。

do-1805-04.png
▲ ドルアーガの塔は、アクションRPGっぽいアクションだ

 プレイヤーは、基本的に鍵をとって扉を開け、上の階へと進んでいき、最上階のボス打倒を目指します。
 では、どこがRPGっぽいかと言いますと、このゲームにもアイテムが存在し、そのアイテムを装備すると、攻撃力が上がったり生命力が上がったりなどと、キャラクターの能力が上昇するのです。(体力や攻撃力といった能力値は隠しパラメータ扱い)
 しかも、一部の装備は、取ることによってキャラクターの姿も変わるので、強くなるのが目に見えるのです。

☆今回の特選ポイント@ワルキューレの冒険☆
さて、ではまずはワルキューレの冒険のポイントについて説明していきましょう。

(実はキャラメイクがある)
 ゲームを開始すると、まずこのような画面が出ます

do-1805-02.png
▲ ごく単純な、星座と血液型、色の選択画面だが……。

 実は、ここで選んだ星座や血液型によって、主人公の能力値が変わるのです! つまり、このワルキューレの冒険には、隠しながらもキャラクターメイキングの要素があるのです!
 ドラクエ1も、名前によって能力値や成長パターンが変わりますが、ナムコも負けてはいないという感じです。
 そして次!

do-1805-03.png
▲ 夜になる!

 このように、ワルキューレの冒険では、歩き回って時間がたつと、夜になるのです!
 夜になると、通常より強い敵が出現するようになります。
 時間の要素を取り入れたドラクエ3が発売されたのは1988年ですから、それより2年も前にその要素を取り入れていたことになるわけです。すごい!
 また、町の人はおらず、またアイテムは目に見えない(ある魔法を覚えると、使うことで見えるようになるが)ので、手探りで見つけて行かなくてはなりませんでした。今となっては不親切にうつるかもしれませんが、逆にこれが手探りで探していく感じとなり、より達成感を強くしていた、というような気がします。

☆今月の特選ポイント@ドルアーガの塔☆
 さて、対するドルアーガの塔の特選ポイントですが、それはなんといってもアイテムでしょう。
 このゲームでは、あることをすると(グリーンスライムをある数倒したり、ある地点を通過したりなど)、宝箱が出現し、それをとることでアイテムをゲットできるのですが……

do-1805-05.png
▲ あることをすると宝箱出現!

 この宝箱の出し方も、アイテムの効果とあわせてシークレットであり、やはりプレイヤーたちは手探りで進めて行っていました。それゆえに出すことができたときの達成感は強いものとなり、この難解さが、ゲーマーたちのハートに火をつけることになったのです。
 また、ドルアーガの塔は、アクション性も高い作品でした。魔法使い系の出す魔法は盾で防ぐことができるのですが、その魔法の飛んでくる方向にむかなければならず、さらに剣を抜いたときは、盾の向きも変わるので(例えば、正面(下)を向いてるときに剣を出すと、盾は右に向く)、それを考慮する必要があるのです。

☆楽しい応援団@ワルキューレの冒険☆
 さて、続いては、各ゲームの続編・リメイクなどを紹介していきましょう。
 まずはワルキューレの冒険から。
 リメイクとしては、ナムコアンソロジー2に収録されたアレンジ版があります。こちらは、後述する『ワルキューレの伝説』に似た、アクション性の強いものとなっております。

do-1805-06.jpg
▲ PSに生まれ変わったワルキューレの冒険

 そして続編は先ほど話したワルキューレの伝説があります。こちらは、ジャンプで足場から足場へ飛び移ったり、ショットで敵を攻撃したりと、RPGというよりはアクションに近くなっています

do-1805-07.jpg
▲ アクションゲームとなった続編・ワルキューレの伝説

☆楽しい応援団@ドルアーガの塔☆
 対するドルアーガの塔は、ワルキューレの冒険に比べて、多くのリメイク作、続編が出ています。
 まずはリメイク版。それはなんといっても、PCエンジン版があげられるでしょう。

do-1805-08.jpg
▲ リメイク作の代表・PCエンジン版

 能力の成長や装備の変更などのRPG要素を取り入れ、宝箱の出現条件を易しく変え、さらに塔の形状を円形に近い正方形にするなど、まさに原作者の遠藤氏をして、「自分の理想に一番近いドルアーガ」と言わしめた一品です。

 続編のほうも、さらにRPG色が強くなり、二人同時プレイが可能になった『イシターの復活』、さらにスーパーファミコンで発売されたアドベンチャーソフト『ブルークリスタルロッド』があります。

do-1805-09.jpg
▲ ブルークリスタルロッド

 また、続編というよりは前日談ですが、ドルアーガの塔では、囚われの身となっているヒロイン・カイを操作するジャンプ・アクション、『カイの冒険』というのもありました。
 こちらは、アクションゲームとしてはかなり練り込まれており、さらにミスしたとき、触れた敵はいなくなるといったユーザーフレンドリーなシステムもあって、とても面白いものになっていました。

do-1805-10.png
▲ 前日談・カイの冒険

☆あなたが好きなのは、どっち!?☆
 さて、ここまで『ワルキューレの冒険』と『ドルアーガの塔』の二本を『料理@ョー』よろしく比較説明してきましたが、どうでしたでしょうか?
 比較はしたけれど、どちらも面白いゲームなので、ぜひプレイしてみてほしいと思います。

 さて、このコーナーですが、好評であればまた第二弾をお送りしたいと思っております。
 そのときをお楽しみに!

※次の更新は、5月24日。『ラジオをモバイルに』の予定です。お楽しみに!
posted by 裏編 at 09:20| Comment(0) | その他のゲーム情報 | このブログの読者になる | 更新情報をチェックする

2018年05月17日

LGP講座(かり~第9回 キャラクターを移動させてみよう!

yuu_bustup.jpg
優:こ、こんにちは。柊優です……。今月も、LGP講座(かり、は、はじまるよ……。

airi_bustup.jpg
愛梨:こんにちはー! 結城愛梨です! 今日も張り切って、LGPについて勉強しちゃうぞー!

haruka_bustup.jpg
陽香:うふふ、こんにちは。永乃原陽香です。今月もよろしくお願いしますね。さて、それじゃ愛梨ちゃん。さっそく次のプログラムを入力してみてください。

----------
X = 100
Y = 100

SCR = G@SETUP(640, 480, 32, 1)
BACK=G@CHRLOAD("back.bmp")
BAL=G@CHRLOAD("baroon2.bmp")

LOOP
  G@CHRCLEAR(SCR)
  G@CHRRECT(SCR, 0, 0)
  G@CHRCOPYF(BACK,SCR)
  G@CHRRECT(SCR, X, Y, X + 64, Y + 64)
  G@CHRCOPYF(BAL, SCR)
  G@FLIP()
ENDLOOP
----------

airi_bustup.jpg
はーい。かたかたかた……。実行したら、前回と同じように、山の背景に、風船が表示されたよっ。

haruka_bustup.jpg
さて、前回のプログラムと見比べて、何か気づきませんか?

airi_bustup.jpg
あっ! 変数が二つあるのと、二番目のCHRRECTのところに、その変数が使われてる!

----------
(前回)
G@CHRRECT(SCR, 100, 100, 164, 164)

(今回)
G@CHRRECT(SCR, X, Y, X + 64, Y + 64)
----------

yuu_bustup.jpg
うん、正解……。このように、CHRRECT命令では、書く位置(座標)に変数を使うことができるんだ……。

haruka_bustup.jpg
その場合、LGPはその変数の内容に従って、CHRRECT命令を実行してくるんですよ。今回の場合は、Xに100、Yに100が入っていたから、(100,100)の位置から(164, 164)の位置までの四角形に収まるように風船を描いてくれたわけです。

airi_bustup.jpg
そうかー、なるほどー。

haruka_bustup.jpg
さて問題です。変数は、その内容の数を足したり引いたりかけたり割ったりできましたよね。ということは?

airi_bustup.jpg
あっ! その位置を表す変数を足したり引いたりすれば、絵を動かすことができるんじゃないの!?

yuu_bustup.jpg
うん、そのとおりだよ……。例えばこれは、風船を左から右に移動させるプログラム。

----------
X = 0
Y = 150

SCR = G@SETUP(640, 480, 32, 1)
BACK=G@CHRLOAD("back.bmp")
BAL=G@CHRLOAD("baroon2.bmp")

LOOP
  G@CHRCLEAR(SCR)
  G@CHRRECT(SCR, 0, 0)
  G@CHRCOPYF(BACK,SCR)
  G@CHRRECT(SCR, X, Y, X + 64, Y + 64)
  G@CHRCOPYF(BAL, SCR)
  G@FLIP()

X = X + 2

IF X > 576 THEN
BREAK
ENDIF

S@SLEEP(1000 / 60)

ENDLOOP
----------

yuu_bustup.jpg
このプログラムでは、表示した後に、横の位置を表す変数Xの値を2ずつ増やすことで、風船のキャラクターの位置を右にずらしているんだ……。それで、右に移動するわけだね……。

airi_bustup.jpg
IF文でXが576より大きくなったらBREAKで繰り返しを抜けているってことは、横位置が576より大きくなったら、それで終わりにしてるってことじゃないかな?

haruka_bustup.jpg
はい、そのとおりです。画面の右端は640ですから、そこから風船のサイズ64を引いた576より風船が右に行ったら終わらせてるわけですね。
そうそう。S@SLEEPは、指定した時間だけ、実行を止める命令です。このプログラムでは、これを使ってスピードを調整しているわけです。

yuu_bustup.jpg
この変数を操作して絵を動かすテクニックと、キー入力をうまく組み合わせれば、キャラクターをキー入力で動かせるようにもできるよ……。例えば、上を押したら、縦位置を表す変数から2を引いたりとかね。色々勉強してみて……。

airi_bustup.jpg
はーいっ。

yuu_bustup.jpg
それじゃ、今日はここまで……。次回はいよいよ最終回。LGPで音楽や効果音を鳴らす方法について説明していくよ……。

airi_bustup.jpg
次でラストかぁ。よーし、がんばるぞーっ。

haruka_bustup.jpg
それでは、また次回まで、ごきげんよう。

※次の更新は、5月21日。『どっちのゲームSHOW!『ワルキューレの冒険』vs『ドルアーガの塔』』の予定です。お楽しみに!
posted by 裏編 at 07:30| Comment(0) | LGP講座(かり | このブログの読者になる | 更新情報をチェックする

2018年05月16日

[Windows用(99BASIC)]宝さがし少年ゲーム

【投稿者:99くん】

*このゲームについて*
昔のベーマガにあった、『万引き少年ゲーム』を移植してみました。
それにあたり、万引きはよくないので、『宝探し』に改名しましたw

*操作方法*
カーソルキーで少年を動かし、宝石を取っていきます。
部屋の上を敵がうろついており(ゲームが進むと、下にも敵が現れます)、見つかると一発でゲームオーバーです。
見つかるのは、縦の通路になっているところで、敵と自分がX軸が同じになったときです。
全ての宝石を取ると、次の面に進んでいきます。

*プログラムリスト*
96 REM *******************
97 REM 宝探し少年ゲーム
98 REM PROGRAM BY 99-Kun
99 REM *******************
100 REM ***** キャラジェネルーチンを呼びます
110 GOSUB *CHRGEN
120 REM ***** タイトル前の初期設定だよー
130 *TITLEINIT
140 RANDOMIZE:HISCORE=0
150 REM ***** タイトルを書きますー
152 CLS 3
155 LOCATE @2, 0, 0, 0
157 LOCATE @2, 0,14:PRINT @2,STRING$(22,"d")
160 LOCATE @2,11,13:PRINT @2,"ddddddddd"
170 LOCATE @2,11,12:PRINT @2," ddddddd "
180 LOCATE @2,11,11:PRINT @2," ddddd "
190 LOCATE @2,11,10:PRINT @2," ddd "
200 LOCATE @2,11, 9:PRINT @2," c "
205 LOCATE @2,10,13:PRINT @2,"b"
210 LOCATE @2, 7,13:PRINT @2,"a"
220 LOCATE @2, 0,11:PRINT @2,"ヨーシ、ガンバルゾ!"
230 LOCATE @2, 0, 7:PRINT @2,"スペースカトリガーヲオシテ!"
240 LOCATE @2, 0, 0:PRINT @2,"タカラサガシ ショウネン GAME"
242 LOCATE @2, 0, 2:PRINT @2,USING "SC ######";SCORE
244 LOCATE @2, 0, 3:PRINT @2,USING "HI-SC ######";HISCORE
250 IF STRIG(0) THEN ST=0:GOTO 280
260 IF STRIG(1) THEN ST=1:GOTO 280
270 GOTO 250
280 REM *** 開始時の初期設定でーす
290 SCORE=0:SHOP=1
300 REM *** 画面を作るよー
305 *STAGEINIT
310 TR=66:TM=1500:CLS 3
320 LOCATE @2, 0, 0:PRINT @2,USING "S ######";SCORE
330 LOCATE @2, 9, 0:PRINT @2,USING "H ######";HISCORE
340 LOCATE @2, 0,14:PRINT @2,USING "RE ##";SHOP
345 LOCATE @2, 9,14:PRINT @2,USING "TM ####";TM
350 LOCATE @2, 0, 1:PRINT @2,STRING$(21,"d")
360 LOCATE @2, 0,13:PRINT @2,STRING$(21,"d")
361 LOCATE @2, 0, 2:PRINT @2,"d"
362 LOCATE @2,20, 2:PRINT @2,"d"
363 LOCATE @2, 0, 7:PRINT @2,"dc"
364 LOCATE @2,19, 7:PRINT @2,"cd"
365 LOCATE @2, 0,12:PRINT @2,"d"
366 LOCATE @2,20,12:PRINT @2,"d"
370 FOR DY=3 TO 6
380 ::LOCATE @2,0,DY:PRINT @2,"dc cdc cdc cdc cd"
390 NEXT
400 FOR DY=8 TO 11
410 ::LOCATE @2,0,DY:PRINT @2,"dc cdc cdc cdc cd"
420 NEXT
430 REM *** 自分と敵の位置設定と配置
440 MX=12:MY=7
450 EX(0)=2:EY(0)=2:VEX(0)=+1
460 LOCATE @2,MX,MY:PRINT @2,"a"
470 LOCATE @2,EX(0),EY(0):PRINT @2,"b"
480 IF SHOP<=5 THEN GOTO *HONTAI
490 EX(1)=18:EY(1)=12:VEX(1)=-1
500 LOCATE @2,EX(1),EY(1):PRINT @2,"b"
510 REM *** ゲーム本体!
520 *HONTAI
530 LOCATE @2,MX,MY:PRINT @2," "
540 VX=0:VY=0:DI=STICK(ST)
550 IF DI=1 THEN VX= 0:VY=-1
560 IF DI=3 THEN VX= 1:VY= 0
570 IF DI=5 THEN VX= 0:VY= 1
580 IF DI=7 THEN VX=-1:VY= 0
590 REM *** 障害物があるかどうかの判定
600 SR$=SCRN$(@2,MX+VX,MY+VY,1)
610 IF SR$="d" THEN VX=0:VY=0
615 IF SR$="e" THEN VX=0:VY=0
620 IF SR$<>"c" THEN GOTO 630
622 IF DI=3 OR DI=7 THEN GOTO *TAKARAGET ELSE VX=0:VY=0
630 IF MY+VY<3 THEN VY=0
640 IF MY+VY>11 THEN VY=0
650 MX=MX+VX:MY=MY+VY
660 LOCATE @2,MX,MY:PRINT @2,"a"
670 REM *** 見つかったかどうかのチェック
680 IF MX<>2 AND MX<>3 AND MX<>7 AND MX<>8 AND MX<>12 AND MX<>13 AND MX<>17 AND MX<>18 THEN 700
690 ::IF MX=EX(0) OR (SHOP>5 AND MX=EX(1)) THEN GOTO *GAMEEND1
700 REM *** 敵の移動だよ!
710 J=0
720 IF SHOP>5 THEN J=1
730 FOR M=0 TO J
735 ::IF SHOP>10 THEN W1=2:GOTO 750
740 ::W1=((5-((SHOP-1) MOD 5))+1)*2
750 ::IF W0(M)10 THEN D3=60
790 ::IF D1>=20 THEN GOTO 800
795 ::IF D2=20 THEN VEX(M)=-VEX(M)
805 ::EX(M)=EX(M)+VEX(M)
810 ::LOCATE @2,EX(M),EY(M):PRINT @2,"b"
820 ::REM *** 見つけたかどうかのチェック
830 ::IF EX(M)<>2 AND EX(M)<>3 AND EX(M)<>7 AND EX(M)<>8 AND EX(M)<>12 AND EX(M)<>13 AND EX(M)<>17 AND EX(M)<>18 AND EX(M)<>22 AND EX(M)<>23 THEN 850
840 ::IF MX=EX(M) OR (SHOP>5 AND MX=EX(M)) THEN GOTO *GAMEEND1
850 NEXT
860 WAIT 100
870 TM=TM-1
880 LOCATE @2, 9,14:PRINT @2,USING "TM ####";TM
890 IF TM<=0 THEN GOTO *GAMEEND2
900 GOTO *HONTAI
910 REM *** GAME OVER!
920 *GAMEEND1
930 LOCATE @2, 5, 5:PRINT @2,"ギャー!"
940 LOCATE @2, 0, 6:PRINT @2,"ザンネン! アナタハタベラレテシマイマシタ"
960 WAIT 2000
970 GOTO 152
980 *GAMEEND2
990 LOCATE @2, 5, 5:PRINT @2,"ナンテコッタ!"
1000 LOCATE @2, 0, 6:PRINT @2,"ザンネン! ジカンギレデス"
1010 LOCATE @2, 0, 7:PRINT @2,"アナタハ ヘヤニトジコメラレテシマイマシタ"
1030 WAIT 2000
1040 GOTO 152
1050 REM *** 宝を取ったよ!
1060 *TAKARAGET
1070 PLAY "L64O4DB"
1080 GX=MX+VX:GY=MY+VY
1090 VX=0:VY=0
1100 LOCATE @2,GX,GY:PRINT @2,"e"
1110 SCORE=SCORE+10:TR=TR-1
1120 IF SCORE>HISCORE THEN HISCORE=SCORE
1130 LOCATE @2, 0, 0:PRINT @2,USING "S ######";SCORE
1140 LOCATE @2, 9, 0:PRINT @2,USING "H ######";HISCORE
1150 IF TR>0 THEN GOTO *HONTAI
1160 REM *** 遺跡クリア!
1170 LOCATE @2, 0, 4:PRINT @2,"RELICS CLEAR!"
1175 LOCATE @2, 0, 5:PRINT @2,USING "BONUS ######";((TM\10)*10)*2
1180 LOCATE @2, 0, 7:PRINT @2,"GO TO NEXT RELICS!"
1190 SCORE=SCORE+(((TM\10)*10)*2)
1200 IF SCORE>HISCORE THEN HISCORE=SCORE
1210 LOCATE @2, 0, 0:PRINT @2,USING "S ######";SCORE
1220 LOCATE @2, 9, 0:PRINT @2,USING "H ######";HISCORE
1230 WAIT 2000
1240 SHOP=SHOP+1
1250 GOTO *STAGEINIT
5000 REM * キャラジェネルーチン
5010 *CHRGEN
5020 SCREEN 3:CLS 3:WIDTH 46,16
5030 REM **キャラの元絵を描画する
5031 REM *4キャラ分
5032 FOR DG=0 TO 4
5040 ::REM *今回のキャラデータの開始位置は不定なんだよ
5050 ::ON DG+1 GOTO 5060,5070,5080,5090,5100
5060 ::::RESTORE 10000:GOTO 5110:REM *** 自分(a)
5070 ::::RESTORE 11000:GOTO 5110:REM *** モンスター(b)
5080 ::::RESTORE 12000:GOTO 5110:REM *** 宝(c)
5090 ::::RESTORE 13000:GOTO 5110:REM *** 壁(d)
5100 ::::RESTORE 14000:REM *** 台座(e)
5110 ::REM *縦16ドット
5120 ::FOR DY=1 TO 16
5130 ::::REM *一行分のデータを読みます
5140 ::::READ DL$
5150 ::::REM *横16ドット
5160 ::::FOR DX=1 TO 16
5170 ::::::REM *読み込んだデータから、該当する横位置の色データを取り込みます
5180 ::::::DC$=MID$(DL$,DX,1)
5190 ::::::DC=VAL(DC$)
5200 ::::::REM *ドットを描画
5210 ::::::PSET (DX,DY),DC
5220 ::::NEXT
5230 ::NEXT
5240 ::REM **描画した絵を「a」のキャラジェネに取り込む
5250 ::COPY @3,(1,1) TO CHRGEN$(97+DG)
5260 ::REM **画面をきれいにしてNEXT
5270 ::CLS 3
5280 NEXT
5290 RETURN

9998 REM ***** キャラジェネ・データ
9999 REM ***** 自分(a)
10000 DATA 0000000000000000
10010 DATA 0000000770000000
10020 DATA 0000007777007700
10030 DATA 0000007777007700
10040 DATA 0000000770007700
10050 DATA 0077777777777700
10060 DATA 0077777777777700
10070 DATA 0077007777000000
10080 DATA 0077007777000000
10090 DATA 0077007777000000
10100 DATA 0000007777777000
10110 DATA 0000007777777000
10120 DATA 0000007700077000
10130 DATA 0007777700077000
10140 DATA 0007777700077000
10150 DATA 0000000000000000
10999 REM ***** モンスター(b)
11000 DATA 0000000000000000
11010 DATA 0000000220000000
11020 DATA 0000002222000000
11030 DATA 0000022222200000
11040 DATA 0000262222620000
11050 DATA 0000226226220000
11060 DATA 0000222222220000
11070 DATA 0000022222200000
11080 DATA 0000002222000000
11090 DATA 0000000220000000
11100 DATA 0000000770000700
11110 DATA 0000000770007000
11120 DATA 0070007007770000
11130 DATA 0007070000000000
11140 DATA 0000700000000000
11150 DATA 0000000000000000
11999 REM ***** 宝(c)
12000 DATA 0000000660000000
12010 DATA 0000006666000000
12020 DATA 0000066766600000
12030 DATA 0000667766660000
12040 DATA 0000677666660000
12050 DATA 0000666666660000
12060 DATA 0000666666660000
12070 DATA 0000666666660000
12080 DATA 0000666666660000
12090 DATA 0000666666660000
12100 DATA 0000066666600000
12110 DATA 0000006666000000
12120 DATA 0000000660000000
12130 DATA 0000044444400000
12140 DATA 0000444444440000
12150 DATA 0004444444444000
12999 REM ***** 壁(d)
13000 DATA 2222722222272222
13010 DATA 2222722222272222
13020 DATA 2222722222272222
13030 DATA 2222722222272222
13040 DATA 2222722222272222
13050 DATA 7777777777777777
13060 DATA 2222222722222222
13070 DATA 2222222722222222
13080 DATA 2222222722222222
13090 DATA 2222222722222222
13100 DATA 7777777777777777
13110 DATA 2222722222272222
13120 DATA 2222722222272222
13130 DATA 2222722222272222
13140 DATA 2222722222272222
13150 DATA 2222722222272222
13999 REM ***** 台座(e)
14000 DATA 0000000000000000
14010 DATA 0000000000000000
14020 DATA 0000000000000000
14030 DATA 0000000000000000
14040 DATA 0000000000000000
14050 DATA 0000000000000000
14060 DATA 0000000000000000
14070 DATA 0000000000000000
14080 DATA 0000000000000000
14090 DATA 0000000000000000
14100 DATA 0000000000000000
14110 DATA 0000000000000000
14120 DATA 0000000000000000
14130 DATA 0000044444400000
14140 DATA 0000444444440000
14150 DATA 0004444444444000

*ゲーム画面*
toko-1805-01-1.JPG
toko-1805-01-2.JPG
posted by 裏編 at 14:28| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2018年05月14日

師匠TのチャレンジARSゲーム!~第八回:『Orgel』 【2004年・abc男】

※ここに掲載された画像は、問題があれば削除いたします。

chare1805-01.JPG

うむ! 師匠Tである!
今回はフリーのアドベンチャーゲームを紹介するぞ!
今月のお題は、『Orgel』。キャラクターを動かして、館の中のいろいろなものを調べたりして、謎を解いていくというゲームじゃ。
操作はシンプルながらも、謎はほどよい難しさを保っており、とても面白いゲームじゃ。
わしの腕もなるわい。

それではいくぞ。 準備はよいか?

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

【本編】

chare1805-02.JPG
あるタクシーの中。主人公の男の告白。
全てはここから始まるのじゃ……。。

chare1805-03.JPG
館の中の最初の場面じゃ。
左のほうに行けば帰ることができるが……
たわけめ、我が流派は制圧前進あるのみ! 撤退などありえぬわ!
まずは、部屋の中を調べてみるとしようか。

chare1805-04.JPG
まずはバスルームじゃ。
見たところ、これといったものはなさそうじゃのう。

chare1805-05.JPG
つづいて食堂。2Fへの階段があるぞ。
この階をもう少し調べてみるか、それとも2Fに上がってみるか……。

chare1805-06.JPG
2Fに上がると、そこには絵が飾られておった。
そのうちの一つは取り外せるようじゃが……?

chare1805-07.JPG
個室じゃ。ここの本棚の新聞のスクラップには、ある大量殺人事件の記事が。
うぬぬ……。いくら犯人が死刑にされるとはいえ、その悪行には怒りを禁じえぬわい。

chare1805-08.JPG
この部屋では、なぞなぞをかけられる。
その答えはいったい……?

chare1805-09.JPG
ピアノのある部屋。
このピアノにも、謎があるようじゃが……。

さて、この先どうなるかは……。

ここから先は、キミ自身の目で見届けるのじゃ。
健闘を祈っておるぞ!


※このゲームの著作権は、abc男 氏にあります。ここに掲載されている画像の二次使用を禁じます。

※次の更新は、5月17日。『LGP講座(かり』の予定です。お楽しみに!

posted by 裏編 at 15:21| Comment(0) | チャレンジARS | このブログの読者になる | 更新情報をチェックする

2018年05月10日

師匠のJava道場~第9回・クラスを継承するのじゃ!

師匠T:さて、今回はクラスについての話第二弾、継承について話すとするぞ。準備はよいか?

弟子D:はい、師匠! でも、クラスについての話であれば、前回にすればよかったような。

師匠T:筆者が勉強したのは、クラス→キャスト→継承の順番だったのじゃ、仕方なかろう。

弟子D:わかったような、わからんような。

師匠T:無理やりわかれ。では始めるぞ!

▽継承とはなんぞや?▽

師匠T:例えば、ゲームを作るときのことを考えてみよ。自機や敵に共通して、移動の処理があるが、二つのクラスそれぞれに移動の処理を書いていたら大変じゃの。

弟子D:そういえばそうですね。

師匠T:そんなとき、移動の処理を持つ共通のクラスを作り、それから自機や敵のクラスを作れば、移動させるときには、その処理を呼び出せばいいので楽ではないか?

弟子D:おぉ、それは確かにっ。

師匠T:これが継承の利点じゃ。そして話が前後してしまったが、継承とは、あるクラスを基にして別なクラスを作ることを言う。

弟子D:ガンダムで例えるなら、ザクを基にして、ザクキャノンや高機動型ザク、サイコミュ高機動試験型ザクを作るようなものですね!

師匠T:なぜおぬしがザクキャノンや高機動型ザクはまだしも、ビショップ(=サイコミュ高機動試験型ザク)のような、マニアックなMSのことを知っているかは置いといて、見事な例えじゃな、まさにその通りじゃ。

弟子D:師匠がビショップの名前を知っているのも十分謎ですが……。

師匠T:気にするな。さて、次は継承のやり方について説明することにするぞ!

▽継承のやり方じゃ!▽

師匠T:継承のやり方じゃが、とても簡単。クラス名の宣言のあとに、こうつければいいだけじゃ。

----------
extends [スーパークラス名]

例:
public ZakuCannon extends Zaku
----------

師匠T:前々回説明した通り、スーパークラスとは、あるクラスの基になったクラス、サブクラスとは、あるクラスを基にして作られたクラスを言う。例えば、ZakuクラスからZakuCannonクラスを作った場合、ZakuクラスはZakuCannonのスーパークラス、ZakuCannonクラスは、Zakuクラスのサブクラス、となるわけじゃ。

弟子D:ふむふむ。

師匠T:さてさて。継承してクラスを作った場合、スーパークラスのメソッドやフィールドは、private宣言されているものを除いて、全て継承される。例えば、前々回作ったZakuクラスからZakuCannonクラスを作った場合、Zakuクラスに備え付けられていたfireメソッドも、ZakuCannonクラスは自動的に持つことになるのじゃ。

弟子D:なるほど。コンストラクタはどうなのでしょう?

師匠T:残念ながら、コンストラクタは継承されぬ。じゃが、スーパークラスのコンストラクタを利用する方法はあるので安心するがよい。

▽Objectクラスじゃ!▽

師匠T:さて、次はObjectクラスについて語るとしようぞ。

弟子D:確か前回も出てきましたね。あらゆるクラスの親になるクラスでしたっけ。

師匠T:うむ、そのとおりじゃ。よく覚えておったの。このObjectクラスは、継承について大きな意味を持つ。

弟子D:それはどのような?

師匠T:うむ。継承させずにクラスを作るとき、当然ながら、extendsはつけぬな?

弟子D:はい。

師匠T:そのような場合、Javaは内部で自動的に、『extends Object』と補完するようになっておるのじゃ。このことについて、わしら開発者側は意識することはないがの。

弟子D:なるほど、よくわかりました!

▽継承のさいの注意点じゃ!▽

師匠T:さて、続いては、継承のさいに気を付けることについて語るとするぞ。まず一つは、継承を行うさい、スーパークラスにできるのは一つだけ。二つのクラスから継承して、サブクラスを作ることはできぬのじゃ。
例えるなら、Zakuクラスと、Goufクラスから継承して、ZakuGoufクラスを作る、なんてことはできぬのじゃ。

弟子D:それでは、そのようなものを作りたいときはどうすれば?

師匠T:うむ。そのような場合には、インターフェースというものを使う。じゃが、これの説明はあとに回すとしよう。

弟子D:はい。それで、今一つは?

師匠T:うむ。これが、難しくも重大なポイントじゃ。『[引数を持たないコンストラクタ]を持たないスーパークラスを継承するさいには、注意が必要』ということじゃ。

弟子D:それはどのようなことなのでしょう?

師匠T:うむ。そのようなクラスを継承するさい、コンストラクタを作らずに継承した場合、Javaは、勝手に『引数を持たないコンストラクタ』を補完してしまう。じゃが、スーパークラスはそのコンストラクタを持たぬゆえ、ビルドエラーになってしまうのじゃ。

弟子D:むむむ、なんか難しいですね。

師匠T:まぁ、難しければ、『[引数を持たないコンストラクタ]を持たないクラスを継承する場合、サブクラスのほうで、そんなコンストラクタを作ること』と覚えておけば問題はなかろう。

弟子D:ううう、わかりました、師匠。

▽スーパークラスの変数への紐づけじゃ!▽

師匠T:さて、この話をするさいに、一つ前提として覚えておくことがある。オブジェクト型の変数というものは、String型と同じように、オブジェクト(=インスタンス)へのリンクが張られた存在、ということじゃ。

弟子D:例えば、Zakuクラスの変数oZakuは、中に本当にZakuクラスのインスタンスが入っているわけではなく、インスタンスは別の場所にあり、変数からそのインスタンスへのリンクが張られている、ということですか?

師匠T:うむ、そういうことじゃ。さて、例えば、ある変数に、それと同じクラスのインスタンスをリンクすることができる……これは当然じゃな?

----------
※ZakuCannonは、Zakuのサブクラスです。
ZakuCannon CharsZaku = new ZakuCannon(~);
----------

弟子D:はい、そうですね。

師匠T:じゃが、ある変数に、そのクラスのサブクラスのインスタンスをリンクさせる、ということもできるのじゃ!

----------
Zaku GarmasZaku = new ZakuCannon(~);
----------

弟子D:な、なんと! それはすごいです、師匠!

師匠T:うむ、じゃが、この使い方をした場合、いくつか制限がある。まず一つ、作られるインスタンスは、作る際に指定したクラスのもので、リンク先の変数のクラスには影響されない、ということじゃ。つまり、上の例でいえば、作られるのはZakuCannonクラスで、Zakuクラスにはならん、ということじゃな。

弟子D:ちょっと難しいですけど、考えれば当然の話ですね。

師匠T:そして二つ目。リンク先の変数のクラスにないメソッドやフィールドは使うことはできない、というものじゃ。例えば、ZakuCannonクラスにLongShotメソッドというメソッドがあっても、この場合は使うことができぬ、ということじゃ。

弟子D:ふむふむ。

師匠T:そして最後。両方のクラスに同じメソッドがあった場合、インスタンスのクラス側のメソッドが実行される、ということじゃ。

弟子D:なるほど!

▽コンストラクタの補完その他じゃ!▽

師匠T:では、今回の講座のラストじゃ。クラスを作る場合、コンストラクタを省略した場合は、デフォルトコンストラクタが補完される。

弟子D:師匠、デフォルトコンストラクタとはいかに?

師匠T:デフォルトコンストラクタとは、コンストラクタがない場合、Javaが自動的に作ってくれるコンストラクタのことじゃ。次のような構造となっている。

----------
[クラス名]()
{

}

例:
Zaku()
{

}
----------

弟子D:引数を何も持たず、中身もないんですね。なぜこのようなものを?

師匠T:うむ。それは、コンストラクタを作った場合、Javaが自動的に、super()という命令を補完して、スーパークラスのコンストラクタを呼び出すようにしてくれるからじゃ。(コンストラクタを作らず、Javaがデフォルトコンストラクタを作った場合も含む)じゃが、元々スーパークラスにコンストラクタがないと、困ったことになる。そこで、コンストラクタを作らなかった場合、自動的にJavaがデフォルトコンストラクタを用意してくれる、というわけなのじゃ。

弟子D:なるほど。

師匠T:なお、super()の記述は、Javaの補完に任せず、自分で書くこともできる。その場合、コンストラクタの最初の行に書く必要がある。よいかな?

弟子D:はい、師匠!

師匠T:うむ、ではいよいよ最後じゃ。先ほど話した、スーパークラスのメソッドやフィールドを使いたい場合。これにもsuperを使う。その方法はこうじゃ。

----------
super.[メソッド名orフィールド名]

例:
super.x = 5;
super.fire();
----------

弟子D:superのあとに、ピリオドで区切って、メソッド名やフィールド名を書けばいいんですね。わかりました!

師匠T:うむ。さて、次回は、抽象クラスについて語ることにするぞ。予習、復習を欠かしてはならぬ!

※次回の更新は、5月14日、『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!
posted by 裏編 at 07:31| Comment(0) | 師匠のJava道場 | このブログの読者になる | 更新情報をチェックする