LoginSignup
6
2

More than 3 years have passed since last update.

次世代モブプロ?対戦型オペレーションゲームでスキルを磨け!!

Posted at

俺より強いスキルに会いに行く(挨拶)

はじめに

ハイスコアガールⅡ面白かったですねー。

 ジブンも格ゲーブームのリアルタイム世代だったんだけど、見ててふと思ったのは「見て真似て盗む」というスキル磨きの手法。
 モブプロやったことないから憧れるけど、磨く方法は手取り足取りだけじゃないよね。(あ。もち否定じゃあないです)
 戦って負ける。から負けた理由なり、もっと上手くなる方法を考えたり、相手の操作から学ぶ。
 それも一つのモチベーションが高い学習方法ではないか?仮説

 そんな思いをコードにしました

で、こうなった

実況さん「新人くんvsベテランさんスタート!httpサーバーを8080で起動し、TESTの文字列を返すミッションです!!」

実況さん「新人くん、OSやバージョンの確認を手堅く始めたぞーパッケージの確認へと進んでいるー」
2.gif

実況「あーっと!!!ベテランさんの必殺netcatが決まったー!瞬殺!!新人くん、ベテランさんのユニゲージ戦法になすすべなく敗退ー!!」

新人くん「ぐぬぬ。そんな技が。。」

ベテラン「てめーはUNIXを怒らせた」

~終~

競技プログラミングでいいんじゃね?

 まあ、そうなんですけどお互いの操作が見えているってのが新しいし、ダッシュボード的な画面を実況さんがさらに解説するのがポイントです。見てる人も楽しんで学べるかと。

というか見辛いからWebでやれ

 承知。最初にGolangのCUIモジュールの練習したかった。ので、アイディア出ししたらこうなった。

やりかた

 golang使った割にやたらめんどうですいません。。というか適当過ぎる

 1.コンテナなり環境を汚染/壊してもいいサーバーを2個用意します。コンフィグに書いたクリア条件を定期的に確認できるようにSSHでrootを許可してにパスワード認証をつけてください。鍵認証?・・・手抜きですみません。

 2.コンソールをWebから弄れるのをWebsocket対応したのをgitからもってきてコンパイルなぞします。また対戦画面表示用サーバーもgitからもってきてコンパイルしてください。

 3.ミッションクリア条件をコンフィグに書きます。達成のパーセンテージ,確認コマンド,何が含まれてたらクリアのようにCSVで書きます。

0,HTTPDをポート8080で起動させ,文字列TESTを応答させる
10,ps -ef | grep -v grep | grep nginx,nginx
50,netstat -anp | grep :8080 | grep -v grep,nginx
100,curl -q -m 2 127.0.0.1:8080,TEST

 1行目は最初に表示するミッションの文字列ですね。ひどく適当な実装ですね

 4.対戦画面表示用サーバーを起動してください。最低限のオプション指定として用意したコンテナへのログイン情報が必要です。以下のように表示ユーザー名、IP、アカウント、パスワードで指定します。ユーザー名無いとどっちの窓を誰が動かしてるかわかんないからね。

./server -one=taro,192.168.0.25,root,password -two=jiro,192.168.0.26,root,password

 確認のSSHアクセスもできれば画像のようにミッション表示画面で停止します
1.png

 5.コンテナでコンソール操作を受けるため、コンソールをWebから弄れるやつをコピーしてサービスを起動してください。HTMLコンポーネントや、ミッション表示画面へのWebsocketを張るURLを指定するので以下のようなオプションを指定します。対戦画面表示用サーバーが居ないとWebsocket張れなくて落ちます。

/root/console-demo/console-demo -port=10000 -html=/root/console-demo/www -org=http://192.168.0.100:8080/ -ws=ws://192.168.0.100:8080/one -command=/bin/sh

 対戦ですのでもう一台のコンテナでもコマンドを流します

/root/console-demo/console-demo -port=20000 -html=/root/console-demo/www -org=http://192.168.0.100:8080/ -ws=ws://192.168.0.100:8080/two -command=/bin/sh

 6.起動したらWebコンソールへアクセスします。対戦する2人で1画面ずつ開いてください。
2.png

 アクセスできたらミッション表示画面がコンソール画面に変わります
3.png

 7.対戦開始です!!
1.gif

 裏でgoroutineでコンフィグのSSHが順繰りにチェックしにコマンドを投げ込みます。あ、今更ですけどポイントは上に書いた妄想の対戦実況みたいに先に100パーセント達成で勝ちです。油断すると背後から撃たれるわけですこわいですねー(なので実況要素も要るわけです)

で、愚痴

 という忘年/新年会でSWITCHのゲーム大会より盛り上がりそうな(憶測)ネタでしたが、
一人で組んで&酒のテンションで記事を書いたのですがやたら空しいですね。。
 この仕組みでJMeter vs k8s使いでサービス落ちたら負け勝負なんて胸アツで超見たいんですけど!誰か一緒にSaaS化しようぜ!!笑

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2