2020年の振り返り ~技術編~
お久しぶりです。今回は今更ながら2020年の振り返り記事になります。
年末年始はCyberpunk 2077にハマっていて書けず、春休みに入ってから暇なときに少しずつ書いていたものの、もう4月になりそうだったので急いで仕上げました。
いっそ2020年"度"にしちゃおうか迷いましたが、来年書く内容が減るのでこのまま出します。
作ったもの
2020年に作って公開したもののまとめです。過去にブログ記事を書いたものは一言程度になってます。
ポートフォリオサイト
作った頃よりは充実してきましたが、もっとコンテンツ量を増やしていきたいですね。
stsmapgen
思いつきで作ったせいで名前がすごく適当です。結構反響があったので、ちゃんとした名前をつけるべきでした。
初めてスターが100になったリポジトリです🌟
Discordで通知するやつ
案外通知したいものがなく、いまだに学科掲示板の更新しか通知していません。
リモコン
今でも毎日使っており、自分が作ったプログラムの中でも一番実用的です。
Astraea
こちらもstsmapgenに続いて100スター到達しました!あるとき急にスターが増えたので誰かが紹介してくれたのかもしれません。
ここからは記事にしていないプログラムたちです。
BIB
SHIBUYA PIXEL ART 2020というコンテストに応募するために作りました。
こちらのページから遊ぶことができます。
PICO-8という、レトロなゲームが作れる環境を使っています。
渋谷で待ち合わせをしていた宇宙人が間違えて原宿に降り立ってしまったため、渋谷を目指すというストーリーです。原宿に向かうゲームの中身はChromeのアレとほぼ同じになっています。
コンテストの締め切り1,2週間前に作り始めたこともあって、BGMを作る余裕がなかったのが心残りです。
コンテストでは惜しくも受賞できませんでしたが、もぐらゲームスさんの記事で紹介していただきました。
Braille
某インターンの、「外部ライブラリを用いずにC++を使ってCUIのゲームを作る」という課題で作ったゲームです。
CUIのゲームだと似たり寄ったりのものが多くなってしまうと考え、ビジュアルには気を遣いました。
ドット絵の表現に点字を用いているのが特徴です。コンソール画面でドット絵を表現するには、文字の背景色の指定やSetPixel()などいくつかの方法があります。今回は敢えてCUIらしさを残すために点字(U+2800~U+28FF)を使ってみることにしました。
ゲームの内容はFlappy Birdです。本当はFlappy Birdをベースにしたシューティングゲームにしたかったのですが、時間が足りませんでした。時間配分には気をつけるようにしたいです。
当時作った紹介PDFがあったので貼っておきます(スマホだと少しレイアウトが崩れるかもしれません)。
箱詰めパズル
夏以降は忙しくてなかなかプログラミングができてなかったのですが、授業で箱詰めパズルのプログラムを作っていました。
最近ブログやTwitterの更新ができてませんが授業でこんなものを作ってました #OpenSiv3D pic.twitter.com/22KHh9cWGJ
— torin (@yurkth) January 20, 2021
箱詰めパズルとは、複数の正方形からなるピース(ポリオミノ)を盤面に敷き詰めるパズルゲームです。上の画像は6つの正方形からなるヘキソミノのパズルになっています。
授業で作ったメインの部分は、画像右下にあるボタンから呼び出せるヒント機能です。箱詰めパズルの解を探索して、ヒントを教えてくれます。
解の探索にはバックトラック法を採用しています。Dancing LinksとKnuth's Algorithm Xという手法を使うと、さらにパフォーマンスがよくなりそうなのでこれも近いうちに実装したいです。
まだGitHubでは公開していませんが、Algorithm Xの実装が終わったらあげる予定です。
気になったもの
最近気になった技術とかについてです。
Godot Engine
近年話題になっているオープンソースのゲームエンジンです。GitHubのgamedevタグがついているリポジトリの中でもトップのスター数となっています。
もともと2Dの開発に強いエンジンでしたが、最近のバージョンでは3Dの機能も続々と実装されているそうです。
なんと昨年のGMTK Jamでは、Unityに次ぐ使用率を記録しました。
I asked the developers of 5,400 game jam games what they used to make their game. Here’s the results: pic.twitter.com/gPaRlowxcF
— Game Maker's Toolkit (@gamemakerstk) July 25, 2020
実装にはPythonをベースにした独自言語のGDScriptを使えるほか、C++やC#もサポートしています。
昔使っていたUnityは2Dの(特にドット絵の)ゲームを作るのが面倒だったので、そのあたりがかなり楽になってそうなGodotは気になっています。
Pixelbox
JavaScriptを使ってレトロなゲームが作れるゲームエンジンです。イメージとしては、BIBに使ったPICO-8をさらに拡張した感じでしょうか。
Pixelbox 2.0 is finally released: https://t.co/kgyhlodAWv Make 2D retro games with JavaScript without the hurdles of HTML5 development. #gamedev | #indiedev | #HTML5 | #javascript pic.twitter.com/Zf89sdx3my
— Cedric Stoquer (@cstoquer) April 12, 2020
PICO-8で悩まされた多くの制限をゆるくしつつ、ピクセルパーフェクトな描画やパレットを用いたスプライトなどを扱えるのがすごく良さそうです。
1人で開発を行っているようなので、新機能の追加やバグ修正のペースが遅いかもしれないという点が気になります。
同じようなレトロなゲームを作れる環境(ファンタジーコンソールと呼ばれます)では、NICOやquadplay✜も気になっています。
Svelte
最近登場したフロントエンドのフレームワークです。
Vue.jsやReactと比べても、とにかくシンプルに書けそうです。
まだ足りない機能も多いようで、大きいWebアプリを作る場合は向かないかもしれません。
いずれ作ろうと思っているSpratorのWeb版でこのSvelteを使おうか迷っています。
まとめ
2020年の後半は忙しくてあまりプログラミングができませんでしたが、今年は色々作っていきたいです。
いくつかゲームジャムに参加できたらなと思っていますが、卒論の忙しさ次第です。
記事後半のゲーム編はこちら。文章量的にはこっちが本編です。