【twitterに投稿できる】ObjectStorageでショートコードのゲームを公開してみる

はじめに

id:s-yokoyamaです。
今回は、Oracle Cloudのストレージサービス「Object Storage」での静的ファイル配信機能を使って、
最近流行っている?ショートコーディング(code golf?)的なゲームを作成してみました。
※可能な限り短い文字数でゲームっぽいものの作成を目指しました!!
言語はjavascriptです。

Object Storageでの公開手順は以下記事を参照。

cloudii.atomitech.jp

ゲーム内容

  • 概要  :自機($)を壁(#)に当たらないように避けていくゲーム
  • 終了条件:壁(#)に当たった場合はゲームを終了
  • 操作  :キーは何でもOK。自機($)を移動させる
  • スコア :終了するまでのターン回数
  • その他 :壁の出現はランダム(上、下10%の確率で生成)

f:id:s-yokoyama:20181108100604g:plain

プレイはこちら

ソース紹介

ソースの全量(268byte)です。
※この記事がMarkdownで1400文字なので約1/5です(笑) 。

なんと、twittreにも投稿できちゃいます!!

<body onKeyDown=K=event.keyCode onload="K=b='<br>';w=d='_'.repeat(99)+b;p=s=0;setInterval(t=>{d[p*50+1]>'#'||e;p=K>0?1-p:p;r=Math.random()*9|0;d=[1,51].reduce((x,y,c)=>x+(p-c?d[y]:'$')+d.substr(y+1,44)+(r-c?'_':'#')+b,'');document.body.innerHTML=++s+b+w+d+w;K=0},99)">

※多分これが一番短いと思います。
(さらに省略出来るよとかあれば、コメント下さい)

ソースの解説

// キー入力をKに保存
<body onKeyDown=K=event.keyCode 
// 初期化処理(<script></script>よりonloadに記載する方が短い)
onload="K=b='<br>';w=d='_'.repeat(99)+b;p=s=0;
// ループ処理
setInterval(t=>{(省略)},99)">
// 死亡判定 (*1 =='#'より>'#'のが短い) (*2 エラーを発生させてゲームを止める)
d[p*50+1]>'#'||e;
// 自機移動処理(
p=K>0?1-p:p;
// 壁生成処理 (|0は切り捨て処理)
r=Math.random()*9|0;
// 壁と自機の描画&移動処理
d=[1,51].reduce((x,y,c)=>x+(p-c?d[y]:'$')+d.substr(y+1,44)+(r-c?'_':'#')+b,'');
// 描画処理、スコアの加算処理、キーの初期化処理
document.body.innerHTML=++s+b+w+d+w;K=0

最後に

仕事でほぼ使うことの無い技術だけど、考えてて非常に楽しかったので、
是非、もっと流行って欲しいですね!!
需要があれば、他にも投稿しようかな。