2025年の大阪万博のロゴが発表された瞬間、Twitterがロゴの大喜利祭りになりました。
シンプルながらも、愛らしくとも不気味とも見える、ある意味ロゴらしくない不思議なデザインにみんな魅了されたようです。突っ込みどころがいっぱいある、隙がとても良かったのかも知れません。
自分も、あっ、これ動かしたい!と思いました。
みなが数時間であげてたので祭りには乗り遅れたものの、これまで自学してきたPICO-8のいろいろを短時間でまとめて、ゲームのようなものを作ってみました。
もともとは動かしたい!から始まったものなので、ゲームは二次的なものです。動作の全てが乱数で作られているので、アルゴリズムはありません。
ゲームというにはややおこがましい。
コード部分だけ以下に公開します。
function _init() k=0 anim={ 164,166,168,166 } t=0 bub={} snw={} _swim={ x=72, y=74, s=2, dx=0, dy=0, f=false } sb=0x6000 rs=0 end function move_swim() if _swim.dx>0 then _swim.dx-=0.02 end if _swim.dx<0 then _swim.dx+=0.02 end _swim.dy-=0.1 if btn(0) then _swim.dx-=0.2 _swim.f=true end if btn(1) then _swim.dx+=0.2 _swim.f=false end if btn(4) then _swim.dy+=0.2 end if _swim.dx>1 then _swim.dx=1 end if _swim.dx<-1 then _swim.dx=-1 end if _swim.dy>1 then _swim.dy=1 end if _swim.dy<-1 then _swim.dy=-1 end _swim.x+=_swim.dx _swim.y+=_swim.dy if _swim.x>109 then _swim.x=109 end if _swim.y<0 then _swim.y=0 end if _swim.y>109 then _swim.y=109 end end function move_babble() for o in all(bub) do if o.l>0 then if t%4==0 then o.r+=0.2 end o.x-=o.dx o.y-=o.dy o.l-=1 else del(bub,o) end end for o in all(snw) do if o.x>0 then o.x-=o.dx else del(snw,o) end end if t%5==0 then add(bub,{ x=_swim.x+8, y=_swim.y+8, r=0, dx=flr(rnd(2)+1)/2, dy=flr(rnd(3)+1)/2, l=flr(rnd(20)+20) }) add(snw,{ x=127, y=flr(rnd(127)), dx=flr(rnd(6)+2)/2 }) end end function text(t,x,y,c) print(t,x-1,y,1) print(t,x+1,y,1) print(t,x,y-1,1) print(t,x,y+1,1) print(t,x-1,y-1,1) print(t,x+1,y+1,1) print(t,x,y,c) end function _update60() t+=1 pal(3,129,1) pal(14,140,1) cls(3) k+=0.2 move_swim() move_babble() rs+=0.01 end function _draw() fillp() rectfill(0,116,127,124,0) rectfill(0,110,127,114,3)--bk fillp(0b0101101001011010.1) rectfill(0,99,127,104,1)--db chk rectfill(0,91,127,99,1)--db rectfill(0,0,127,90,14)--db fillp(0b0101101001011010.1) rectfill(0,86,127,90,3)--db chk fillp(0b0101111110101111.1) rectfill(0,82,127,85,3)--db chk fillp() rectfill(0,5,127,5,12)--db fillp() rectfill(0,0,127,3,12)--db for o in all(bub) do circ(o.x,o.y,o.r,7) end for o in all(snw) do circ(o.x,o.y,o.r,7) end memcpy(0,0x6000,128*64) for y=0,127 do local rx=flr(sin(rs+y/100)*4) sspr(0,y,128,1,0,y+rx,128,1) end reload() spr(anim[flr(k)%4+1],_swim.x,_swim.y,2,2) text("cpu:"..stat(1),2,10,7) text("rs:"..flr(sin(rs+1/100)*10),2,18,7) end