60

スマホで遊べる710バイトのぷよぷよ

by
ranea
ranea
おはこんばんちは。
ふとYouTubeを見ていたら、8行のコードでぷよぷよが遊べるというのを知り、どんな内容かなのか気になって見てみた。


https://youtu.be/mYQMxJVY-G8?si=ZbwO5WAPdCwDRTbk


なるほど、テトリスが短いコードで遊べるのは知っていたが、ぷよぷよもこのように短いコードでちゃんと遊べてて面白い。



というわけで、同様になるべく短いコードで、スマホのブラウザアプリで読み込ませるだけで文字化けせず遊べるようにしてみた。



大体こんな感じの画面。スマホ対応した分だけコードが長くなったが、710バイトでできた。1KB未満でできてよかった。
全角を使うと文字化けするし容量が大きいので半角文字。
空白が=ではなく_のが見やすいかもしれないが、可変幅フォントから等幅フォントにしようとすると容量が増えるので、可変幅のままズレない文字を採用した結果こうなった。
0179なのは色々試してこれが個人的に見やすい方だったから。
変えたい人は後述のコードの0179の部分を変えてください。

$が壁、=が空白マス、0179がぷよ。
下の数字がスコア。一応、連鎖数が大きい程増えやすいです。
上まで積んだらゲームオーバーなので、再度遊ぶ場合はリロードしてください。


以下のコードを(任意の名前).htmlで保存して、Chromeアプリとかでローカルで読み込ませれば遊べます。


body id=D style=font-size:6em ontouchstart="K=(T=event.touches[0].clientX/innerWidth)<.33?-1:T>.66?1:-6,event.preventDefault()"><script>function G(x){Z[x]==c&&(Z[x]=q?
(P+=k++,0):-c,G(x+1),G(x+8),G(x-1),G(x-8),v++)}function Y(){i=I=96;if(e=++e%4)
for(K?K+6?Z[a=h+K]|Z[a+B]?0:h=a:Z[h+(E=B%8?B*8:-B/8)]?0:B=E:0;K=k=i--;X[h]=2+t%
4|0,X[h+B]=2+t/4|0,f=Z[8+h]+Z[8+h+B])X[i]=Z[i];else if(h+=8,r||f){r?r=0:X=[Z=X]
for(Z[-5]=0;i--;B=8)Z[j=i-8]*!Z[i]&&(Z[i]=Z[j],Z[r=j]=0);if(!r)for(t=Math.
random(h=3)*16;I--;q=v=0)if(c=Z[I],c>1)G(I),c=-c,r+=q=v>3,G(I);e=r?3:0}for(i=S=
"";i<96;S+=i%8?"=$0179".charAt(c):"$<br>")c=X[i]|(Z[i]|=++i%8<2|i>88);
D.innerHTML=S+P;Z[3]*!r||setTimeout(Y,150)}e=3;Y(f=X=Z=[r=h=K=P=0])</script>


・操作方法
画面左側1/3をタップ:左に移動
画面右側1/3をタップ:右に移動
画面中央1/3をタップ:回転
※上が軸ぷよ、下が子ぷよです。回転タップ1回で軸ぷよの左に子ぷよが来ます。
回転タップする度に軸ぷよに対して、
下(初期位置)→左→上→右→下→……
となります。



削ろうと思えばもっと削れるんですが、
style=font-size:6em
これがないと、


小さすぎて遊びづらいです。
私は6emが遊びやすいと思いましたが、自分のスマホの画面に合わないという方はここの数字を変えてみてください。

また、
,event.preventDefault()
これがないと、画面が固定されず、早いタップで拡大したり画面が動いたりして物凄くやり辛かったです。

……というわけでまだ容量を削減できなくはないが、遊びやすさを維持するならこの辺が落としどころかな、という感じです。


もし落下速度が速すぎて(遅すぎて)合わない方がいましたら、
setTimeout(Y,150)
ここの150を変えてください。大きくすれば落下速度が遅くなります。
更新日時:2026/02/02 12:49
(作成日時:2026/02/02 12:35)
コメント( 0 )
コメントするにはログインが必要です
シェア