コンピュータ38ページ目の日記です

目次

前のページ
2021-10-10 ネットワークHUB故障
2021-11-25 グノーシア
2021-11-30 i-mode終了
2021-12-22 Windows 11
2022-01-11 続・グノーシア
2022-01-27 node.jsの2つのイベント処理
2022-02-27 BABA IS YOU
2022-04-04 停電
2022-04-05 代入の評価順
2022-06-14 CAPCOM
ネットワークHUB故障  2021-10-10 11:16:29  コンピュータ

▲目次へ ⇒この記事のURL

昨夜のこと。

子どもたちが、「ネットに繋がらなくなった」と報告してきた。


自分でも確かめてみると、WiFi に接続できない。


こういうことは、2ヶ月に一度程度の頻度で起きる。

大抵はネットワークの上流で何かあったときで、5分も経てば自然に回復する。


ただ、なにか違う気がした。

いつもなら、「インターネットに接続できない」であり、「WiFiに接続できない」ではないのだ。


ここで、我が家のネットワーク構成なのだが、WiFi ステーションが2基ある。

1基では家の中すべてをカバーしきれないためだ。

居間と仕事部屋においてあり、これで家全体をカバーできる。


このときは居間にいて、自動的に電波の強い居間のステーションが選ばれていたのだけど、あえて仕事場のステーションに繋いでみる。

普通に繋がった。仕事場のステーションは外部につながるルーターも兼ねており、接続状況を確認できる。

問題なく外部に接続していた。接続できないのは、上流の問題ではなく、家の中の問題だ。


居間のステーションをリセットしてみるも、回復しない。

WiFi の電波は出ていて接続を試みるも、「DHCPに接続できない」と言われるのだ。


あらためて WiFi ステーションを確認するが、インジケーター LED の点灯が少ない気がする。

もっとも、普段それほど気にしていないので、普通の点灯状態を覚えていない。


まぁ、おそらくは WiFi ステーションが家のネットワークから切り離されている。

DHCP は家の中に1台しかないので、ネットワークから切り離されて見えなくなっているのだろう。


困ったな、ステーション壊れたかな…と思いつつ、ネットワーク全体の確認を行うため仕事部屋に向かう。

家の中の機器のほとんどは、仕事場に集約してあるから。


で、ひと目見た瞬間に原因がわかった。

家のネットワークの分岐の中心である HUB が、電源ランプが点滅し、すべての接続ランプが消えた状態だった。故障したのは HUB らしい。


先に書いたように、外部に接続するルーターを兼用している WiFi ステーションは、当然 HUB を経由せず外に接続できる。

そのため、仕事部屋の WiFi に接続すれば問題なくインターネットに接続できていたわけだ。


このステーションは、4ポートしかないが、HUB 機能を内蔵している。

そのため、外部公開しているサーバーも、このステーションに直接接続してある。

なので、外部公開サーバーの稼働はつづいていた、はず。




壊れた HUB は8ポートだったが、実際には使われていないケーブルも繋がっていた。

家の中の主要な部屋に LAN ポートを用意しているが、現在は WiFi を使うことが増えたため使っていない部屋が多いのだ。


現在使っていない 5ポートの HUB があったので、本当に必要な線を厳選して繋ぐことにした。

…以前は線に接続先の部屋を書いた紙をつけていたはずなのだが、いつの間にかなくなっている。適当に繋いで、接続ランプがつかないやつは使っていない部屋だろう。


刺しては「あたり」「はずれ」と判定する、黒ひげ危機一発のような状況。

幸い、5ポートで丁度足りた。


とはいえ、余裕がないのも困りそうなので、早速8ポートの HUB を Amazon に注文。

以前は 8ポートは高かったのだけど、いますごく安くなっているのね。


十分な機能のものが、1700円だった。

壊れたものは…多分10年以上使っていたと思うのだけど、1万円以上した気がする。


▲目次へ ⇒この記事のURL

別年同日の日記

04年 大型の勢力

16年 CentOS 7 上の ndjbdns の落とし穴

17年 オーラ写真倶楽部


申し訳ありませんが、現在意見投稿をできない状態にしています

グノーシア  2021-11-25 18:25:39  コンピュータ

▲目次へ ⇒この記事のURL

Nintendo Switch のゲーム、グノーシアを購入した。


発売したのは昨年の4月、そもそもこれは移植版で、最初に作られた PS Vita 版は2019年発売だそうだ。


しかし、数日前までこの作品の存在を知らなかった。

たまたま読んだ記事で紹介しており、「すごく面白そう」と思って早速購入、遊んでみたのだった。


購入は火曜日、勤労感謝の日だったのだが、その日に2時間ほど遊んだ後、仕事が忙しくて遊べていない。

しかし、子供たちが Switch に新しいゲームが入っていることに気づき、遊び始めて熱中している。


1人用のゲームなのだけど、周りで見ている人も参加できるようなものなので、他人のプレイでも口を出してしまうのだ。




先に書いたように古い作品なので、レビューは検索すればいくらでも出てくる。

だから詳細は書かないでおこう。そもそも、先に書いたように2時間しか遊んでいないので深い話は書けないし。


ゲーム内容は人狼だ。

あの「心理戦」を、コンピューター相手に行う。


人狼とか、人狼をモチーフにしたゲームはそこそこ遊んだことがあるが、嫌いじゃないけど面倒くさい、と思ってしまう。

心理戦だから人数が必要だし、人数が増えると時間がかかるし、長時間の心理戦は消耗する。



で、グノーシアはコンピューター相手の一人用ゲームなので、自分のペースで進められる。

1ゲーム 15分あれば終わるし、終わったらすぐに次のゲームが始まるのでテンポよく遊べる。


そして、1ゲーム終わるたびに、このゲームの世界の断片情報が、少しづつわかってくる。

ゲーム自体はランダム要素が強いのだが、ストーリーがあるのだ。


いや、ストーリーというよりも、一時期流行した言い回しだと「ナラティブ」ってやつだな。

語るのではなく、感じさせる世界観。




先にランダム要素が強いと書いたが、運ゲーという意味ではない。

毎回配役がランダムに決まる、というだけで、その後の心理戦は妥協がないのだ。


コンピューター相手なのに、心理戦がリアルに感じられる。

というのも、インタビュー記事などを読むと、内部に膨大なパラメーターを計算しているらしいのだ。


キャラクター間の仲の良さがあり、それとは別に誰がグノーシア(人狼に相当)か、という疑念の値がある。

また、議論で発言しすぎれば目立ち、黙り過ぎても目立つ。


仲が悪ければそれだけで疑われるし、グノーシアだと思われれば当然疑われるし、目立っても疑われる。


ここに、キャラクターごとの強烈な個性が加わる。

嘘を見抜くのがうまい人、嘘をつくのがうまい人、人を扇動するのがうまい人、理性的に導くのがうまい人。


人間相手の人狼だと、人間関係がこんがらがってくることもあるだろう。

グノーシアでは、だれがどんなことを言った、という簡単なログが記録され、いつでも参照できる。

(詳細な言葉も、直近のものは記録されている)


これらを勘案し、考え始めると…

コンピューターのプログラムにすぎない「キャラクター」が、本当に心を持っているかのように活き活きしてくる。

心理戦がリアルに感じられる。



でも、先に書いたように、相手はコンピューターだ。

自分のペースで話を進められる。

じっくり悩んでもいいし、直感で決めてもいい。


先に書いたように、テンポよくゲームが進む。

人間相手の面倒くささは一切ない。




作った作者がゲームを楽しめる、というのが開発の指針としてあったそうだ。

だから、どのようにゲームが進むかは、作者すら想像つかない。


作者すら考えないような神がかった展開になって驚くこともあった、とインタビューで答えている。


ランダムに話を進めながらも整合性を保てるように、シナリオを管理するプログラムも分散処理で、100以上のロジックが動いているという。


僕もゲーム業界にいた人間として、よくぞそんな方法でバグも出さず…

と思ってしまうが、バグは出てもいいんだそうだ。


全く支離滅裂な話の展開になっても、そういうものだ、という世界観が設定してあるらしい。

まだそんなにやり込んでいないから、それがどういうことかわからないけど。




まだあまり遊んでいないが、子供たちが遊んでいるのは少し見ている。

これだけでも非常に楽しい作品だ。


以前も書いたが、僕はゲームレビューを書くときは、人に勧められることを基準にしている。

だから、普通は2時間程度あそんだだけではレビューを書かないのだが、もう勧めたくてしょうがないのだ。


この作品は間違いなくお勧め。



▲目次へ ⇒この記事のURL

関連ページ

続・グノーシア【日記 22/01/11】

別年同日の日記

01年 11/24

02年 オムライスとカレー

07年 保育園イベントいろいろ

10年 ディズニーランド公式ホテル

11年 しつこくデフラグ話

13年 ピエール・ベジェの命日(1999)

16年 マジカル頭脳パワー!!


申し訳ありませんが、現在意見投稿をできない状態にしています

i-mode終了  2021-11-30 17:56:02  コンピュータ

▲目次へ ⇒この記事のURL

本日をもって i-mode のサービス終了、らしい。

ついさっきネットのニュースで知った


もっとも、まだ継続していたのか…という気持ちの方が強い。


仕事上の秘密事項もあってあまり多くは語れないが、i-mode は人気が出る前から、公式サイトの構築などをさせていただいた。

フリーのプログラマーになって、最初の「儲かった仕事」だった。

(それ以前は食い扶持を稼ぐのに必死)



上にリンクした記事でも、ピークが 2010年ごろと書いてある。

僕もその頃までは、i-mode …僕の場合は EZweb の方が仕事の中心だったのだけど、携帯コンテンツを作っていたように思う。


2018年に、これらの携帯コンテンツから手を引いた

メンテナンスコストの方が、儲けより大きくなったためだ。


それから3年ほどで i-mode 自体が終了したことになる。

一つの時代が終わった気がする。



▲目次へ ⇒この記事のURL

別年同日の日記

07年 成長記録

09年 fon 導入

17年 モノポリー


申し訳ありませんが、現在意見投稿をできない状態にしています

Windows 11  2021-12-22 17:48:30  コンピュータ

▲目次へ ⇒この記事のURL

メインマシンが、Windows 11 にアップグレード可能になったので入れてみた。


アップグレード可能、という通知が来たのは先週の末。

週末に入れてみようかな、と思ったけど、仕事にも使っているマシンだし、年末にするか…と保留した。



今週頭、通常の Windows Update で再起動を求められたので再起動。

そしたら起動後の最初の画面で、「Windows 11 をお勧めします」って言われた。



拒否するか取得するかの2択。

今から仕事でこのマシン使うんだよ。とりあえずは拒否。


すると、今はまだ作業続けられるよ、ダウンロードして後で入れればいいよ、って言われる。

じゃぁ、入手だけしておくか。




確かに、とりあえず作業は続けられた。

でも、ファイルダウンロードしてから2日も放置していたら、「アップデートのため再起動しましょう」とうるさい。


まぁ、アップデートしてもいいか。

昼休みでご飯食べる間に再起動。



戻ってきたら、無事 Windows 11 にかわっていた。




感想。


ひとまず、何も変わらない。



もちろん、いろいろと変わっているのよ。

スタートメニューは一新されたし、タスクバーも一新された。


でも、スタートメニューって、僕はそれほど使わない。

だから、変わってもあまり影響ない。



タスクバーは、Quick Launch を使えなくなったのが地味に痛い。

Quick Launch は Windows 95 から親しんできた。


…でも、今調べたら XP ですでに消えていたのね。

消えても、設定で表示できた。



Win 7 の時にいよいよ消えた。設定からも表示方法が消えた。

でも、ちゃんと設定する方法があって、Win 10 でも使えていた。


それがいよいよ Win 11 で完全消滅した。


じゃぁどうしたかというと、Win 7 で消えたときに、ちゃんと代替方法が用意されたから消えたのね。

「タスクバーにピン止め」だ。



実のところ、Quick Launch とピン止めは似て非なるものだ。

だからこそ、慣れ親しんだ QUick Launch の方を愛用していた。


でも、ないなら仕方がない。

Win11 に切り替える前に、無くなるのを知ってピン止めに慣れるようにしていた。


まぁ、2日ほどしか慣れる期間がなかったのだけど、違うと言っても用は足りる。

不便になった部分もあるが、便利になった部分もある。だから良しとしよう。




結果、今のところ Window の角が角丸になっている、というのが若干の違和感があるだけで、普段の作業フローには何の影響も出ていない。


角丸なんて、数日使えば慣れるだろう。その程度の違和感だ。


Windows 11 には楽しみな新機能もあるが、そうしたものはまだ提供されていない。

この点でも、今までと何も変わっていない。


まぁ、大き目なアップデートではあったが、普通のアップデートとそれほど変わらなかった、というだけの話。




▲目次へ ⇒この記事のURL

別年同日の日記

04年 冒険百連発?

11年 リモコン当たった

14年 Scratch 2.0

16年 ここらでコラムス


申し訳ありませんが、現在意見投稿をできない状態にしています

続・グノーシア  2022-01-11 13:55:03  コンピュータ

▲目次へ ⇒この記事のURL

グノーシア、というゲームについては、購入して少し遊んだ時点で一度書いている。


我が家では、家族全員が気に入って繰り返し遊んでいる。

いち早く「完全クリア」した長女は、その後もわずかな暇があるときに遊び続けている。


(まとまった時間があるときはスプラ2やるとか、使える時間に応じてゲームを変えている。

 グノーシアは、1回5分程度から遊べる)


さて、僕も少しづつ遊び続け、年末年始の休みでやっと完全クリアに至った。

やはりいいゲームだった。感想を書いておこう。


ここで「完全クリア」と書いてあるのは、単にエンディングを見たのではない、という程度。

本当は、きっとまだ「完全」ではないだろう。




グノーシア自体は、人狼を元にしたゲームだ。

閉鎖された宇宙船内で、人間に感染し、人間に敵対する「グノーシア」と多数決で戦うゲーム。


見た目は人間と変わらないため、外見からは判別できない。


ただし、船に一人だけ乗り込んでいる「エンジニア」は、船が空間転移…定期的に行われる、ワープ航行の際の特殊な状況を利用して、一人だけグノーシアかどうかを検査できる。


しかし、それで誰がグノーシアかを確定できるのは、当のエンジニアのみ。

グノーシアは「嘘をつく」ことができるため、エンジニアを名乗って情報を混乱させる。

本人以外は、情報が本物か偽物かもわからない。



ゲーム上、5回の「話し合い」が1ターンで、ターンごとに投票して一人の「コールドスリープ」を決定する。

ここは人狼に比べて穏やかなところ。人狼では投票で「処刑」するのだが、眠ってもらうだけだ。


そして、コールドスリープ状態にあるものは、これも船で一人だけの「ドクター」が検査して、人間かグノーシアかを判別できる。

もちろん、ドクターを名乗って情報を混乱させるグノーシアもいる。



グノーシアも、ただやられるのを待つだけではない。

ターンの最後に、一人だけ「消滅」させることができる。


空間転移の際の特殊な状況を利用し、人間を一人、完全に消し去るのだ。


このほか、絶対に人間であると互いに保証できる、二人一組の「留守番」、人間だがグノーシアを崇拝し嘘をつく「AC主義者」、存在していることが異常で、最後まで残ると宇宙を崩壊させる「バグ」など、いくつかの役職があり、それらの存在が状況を複雑にする。


ただし、ここまでは単に舞台や役職名を置き換えただけの人狼にすぎない。




グノーシアには、ストーリーがある。


いや、ストーリーと言ってよいのかどうか…世界観、という方が良いかもしれない。


グノーシアとは何なのか。なぜ人間に敵対するのか。

なぜ、どうやって人間を「消滅」させるのか。


1回のプレイは、グノーシアを全員眠らせて人間が勝利するか、もしくはグノーシアが過半数を占めて船を乗っ取るかで終わる。


しかし、時々この世界についての情報の断片を入手できる。

それは、登場人物の生い立ちだったり、全く意味の分からない…でも、すべてが明らかになった時に納得できるイベントだったりする。


少しづつ違う設定で繰り返し遊ぶことになるのだが、これも「そういう世界観」の一部だ。

プレイヤーと、もう一人の重要キャラクターだけが、並行宇宙を彷徨い、繰り返し同じ時間を過ごす能力を持っているのだ。


なんで? その能力は何のためにあるの?

それも謎の一つになっているが、ストーリー上やがて解き明かされる。



そして、多少ネタバレになってしまうが、「際限ない繰り返し」から脱出することが、ゲームクリアの条件となる。

それを達成するとエンディングが流れ、「1周目」のクリアとなる。


…のだけど、先に「完全クリア」と書いた通り、1周目クリアは完全クリアではない。

まだ謎がたくさん残っているし、ひとまずのエンディングではあるが、未解決問題も残っているのだ。



またネタバレで申し訳ないが、プレイヤーがゲームを始めるときに、性別を選ぶことができる。

ゲーム上性別はほとんど関係ないのだが、ストーリー上わずかな影響を与える。

このため、すべてを知ろうと思ったら、少なくとも2周クリアする必要がある。


(性別は三種類。男、女、汎、になっている。先にクリアした長男によれば、汎専用のイベントは用意されていないらしい)



そして、2周目をすべて終わらせる前のどこかで、1周目で未解決だった問題が解消される。

これが本当のエンディングだ。


すべての伏線が収束して綺麗に閉じる。

まぁ、ゲームとしての面白さを優先しているので、ストーリー的な荒さは多少あるのだけど。



実は、子供のプレイで先にこのエンディングは見てしまっているのだけど、自分で見るとまた違った印象になった。

それまでの過程…断片情報の積み重ねによる世界観の把握があるかどうかで、意味合いが変わってくるためだ。



なので、多少のネタバレがあってもこのゲームは楽しめる。

家族で遊ぶのにもお勧め。




さて、人狼面倒くさそう、という人向けに、このゲームが人狼と違って面倒くさくはないことを書いておこう。



相手が人間ではなく、コンピューターの動かすキャラなので自分のペースで進められる、というのは大きな要素の一つだ。

これは遊び始めてすぐの日記でも書いた。



でも、それ以上に、本物の…対人の人狼とは違う気楽さがある。

ゲーム進行に伴い、自分の能力があがり、使えるコマンドが増えるのだ。


対人の人狼では、「なんか嘘くさいな」と思っても確証を持つことが難しい。

でも、グノーシアでは自分の能力値次第では、相手が「嘘を言っている」と気づくことがある。


確実に嘘をついている、と分かるキャラがいて、そのキャラと妙に仲の良いキャラがいれば、それがグノーシアのグループではないか、と芋づる式に見つけ出すことができる。

(グノーシアが複数人いる場合、グノーシア同士は誰が仲間か知っている)


もっとも、だからこそ人間なのに嘘をつく「AC主義者」などの配役もあるのだけど、AC主義者はグノーシアが誰かは知らないため、微妙な反応の違いで見分けられたりするのが、また楽しい。


コマンドも、最初の内は「疑う」「かばう」「同調する」などの簡単なものしか使えないのだが、能力が上がるにつれて「反論する」「同意を求める」「哀しむ」「絶対に敵だ」…果ては「土下座する」なんてものもあり、適切に使うことで楽にゲームを進められるようになる。


1回のターンは5回の話し合いから成るのだが、ある程度能力があがってからの僕の1ターン目はこんな感じ。

自分はエンジニアでやった場合。


・名乗り出ろ 留守番

・名乗り出ろ ドクター

・役割を明かす エンジニア

・人間だと言え

・(流れに任せて静観)



「名乗り出ろ」は、役割を持つキャラに、役割を明かすように指示するコマンド。

自分の能力値が低いと誰も名乗り出ないこともある。

(役割は重要なものなので、明かすことでグノーシアに消される危険があるため)


留守番は互いに保証する必要があるため、必ず「人間」2名が名乗り出る。

ドクターとエンジニアは、偽物も名乗りを上げる。


そして「人間だと言え」は、全員に「自分は人間だ」と言わせるコマンド。

グノーシアは嘘をつくことになるので、嘘に敏感な…自分も含め、能力値が高いキャラなら嘘を見抜くことで、グノーシアに気づくことができる。


自分がエンジニアの場合、この後怪しい人間を調べていくことになる。

もっとも、自分がグノーシアを知ったとしても、それを他のキャラに信じてもらうのが大変なのだけど…




ちなみに、上の戦略を十分に能力値がないことにやると、目立ち過ぎてグノーシアに狙われたり、怪しまれてコールドスリープさせられたりする。


逆に言えば「育てたキャラなら無双できる」のであり、一人用のコンピューターゲームらしい気楽さが、そこにある。


人狼が面倒くさいと思うような人でも楽しめる人狼。よくできている。



ちなみに、登場人物は自分を含めて15人。

コンピューターが担当する14人は、細かな性格付けができていて、同じような状況でも人によって反応が違ったりする。

この性格を覚えるのも、ゲームを勝ち抜くためのコツで、対人戦だったらそんな簡単にはいかないだろう。


(人間には当然性格はあるが、「こういう性格だからこういう行動をとる」と言えるほど単純ではない。

 グノーシアはゲームなので、各人の性格による行動の違いはあるが、各人が予想外の行動をとることは少ない)


2周もやると、それらの性格付けも含め、キャラクターが愛すべきものになっていく。

最初の内は怖かった謎のキャラも、様々なバックグラウンドがあるだけで、みんな優しいいいやつなんだ。




何度も遊べるゲームシステム、よくできた世界観、綺麗に収束するシナリオ、生き生きとしたキャラクターの性格付け…


非常によくできたゲームです。

改めて、お勧めです。



▲目次へ ⇒この記事のURL

関連ページ

BABA IS YOU【日記 22/02/27】

別年同日の日記

04年 住宅展示場

06年 自宅で新年会

17年 アントニー・ホーア 誕生日(1934)


申し訳ありませんが、現在意見投稿をできない状態にしています

node.jsの2つのイベント処理  2022-01-27 17:16:47  コンピュータ

▲目次へ ⇒この記事のURL

仕事で node.js を使用しているのだが、思わぬところで引っかかったので記しておこう。


…と、いきなり話を始めてもわからないので、前提知識から。


node.js は、サーバ側で Javascript を使用するための仕組みだ。


そして、Javascript は「Webブラウザで使う」ことを前提に設計された言語だ。

設計当時の OS は、Windows3.1 と MacOS 8 …


どちらも、今のマルチタスクとは違って、「アプリケーションの善意」でマルチタスクを実現していた。

(OS が割り込みで CPU 時間を管理するのが今の方式だが、Win3.1 や MacOS 8 は、アプリケーションが「短い時間で OS に処理を返す」ことを前提にしていた。

 処理を返さないプログラムがいると、全体の動作が停止し、破綻した。)


いきなりすごい昔話が始まったが、その時代に設計された「アプリケーション内の組み込み言語」として、長時間の処理を「させるわけにはいかなかった」。


そこで、Javascript では「イベント駆動」という仕組みを使った。

画面がクリックされた、ボタンが押された、マウスカーソルが特定の領域に入った、など、あらかじめ設定した「イベント」が起きた場合に、指定したプログラムを呼び出してもらう。


イベント駆動でないなら、プログラムが動く条件を調べるところから自前で作らないといけない。

そして、条件を調べるためには、ユーザーがいつ押すかわからない「ボタン」が、押される瞬間を待ち続けないといけない。


…ここで「待ち続ける」というのがダメなのだ。

先に書いたように、短い時間で OS に処理を返さないと、全体が破綻するのだから。



そんなわけで Javascript はイベント駆動だし、なにかを「待つ」必要のある処理を「書けない」ように設計されている。

待つ必要がある場合には、その事象が起きた場合のイベントがあらかじめ用意されているから、そのイベントに対して処理を設定するのだ。


結果として、Javascript のプログラムはイベントを待って少しだけ処理する、というプログラムの断片だらけになる。




ブラウザ側なら、それでいいだろう。


ブラウザはユーザーインターフェイス(UI) の塊で、ユーザーが何かしたら、このプログラムを動かす、ということの連続でできている。


Javascript の組み込みイベントも、そうしたブラウザに合わせて設定されている。

この設定はブラウザメーカが勝手に作っているわけではなく、ECMA という団体で標準化されている。

だから、どこのブラウザでも同じ Javascript プログラムが動く、はずだ。


(実際には、すでにメンテナンスされていない IE とかは仕様が古すぎて最近のプログラムが動かなかったり、Chrome と FireFox で若干の仕様差があったりする。)


話しは戻って node.js なのだが、これはサーバ側で Javascript を動かす仕組みだ。

そして、ECMA の定めるイベントには、サーバで必要とするような事象が十分に考慮されていない。



先に書いたように、Javascript はイベント駆動だ。イベントなしにプログラムを書くことは、まぁできなくはないのだけど、やりづらい。

でも、サーバ向けのイベントは用意されていないし、そもそもサーバで作りたいプログラムは、ブラウザ側の UI と違って非常に多岐にわたる。


そこで、node.js では「ユーザが自由にイベントを拡張できるライブラリ」を作った。これは標準ライブラリとして、node.js を使える環境では必ず使える。

そして、多くの標準ライブラリで、このライブラリを使ったイベント処理を実現している。


なかなかうまい仕組みで、サーバ上でのプログラムを、違和感なくイベント処理で作ることができる。




さて、ここからが今日の本題。


Javascirpt に組み込みのイベントと、node.jsの標準ライブラリが提供するイベント。

同じ「イベント」の仕組みなので同じような動作をする、と思ってプログラムをしていたら、全くそうではなかったのだ。


気づかずに落とし穴にはまってしまった。

何か違う、と気づいてから情報を求めて探し回ったが、この違いに言及している日本語の記事には出会えなかった。


英語で探していてもほとんど情報がなく、「少し違うよ」程度に書かれている記事はあっても、具体的な情報がない。


最終的に、node.js のプログラムを読んで違いを理解した。



具体的には、次のようなプログラムが問題になったのだ。



const stream = fs.createReadStream("sample.text", {encoding:'utf8'})
const reader = readline.createInterface({input: stream})
const headline =  await new Promise((resolve) => {
    reader.on('line', (line) => {
        reader.close()
        return resolve(line.trim())
    }).on('close', () => {
         return resolve('')
    })
})


これはプログラムの断片で、ライブラリとして標準提供されている fs と readline を必要とする。


短いのに Javascript らしい、非常にわかりにくいイベントプログラムになっているので説明しよう。


まず、stream を作っている。

これは、ファイルを読み込んで、読み込みに成功すると、「読み込んだ」というイベントを起こしてデータを渡してくれる。

ここで、特に指定が無ければファイルの頭から終わりまで、読み込みバッファ(指定が無い場合は 64Kbyte)毎に勝手にデータを読み続けてくれる、というのがミソなのだが、ここではあまり意識する必要はない。


この stream を入力として、reader を作っている。

stream で流れてくるデータを、行ごとに分解して、できた行ごとにイベントを起こしてデータを渡してくれる、一種のフィルタだ。


このプログラムでは、この reader に対して2つのイベント処理プログラムを設定している。


line は読み取った行を渡してもらうイベントで、行を受け取ると reader を終了し、行を結果として返す。

(resolve は結果を返す仕組みだが、詳細後述)


また、行が1つもないと…つまり、0バイトのファイルだと、line が来ないで close が来る。

この場合は「空文字列」を結果として返している。


つまりは、テキストファイルの最初の行を取り出すプログラムになっている。



さて、resolve という変わったやり方で結果を返しているのは、これらのプログラム全体が、

Promise という関数の中で呼び出されているためだ。


これもイベントを作り出す仕組みで、「何かを待つ」必要があるときに使う。

先に書いた通り Javascript では何かを待つことはできないのだが、Promise は最近作られた巧妙な仕組みだ。


Promise は、Promise オブジェクトと呼ばれるデータを返す。この時に待ち時間は発生しない。


そして、Promise オブジェクトは、渡された後でも値が変化する、という何とも奇妙なものだ。


最初は「未解決」という状態になっている。

その後、resolve を呼ばれると「解決済み」となり、そのとき resolve に渡された値を読み出すことができる。



await という制御命令は、Promise オブジェクトを引数とする。


そして、await があると、Javascript はその前後でプログラムを分割する。

(以降のプログラムを、勝手に別の関数にまとめると思って欲しい)

そして、await 命令でいったんプログラムの実行を終了してしまう。


await は「Promise が解決した」というイベントを待ち、イベントが発生すると以降のプログラムの処理を始める。

これにより、「待つ」という動作が、見事にイベント駆動に置き換えられ、短い時間で処理を終了する、という Javascript の理念を守ることができる。




ここで、もう一つの Javascript の特徴を説明しておこう。

このあとの話で必要になるからだ。


Javascript の大きな特徴は2つある。一つは、ここまでに書いた「イベント駆動」だ。

もう一つが「シングルスレッド」。


Windows などの OS は。複数のプログラムを同時に動かすことができる。

これを「マルチスレッド」と呼ぶ。


これに対して、Javascript はシングルスレッド。1つのプログラムしか動かせない、という意味だ。

Javascript はイベント駆動で、このイベントはブラウザの場合なら、ユーザーの操作などで引き起こされる。


マウスを動かした、ボタンをクリックした、などだ。


でも、「イベント」が起きても、すぐにイベントの処理プログラムが動くわけではない。

すでに動いているプログラムがあるなら、そのプログラムが最後まで実行終了するまで待たされる。


多数のイベントが有るときは、イベントは処理待ちの「キュー」に貯められる。

そして、動いているプログラムがないときに、順次処理されていく。


複数のプログラムを同時に動かす、というのは、コンピューター的には実は結構「無理している」処理で、無駄が多いのだ。

それに対して、1つのプログラムを動かすだけなら、その仕事に専念できるので効率よく動かすことができる。


シングルスレッドと、必要なときには仕事を「溜めて」おけるイベントキューの組み合わせで、効率よく仕事をこなせる。

これが Javascript の特徴で、node.js が高速だと言われる理由でもある。




さて、話を戻す。先程のプログラムでは、2種類のイベントが出てきた。

Promise によるイベント処理と、reader(readline) によるイベント処理だ。


このふたつが全然違うことで問題が起きる、というのが今日の話のテーマだ。



先程描いたように Promise はプログラムを小さな単位に自動的に区切り、1回のプログラム実行時間を短いものにする。


await new Promise の前と後ろでプログラムは区切られる。

後ろのプログラムは、resolve が実行された後で実行される。


ここで、resolve が「以降のプログラム」を動かすわけではない、ということにも言及しておこう。

resolve は、promise オブジェクトを「解決済み」に変更する役割しか持たない。


resolve はイベントをキューに積むだけで、「解決」したときの、await 以降のプログラムを動かすわけではない。

実際に await 以降のプログラムが動き始めるのは、また別のタイミングなのだ。


ところが、reader によるイベント処理はそうなっていない。

そのため、先に書いたプログラムは正しく動作しない。


具体的には、reader.close() に落とし穴がある。

これが resolve と同じように、close イベントを発生させるだけで実際の処理は後回し、であればよいのだが、実際には reader.close() 関数呼び出しの中で、reader.on('close', ~ に書かれているプログラムが呼び出されてしまうのだ。


その結果、イベント処理は「最小の処理時間」を実現するのではなく、実行時間を引き延ばすことになっている。

さらに、line イベントのプログラムの「途中で」close イベントのプログラムが始まってしまうことで、close イベントの resolve が先に動いてしまう。

Promise はそこで解決してしまうため、行のデータを渡す、という一番大切なことが実現されない。




なぜこんなことになるのか。


node.js の提供する「イベントを実現するライブラリ」は、実際にはイベント「風」のふるまいを行うだけで、Javascript のイベントとは全く別の動作をするためだ。


Javascript のイベントは、Promise の resolve のように、「イベントが起きた」という記録だけを行い、そのイベントに紐づいた処理は後で起動される。


しかし、node.js のイベントライブラリは、「イベントが起きた」ことを伝えると、そのことを伝える関数の中で、イベントに紐づいた処理を呼び出してしまう。


Javascript はシングルスレッド…プログラムの途中で別のプログラムが動き始めることは無い、と保証されている言語なのだが、この仕組みだと、その前提さえ崩れてしまう。


(イベントを起こすと、そのイベントによって割り込みが起こったような挙動になる)




node.js のイベント標準ライブラリの名前は EventEmitter 。


これ自体は非常に便利なものだし、批判したいわけではない。

言語の持つ仕組みではなく、その言語自身で書かれたライブラリとしてイベントを「疑似的に」実現しているので、挙動が違うのも仕方がないところ。


ただ、使う上でこの知識を持っていないと、思わぬところで謎の挙動に悩まされることになる。



最初に書いた通り、日本語でこのことを解説する記事を見かけなかったので、ここに記しておく次第。

(EventEmitter の使い方、というような記事は多数あるのだけど)



▲目次へ ⇒この記事のURL

別年同日の日記

03年 おでん

17年 ザ・ハウス・オブ・ザ・デッド


申し訳ありませんが、現在意見投稿をできない状態にしています

BABA IS YOU  2022-02-27 18:19:16  コンピュータ

▲目次へ ⇒この記事のURL

あ、ちょうど2年前ではないか




ちょうど2年前、BABA IS YOU というパズルゲームを購入した。

ゲームの説明は、上のリンク記事で。


2年たって、やっとすべての面をクリアできた。



…いや、厳密にはまだ終わっていない面もある。

「マップコンプリート」で「THE END」の状態に持っていけた、というのが正確な説明で、一応ゲームの目的は果たしたことになるのだけど、まだやることは残っているから。




パズルゲームは好きなのだが、このゲームは普通のゲームとは違った。


2年もかかったのは、もちろん難しかったからだ。

ただ、「難しい」のかというと、そうでもないように思う。


普通のパズルなら、「難易度」というような指標が、なんとなくではあるが存在する。

しかし、BABA IS YOUはそういう尺度に当てはまらない気がするのだ。


難易度が普通は数値で示せるとしたら、なんか虚数軸方向に伸びてしまった感じ。




パズルゲームのネタバレをするわけにはいかないので、別の話で例えよう。


ファミコンの初代「ゼルダの伝説」には、「裏」と呼ばれるステージがある。


エンディングを迎えたものが遊べる、もう一つのゼルダの伝説。

ここに、今でも感心するギミックが用意されていた。


ゼルダの迷路には、明らかに「なにかある」と分かるのに、入れない部分がある。

これは、隣から爆弾を使って壁を壊すことで、入れる。


これはもう、ゼルダを遊ぶ上での常識だ。長い旅を終えて、エンディングを迎えたものにとってはそうなのだ。

にもかかわらず、「裏」では、絶対に何かあるのに、散々周囲の壁に爆弾を仕掛けても入れないところがある。


これ、プログラムを作ってあるにもかかわらず、「裏」になるまで登場しない新ギミックなのだ。

壁に向かって歩き続けると、すり抜けることができる。


「壁は爆弾で壊すもの」という常識を作り上げておいて、その常識とは違うことを求める。

「裏」は、面データなどが変わっただけのゲームだと思って遊び始めていたら、ここでまさかの新ギミック登場なのだ。


常識というのは、視野を狭くする盲点でもある。

こういうことをされると、なかなか正解に辿り着くことができない。




BABA IS YOU は、こんなことの繰り返し。


パズルなのに、ある面で使った解決方法はほかの面で役に立たない。

それどころか、「常識」を形成された後で、それを疑わないといけないような面を用意される。


だからなかなか正解にたどり着けない。

一週間も同じ面で悩み続けていると、全然 BABA IS YOU を遊んでいなかった妻が横から「こういう風にすればいいんじゃないの?」と、常識外れの解法をよこして、それが正解だったりする。


なんか、難しいとかそういうゲームじゃないのだ。

ゲームの根底にある常識を疑わないといけないのだけど、遊んでない人には常識が形成されていないから簡単に解けたりする。


こんなのが、200面以上ある。


まぁ、2年間 BABA IS YOU ばかりをやっていたわけではない。

忙しくて一切ゲームをやってなかった期間もあるし、サクナヒメやグノーシア、GOLF STORY なんかを遊んでいた時期もあった。


(GOLF STORY については日記に書いた気がしていたが、書いてなかったようだ。

 面白かったけど、人に勧めるほどのゲームではなかったからな…

 サクナヒメは、すごく話題になったゲームなので、わざわざ僕が書く必要はないと考えて書かなかった。)


しかし、他のゲームを遊んでいても、一息ついたら BABA IS YOU に戻ってくる、という感じだった。




2年前の紹介記事にも書いたのだけど、内容をちょっとおさらい。


基本的には、倉庫番タイプのパズルゲーム。何らかの「物体」を、主人公キャラで押したり引いたりしながら面クリアを目指す。


ただ、この「物体」として重要なものに、「単語」があって、単語を組み合わせることでゲームのルールを変更できる。


主人公も、面クリア条件も、障害物も、ルール組み換えの対象だ。


最初の方の面は、この組み換えの楽しさを知ってもらうためか、大味な面が多くなっている。

面クリアの方法で「別解」がいくつでも作れたり、画面上に主人公を大量発生させて、数の暴力で障害を乗り越えたり。


でも、こうした過程でゲームのルールを把握したころには、本格的なパズルゲームになっていく。


なにせ、200以上ある面で、「同じような解き方」の面がほとんどないのだ。

ある面で使った方法は、別の面では役に立たない。


遊ぶ方にも歯ごたえのあるゲームだが、それほど多くのパターンを用意した作者側に舌を巻く。




倉庫番なら、ルールの中で「荷物を動かすルートを考えて」「そのルートを確保する手順を考える」というような思考で解くことができる。


しかし、BABA IS YOU は上に書いたように、ルールが書き換えられてしまう。

目指すべきゴールがどこにあるかもわからない状態にされて、ゴールから逆算して考える、ということもできない。


それでも、「何がゴールとなるべきか」も、遊んでいるうちにだんだんわかってくる。

面ごとにゴール条件は異なるとは言っても、「主人公に設定されたオブジェクトが、ゴールに設定されたオブジェクトに重なること」という基本は変わらないのだ。


ゴールが分かれば、そのゴールを実現するためのオブジェクトの動かし方を考える段階に入り、倉庫番と同じような方法で解ける。


しかし、BABA IS YOU にはもう一段階先の難しさがある。


ルールを作る「単語」は時々追加され、その単語の意味をゲーム中で十分に把握する必要があるのだ。

ここで、先に書いたような「常識」の形成が…ミスリードするように行われる。


間違った常識は、ゲームの障害になる。

先に「ゴールが分かれば」、後は解ける、と書いた。しかし、間違った常識により、この過程が阻害されるのだ。



オブジェクトは、常識外の動作をする。

常識外なので、最初は「これ、バグじゃないの?」とすら思う。


だけど、バグじゃないのだ。間違っていたのは自分の常識の方。

試行錯誤の末にクリアして、常識が上書きされ、より正しいルールを理解できるようになる。


もちろん、そんな面ばかりではない。そこまでに作られた常識をうまく組み合わせるだけで解ける面も多い。

…もっとも、「うまく組み合わせる」のが難しいのだけど。




まぁ、作った側も「難しい」だろうことは予期しているのだろう。

全ての面を解かないでもよいようなゲーム構成にはなっている。


面は、様々な「テーマ」ごとにエリア分けされていて、エリア内の半数くらいの面を解くと、次のエリアが表示されるようになっている。


エリア内の面も、解けないならあきらめて、別の面を試せるようになっている。

だから、先に進む目的では、実はそれほど難しいゲームではない。


僕が2年もかかった、というのは、あくまでも「マップコンプリート」を目指していたため。

先に書いたエリア内の面を全部クリアすると「エリアコンプリート」となり、用意された全部のエリアをクリアすると「マップコンプリート」になる。


つまりこれは、基本的に用意された面の全面クリアを意味する。




そう、「基本的に」用意された面しか、まだクリアできていない。

ゲーム上、たくさんの「隠し面」があるのだ。


隠し面は、ゲーム上のいくつかの面で、「ゴールする」以外のことを行うことで現れる。


…いくつかの面には、面を解く以外にも、まだやることがあるのだ。

詳細を書くと、その方法を見つけたときの衝撃を奪ってしまうので書かないけど。


この「別のことをする」のも、面ごとにやるべきことが異なる。

でも、気づいてしまえば、やるべきことは見えてくるように作られている。


そうなった時に、もっと大きな別のパズルの存在に気づくだろう。



…驚かされっぱなしのゲームだ。

こんな飛びぬけた発想のゲームを良く作った、と思うし、その「発想」が、発想どまりにならずに高いレベルでまとめ上げられていることが素晴らしい。





なんかもどかしい書き方になっているな…パズルだからネタバレしてはつまらない。


パズルゲームが好きな人には、非常にお勧めなゲームだ。

ただし、完全に自分の力で解こうと思ったら、すごく時間がかかる覚悟は必要だ。


どの面も、「解けた」瞬間には驚きがある。

その驚きこそが楽しいゲームなので、時間をかけても攻略サイトなどを見ずに解くことをお勧めする。


先に書いたように、僕もまだやるべきことを残している。



…そして、先日「追加面」が無料配信されたんだよね。

主に「開発中で没にした面」を揃えているようだけど、また 200面以上あるらしいですよ。


こちらは没にした面、というだけあって、本編を知っていると楽に解ける面も多い。

とはいえ、そこは BABA IS YOU だ。没面でも驚くような解き方が多い。


追加面はまだ少ししか遊んでいない。先は長そうだ。



▲目次へ ⇒この記事のURL

別年同日の日記

02年 2/27

12年 おゆうぎ会

15年 WING WAR

20年 BABA IS YOU


申し訳ありませんが、現在意見投稿をできない状態にしています

停電  2022-04-04 08:55:25  コンピュータ 家族

▲目次へ ⇒この記事のURL

先日、電力逼迫の話を書いたら、それとは無関係に今朝停電した。


朝4時過ぎ。後で確認したら、4時11分だったようだ。

UPS(無停電電源装置)の4回続けてなるビープ音で目が覚めた。


このビープ音は、電源断を伝えるものだ。

東京電力は頑張ってくれていて、通常なら停電しても数秒で治るし、長くても5分くらい。


UPS は、30秒ごとに4回のビープ音を鳴らす。

何度も鳴り響く。長い停電のようだ。


スマホで情報を確認する。東京電力のページには、停電情報は載っていない。

まだ停電が起きたばかりで、情報掲載に至っていないのだろう。


更に5分ほど。これはどうにかしないといけない、と思って起きる。

UPS に繋がっているとはいえ、使える電力は無尽蔵ではない。


再度情報確認。停電情報が出ていた。鎌倉市で 2100件ほど。

復旧予定は6時。あと1時間半もある。


UPS のステータス表示を見ると、この調子では6時まで持ちそうにはなかった。

無駄なものの電源を落とそう。


たとえば、NAS は急な電源断からは守らないといけないので UPS に繋げているが、停電した状況で動いている必要はない。


WiFi ステーションも UPS に繋いでいるので、ChromeBook でログインすることができる。

NAS に対してシャットダウン指示。これで、電力の使用量が少し減った。


この時点で5時前。6時までならなんとか電源も持ちそうだ。

大抵、こういうのは予告時間少し前には復旧するものだし。


朝の支度を始めようか…と思ったが、IHを使っている我が家では、お湯も沸かせない。

もう一度ベッドに入る




5時55分、断続的だったビープ音が鳴り続けるようになる。

いよいよ電源の残り容量が少ない。


復旧完了時刻を再度見る。6時半に伸びていた。


あ、だめだ。急な電源断で壊れると困るから、家庭内サーバーもシャットダウンしよう。


これで、この日記などを公開しているサーバーも停止した。


で、仕方がない。何もやることないのでまたベッドに入る。




6時半ぴったりに、通電が始まった。

復旧したようだ。


僕は主夫なので、まずは朝の支度。

炊飯器もタイマーでが止まってしまったため動いていない。

炊飯を開始し、一日分のポットのお湯を沸かし、朝ごはんの支度をする。


並行して、サーバの復旧作業。

サーバは2台ある。


1台は土台となるホストOSは起動したが、その上で動くゲストOSが起動しない。

このゲストOS が普段仕事で使っているものなので、これでは困る。


サーバに直接コンソールを接続し、virsh start させる。ついでに virsh autostart も設定しておく。

(前回起動したのはいつだっただろう。自動起動の設定を忘れていたようだ)


もう一台、このページを載せている、公開用サーバが動いていない。

その土台にもログインできない。なんで? ややこしそうなのでひとまず置いといて、朝ごはんの支度を続ける。


ある程度朝ごはんができたところで、再度設定作業。

どういうわけか、サーバー自体がうまく起動できていなかった。

強制的に電源を落として入れ直しても動かない。BIOS 起動すらしない。

壊れたか? 焦る。


一度電源をプラグから抜いて、再度差し込んだら問題なく起動した。

あぁ、時々あるやつだ。問題なし。


こちらは、ゲストOSまで自動的に起動した。7時半。


というわけで、このサイトは、6時から7時半の1時間半ほど、停止していました。

こんな時間に見ていた人がいるかわかりませんが、ご迷惑をおかけしました。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

家族

別年同日の日記

12年 言葉の定義

13年 科学館めぐり

14年 ジョン・ネイピアの命日

15年 ジョン・ネイピア 命日(1617)

16年 冒険遊び場・花見

18年 ピューロランドで誕生日

18年 ピューロランドの秘密

19年 風邪が続いています


申し訳ありませんが、現在意見投稿をできない状態にしています

代入の評価順  2022-04-05 20:40:58  コンピュータ

▲目次へ ⇒この記事のURL

Javascript 豆知識。

というか、仕事で重要になった些細なこと。




演算子には評価順がある。

プログラマなら、だれでも意識することだ。


掛け算 * は、足し算 + よりも先に評価される。

でも、括弧 ( ) をつけると、それが最優先で評価される。


1 + 2 * 3 は 2 * 3 が先に評価されて 7 になるけど、

( 1 + 2 ) * 3 なら、1 + 2 が先に評価されて 9 になる、というようなこと。


まぁ、評価順が不安なら括弧で括っとけ、という話でもある。



じゃぁ、次。

6/3/2 という式があった場合、結果は何になるだろう?


これは、6/(3/2) なのか、(6/3)/2 なのか、という問題だ。

答えは、1 だ。(6/3)/2 になっている。


つまり、評価は左のものが先に行われ、右に進む。


Javascript では、累乗は ** で表される。


2 ** 3 ** 2 はどうなるだろう?

答えは 512 だ。2 ** (3 ** 2) が行われている。割り算の時とは逆で、右から順に評価される。



こうした「同じ演算子が続く場合の評価順」のことを、結合性という。

結合性は、演算子により異なる。




さて、本題。


Javascript では、「代入」も演算結果を持つ。

a = 5 という代入式があった場合、これ全体は、代入された値である 5 が結果になる。

そして、これは右から左に評価される。


a = b = 5 という式では、まず b = 5 が評価され、この結果である 5 が a に代入される。



では、次の式はどうか。


var a=0, b=[];

b[a++] = a++;


念のため書いておくと、a++ というのは「a の内容を値とした後で、a を1増加させる」という演算子だ。

a が 0 の時に a++ と書くと、その式自体は 0 なのだが、その後に a は 1 になっている。



さて、代入式は右から評価されるのだから、まず a++ が実行される。

そして、その結果が b[a++] に代入される。


…と、そう思っていた。


でも、結果は [1] になる。配列の 0 番目に、1 が入っている、という状態だ。

先に b[a++] が評価され、その後で a++ が評価されている。




ちなみに、こんな風に式の中に a++ とかを書くのはお勧めしない。


ここではわかりやすい形で書いているけど、実際には await を使った式の評価でバグが出た。

こんな感じだった。


b[a] = await func();

if(!b[a]) return;


func からの戻り値がない場合、それ以降の処理をしない、というようなプログラムだったのだが、実際には func が値を戻したとしても、return されてしまう。


書いたのは僕ではないのだけど、うまく動かないので相談が来た。


await は javascript に並列実行を引き起こすのだけど、その中で a が書き換えられていた。


それにしても、戻り値は b[a] に入ってすぐ次の行で見ているはずで、納得がいかない。

…と、この時点では思った。先に書いたように、左辺の評価は後になると思っていたからだ。


でも、左辺が先に評価されると考えないとつじつまが合わない。

そこで先のプログラムを書き、左辺の評価が先だと知ったわけだ。




Javascript でわからないことがあったら MDN を見ろ、と僕は思っているのだけど、今この記事を書くために確認していたら、ちゃんと書いてあった。

でも、長い文章の中にさらりと入っているので、気づいてなかった。


演算子の優先順位のページに書いてある。

(どこに書いてあるのか探してみよう。見落としていたのに納得してもらえると思う)



・興味深いのは、結合性や優先順位に関係なく、評価の順序は常に左から右になることです。



「計算」には優先順位があるが、「評価」は常に左から。覚えておこう。




▲目次へ ⇒この記事のURL

別年同日の日記

10年 花見

21年 家事のおとも


申し訳ありませんが、現在意見投稿をできない状態にしています

CAPCOM  2022-06-14 16:53:07  コンピュータ

▲目次へ ⇒この記事のURL

Switch でスト2が期間限定無料配布、と聞いて、別に好きでもないのにダウンロードしておこうと思った。


詳細に書くと、CAPCOM ARCADE STADIUM というソフトがあり、これは無料配布している。

というのも、これ自体はプラットフォームであり、ゲームを遊べるわけではないからだ。


で、ダウンロードコンテンツの形で、昔の業務用ゲームを別途購入し、遊ぶことができる。

何も買わないでも、サンプル扱いで 1943 が入っている。縦スクロールシューティングゲームだな。


で、期間限定でストリートファイター2が無料になっている、という話なのだ。

1943 もスト2も、別に好きではない。というか、CAPCOM のゲームをそれほど好きではない。


でも、スト2が歴史的な転換点にあった重要作品であることは認めるし、せっかくだからもらっておこう、と思ったのだ。




ダウンロードして遊ぶ。スト2で選べるキャラ、最初はこんなに少なかったっけ。

ちょっと遊んで終了。対戦格闘自体が、それほど好きなジャンルではないからね。


他にどんなゲーム遊べるのかなー、と、「購入すれば」遊べるゲームのリストを眺める。

あー、そういえばそんなゲームあったなー、と懐かしみながら、各ゲームのタイトルロゴを眺める。


そして、出会ってしまったのだ。「ストライダー飛竜」。


少し上に書いた前言を撤回しよう。CAPCOM のゲームをそれほど好きではない、と書いたが、飛竜は大好きだった。

僕の人生を方向づけたゲームの一つ、と言ってよいくらいやり込んだ。


X68k 版も持っていたし、メガドライブ版は「いろいろ違う」と怒りながらも、やはりやり込んだ。




200円かー。気軽に試してもいい程度の額。

今更昔のゲームは「懐かしい」というだけで、遊ばないのが目に見えているのだけど、買っちゃうか。


よし、買おう。とストアページに行くと、過去にゲームを購入したときに付いたポイントがたまっていた。

200円分くらい、ポイントで買える。実質無料で入手。


これ、CAPCOM の思う壺なんだろうな。



久しぶりに遊んだが、最初の方はそれなりに攻略パターンを覚えていた。

でも、途中から全く覚えていない。コンティニューでごり押ししてエンディングまで行ったが、納得できない。

このゲームはゴリ押しするようなものではなく、美しく踊るものなのだ。


しかし、やはりプレイ感覚の好きなゲームだ。

パターンを思い出しながら、しばらく遊ぶことになりそうだ。




さて、ストライダー飛竜だが、まだソ連が崩壊する前に作られたゲームだ。


ゲームの舞台は「ソ連から帝政ロシアに戻った 2048年」で、このロシアを率いる独裁者は、世界を相手に核戦争を起こそうとしている。

その彼を倒し、世界を救うのが主人公に課せられた使命だ。


…なんか、今書くのが きな臭いな。

まぁ、崩壊するとまでは思ってなかったけど、ソ連がごたごた続きだった時期に作られたゲームだし、この設定を「予言」とまで言うつもりはない。


当時は政府も仮想敵国としてソ連を想定していたしね。


でも、なんかいろいろ考えちゃうのでした。


▲目次へ ⇒この記事のURL

別年同日の日記

02年 眠り姫

06年 CSS

13年 びわ

19年 google photos その後


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -