昔作ったゲームを振り返る

これはアドベントカレンダー25日目の記事です。なんでトリなんて選んだんでしょうね。

特に書くこともないので昔作ったゲームでも紹介します。
1つ目はブロック崩し。
僕が初めて作ったゲームです。javascriptとhtmlで作りました。

2つのゲームを同時にクリアさせる必要があります。カーソルは1つなのでなかなか忙しいです。当てるなってやつに当てると画面が変化して見づらくなります。初めて作ったにしてはなかなかいい発想してたと思います。


2つ目は人生ゲーム。何番目に作ったのかは覚えてません。
小学生のころ考えた留置所と戦争に行くという要素を含んだものです。
ほかにも途中で無職になったり、事故を起こして裁判になったりと、およそ市販できないようなマスを用意しています。最近のマスがどんなものか知りませんが。大体所持金がマイナスになるというそれはひどい人生ゲームです。ちなみに画像は無職なのに車を買って事故を起こし、裁判で賠償金490万払ったところです。賠償金安すぎですね。

3つ目は陣取りゲームです。某イカのゲームが流行っていたので作りました。

右にあるいろいろな塗り方から選んで盤面を塗っていきます。緑色の場所しか選べず、盤面がすべて赤色か青色で塗られたらゲーム終了。色の多いほうが勝ちです。一番右にある4つはスペシャル技で、1種類だけ使えます。正方形が強かった気がします。

最後はトランプオセロ。これだけ大学に入ってから作ったものです。部室でトランプで遊んでた時にふと思いついたのでゲームにしたものです。

トランプでオセロをすることで、単純に表の数でなく数値の和で勝敗を決める戦略性、裏が同じ模様のトランプであることから両者が使える裏というおき方、裏返ったカードの色と数値を記憶する必要があるという神経衰弱要素、そしてジョーカーを使うことで場のカードを1枚ひっくり返せるという逆転要素が盛りだくさんです。自分の周りでは結構評価高かった気がします。

こうして振り返ってみるとなかなか頑張ってたなという気がします。今はこんな気力はないですけど、また面白そうなもの思いついたら形にしておきたいですね。たとえ日の目を浴びなくても、こうして思い出すことで自分も頑張ってたんだな、とか面白いこと考えてたな、とか懐かしい気持ちになれるなら形にした意味はあるんじゃないでしょうか。

SHARP Brain 用アプリケーションの作成方法

投稿: 2020年12月20日 最終更新: 2021年5月16日 投稿者: watamario15

この記事は OUCC Advent Calendar 2020 の 20 日目の記事です。

OS として Windows Embedded CE 6.0、CPU に ARM926EJ-S (ARMv5TEJ) を搭載する電子辞書 SHARP Brain 用アプリケーションの作成方法を簡単に解説していきます。これについてまとまっているサイトがあまりない印象なので。

注意点

  • ここで取り扱うものは、SHARP 公式の内容ではありません。普通、フリーズなどが起こった場合もリセットボタンを押せば元に戻りますが、万一何かが起こった場合も一切保証できませんので、自己責任で試してください
  • 新機種の多くには、SHARP 公式のソフトウェア以外を起動できなくするプロテクトが掛かっています。具体的には、ビジネスモデル (PW-SBx) を除く PW-Sx4 以降の機種がそれに該当します。そういった機種での起動方法は、Brain Wiki の該当ページを参照してください。
  • ここの表で第1世代から第4世代に分類されている機種を対象とします。なお、2021年発売の第5世代に該当する機種用のソフトウェアは、この記事の方法では作成できません。詳細はこちら

作成するソフト

この記事では、プログラミングより開発手順(開発環境やコンパイル方法など)の解説に重点を置くため、非常に単純なプログラムを使用します。OUCC_Advent_2020.cpp をダウンロードしてください。

開発環境

以下の 3 通りを解説していきます。

  • Microsoft eMbedded Visual C++ 4.0
  • Pocket GCC
  • CeGCC

電子辞書での実行方法について

内部ストレージまたは micro SD カードの「アプリ」フォルダに(なければ新規作成)、空のフォルダを作成し(フォルダ名はメニューに表示させたい任意の名前。日本語もOK)、その中にコンパイルして得られた実行ファイル(AppMain.exe になっていなければ AppMain.exe にリネーム)と、 index.din (ダミーの空ファイル) を入れてください。これで、注意点で記載したプロテクト付き機種でなければ「アクセサリー」->「追加コンテンツ」->「追加アプリ・音声」(機種によって違う可能性あり)に表示され、実行できるようになります。加えて、Sx1 世代以降の機種の場合、AppMain.cfg (ダミーの空ファイル) も加えることで高解像度状態のまま実行できるようになります。

なお、index.din 及び AppMain.cfg は空のテキストファイルを作成し、ファイル名を index.din, AppMain.cfg (もちろん元の拡張子 .txt は消す) に変更するだけで作成が可能です。ちなみに、ceOpener などの別ツールを導入済みなどで、 exe ファイルを直接実行する場合は以上の作業は不要です。どんな名前でもどこに置いても構いません。

Microsoft eMbedded Visual C++ 4.0

知る人ぞ知る、大昔(2000年辺り)の Windows CE 用 Microsoft 純正無料 IDE です。おそらくこれが最も使いやすいと思いますが、激古なので C++ の新しい機能はほぼ使えないことと、Windows 2000 と Windows XP でしか動作しないという難点があります。私は組み込み機器に C++ の最新機能など期待していない(笑)ことと、奇跡的に何とかギリギリ動作する Windows XP パソコンを所有しているという理由で現在主に使っています。ただし後述の CeGCC が使いこなせるようになったら乗り換えるかもしれません。

(2021年3月11日追記) Windows 10 での動作に成功しました。互換性オプションで何とか動作しているレベルで、完全な状態ではないし何か問題が生じることもあり得るので推奨はできませんが、どうしても Windows Vista 以降の PC でこの環境を使いたい場合はここを参考にしてください(以降の説明は Windows XP を前提としています)。

環境構築

まず、 Microsoft Download Center からダウンロードしてください。これは自動解凍式の圧縮ファイルになっているので、実行して適当な場所に解凍してください。それで得られたファイルの、setup.exe を実行し、あとは手順に従ってください。なお、途中でプロダクトキーを聞かれますが、先ほどのダウンロードページの「インストール方法」欄に記載されているものを入力すれば大丈夫です。

次に、Service Pack 4 をダウンロードして同様の手順でインストールします。

最後に、Windows CE 5.0 の Standard SDK をダウンロードし、インストールします。SHARP Brain が対象の場合はこちらを推奨しますが、古い他の CE4 系デバイス(シグマリオン3など)も対象とする場合は最初にインストールした setup.exe と同階層にある SDK フォルダに入っている setup.exe を実行し、指示に従いインストールします。なお両方インストールすることも可能で、その場合ビルド時にどちらを使用するか選択できるようになります。

プロジェクト作成・ビルド

まず、左上の「ファイル(F)」から「新規作成」をクリックしてください。その後、下の画像のように設定してください。CPU に関して、 SHARP Brain は ARMv5TEJ ですが、このコンパイラにはないため ARMv4I を選択してください(SHARP Brain 以外の CE 端末用のコンパイルも行いたければ、ARMv4I に加えてその他の CPU を選択してもかまいません)。設定できたら「OK」を押してください。

ここでは、「空のプロジェクト」を選択してください。

次にプロジェクト概要の画面が出るので、OKを押してください。これでプロジェクトが作成されます。

その後、左を FileView に切り替え、Source Files を右クリックしてソースファイルを追加してください。分かりやすくなるよう、ソースファイルはプロジェクトフォルダ内に予め入れておくことをお勧めします。

ソースファイルが追加できたら、FileView から先ほど追加したファイルをダブルクリックすると、画面内にソースファイルが表示されます。ここでプログラムを編集することが可能です。今回はソースファイルを UTF-8 エンコードしたため、コメントの日本語が文字化けしていますが無視してください(気になるようなら Shift_JIS でエンコードし直してください)。というか何で WinCE は Unicode のみ対応なのに eVC4 はUnicode 非対応なのだろうか…

ここで、SHARP Brain で実行する際は AppMain.exe になっていた方が色々とうれしいので、デフォルトでこの名前になるように設定しておきます。「プロジェクト」->「設定」を開き、「リンク」タブに移動すると下のような画面になるので、画像のように出力ファイル名を編集して OK を押してください。

最後に、画面左上の「STANDARDSDK」という部分では、利用する SDK を指定します。STANDARDSDK_500 が Windows CE 5.0 用の SDK です。

これで準備完了です!では、下の画像の赤丸で囲ったボタンを押してください。

ビルド終了後、以下のようなメッセージが出ますが無視してください。コンパイルエラーがなければコンパイル成功です。

プロジェクトフォルダの ARMV4IDbg に AppMain.exe が生成されているはずですので、電子辞書にコピーしてして実行してみてください。以下のように表示されれば成功です!

ちなみに、 この記事では扱いませんが Win32 (WCE ARMV4I) Debug と書かれているプルダウンメニューから、Release ビルドへの切り替えや他の CPU の選択(最初にチェックボックスを付けていた場合)が可能です。

Pocket GCC

例によって激古ですが、SHARP Brain 上でのセルフ開発が可能な GCC の Windows CE 移植版コンパイラです。上のコンパイラよりさらに機能は限られますが、Windows XP の骨董品 PC が不要でかつ扱い方が確立しているので紹介しておきます。

準備

手順が非常に多くここに書くのはあまりに大変なので、Brain Wiki のページ を参照してください。

一通り終わったら、OUCC_Advent_2020.cpp を win.cpp に改名したものと WINBUILD.BAT (右クリック -> リンク先を保存)を電子辞書内の同じフォルダに入れてください。この際、WINBUILD.BAT の2行目と3行目を環境に合わせて編集しておいてください。

その後、DOS窓Open から WINBUILD.BAT の所まで移動して(空白や日本語を含んでいてもクォーテーション不要で普通に cd でいけます)実行してください。するとそこに AppMain.exe が生成されるので、それを実行して前節の eVC4 の最後の画像のようになれば成功です!

ちなみに、この記事では説明しませんが WINBUILD.BAT は resource.rc があった場合、それも含めてコンパイルするようになっています。その際、34行目の -l commctrl は CeGCC に commctrl.lib が含まれないため削除してください。一応、eVC4 の SDK からこのファイルを持ってくると使えるようにはなりますが。

CeGCC

つい先日知ったばかりで、私も未だに扱い方がよく分かっていないコンパイラです。しかし、最新の Debian (Ubuntu も OK) でコンパイル可能(WinXP 不要!)でかつ、なんと GCC 9.3.0 ベース!!!!(執筆時点で Windows 版 MinGW より新しい)という、今まで 2000 年前後のコンパイラを使っていた私には衝撃の見過ごせない特徴を持っていたので、紹介することにします。

前提

Windows Subsystem for Linux の Ubuntu で説明します。おそらく Debian や通常版の OS でも同じような方法でできます。

なお、基本的に公式サイト(とはいえ有志の個人開発者様ですが)である cegcc/mingw32ce (kellermann.name) に記載の手順に沿って説明していきます。

環境構築

/etc/apt/sources.list ファイルに、以下の 1 行を追加します(元サイトとは少し違いますので注意)。

deb [trusted=yes] https://max.kellermann.name/debian cegcc_buster-default main

この作業にはテキストエディタを用いても構いませんが、今回はファイルの末尾に足すだけですので、以下のコマンドを実行すればよいです(1 行目は改行、2 行目は実際の追記)。

sudo bash -c 'echo >> /etc/apt/sources.list'
sudo bash -c 'echo "deb [trusted=yes] https://max.kellermann.name/debian cegcc_buster-default main" >> /etc/apt/sources.list'

その後、以下のコマンドを実行してパッケージをインストールしてください。

sudo apt update
sudo apt install gcc-arm-mingw32ce

終わったら、以下のコマンドを入力してください。

arm-mingw32ce-g++ -v

以下のような出力が得られれば環境構築は終了です。お疲れさまでした!コマンドが見つからないというエラーが出た場合は、正しくインストールできていませんので今までの手順をもう一度確認してください。

Using built-in specs.
COLLECT_GCC=arm-mingw32ce-g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/arm-mingw32ce/9.3.0/lto-wrapper
Target: arm-mingw32ce
Configured with: ../../../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-mingw32ce --disable-dependency-tracking --prefix=/usr --syscon
fdir=/etc --with-gcc --with-gnu-ld --with-gnu-as --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --dis
able-interwork --without-newlib --enable-checking --with-headers --disable-__cxa_atexit
Thread model: win32
gcc version 9.3.0 (GCC)

なお、 Cygwin 用は別の方がビルドしてくださっているようで、ここからダウンロードすれば使えるかもしれません(試していないため不明)。その他 Debian 系でない Linux で使用する場合は、ソースからのコンパイルが必要です。前提の所に書いた公式ページを参照してください。

ビルド

OUCC_Advent_2020.cpp を配置したディレクトリで、以下のコマンドを実行してください。

arm-mingw32ce-g++ -Wall -O2 -std=gnu++2a -march=armv5tej -mcpu=arm926ej-s -static -s -lcommctrl -o AppMain.exe OUCC_Advent_2020.cpp

成功すると AppMain.exe が生成されるので、電子辞書にコピーして実行してください。なぜか全画面表示にはなりませんが(ShowWindow(hWnd, SW_MAXIMIZE); が利いてないっぽい?)、下のようなウィンドウが表示されれば成功です!

追記

急ごしらえで sh スクリプトを作成しました。Build_CeGCC.sh を、コマンドラインオプションにソースファイル名を指定して実行すると AppMain.exe が出力されます。カレントディレクトリに resource.rc があればそれも併せてコンパイルします。

(2020年12月22日更新) 上記のコンパイルコマンド及び sh スクリプトを、新たな知見 (strip) に基づき更新しました。これにより、スタティックリンクを行うと実行ファイルが巨大化する、場合によって起動が遅くなったりメモリ使用量が増える問題は解消しました!!ShowWindow(hWnd, SW_MAXIMIZE); が利かない問題はまだ解消できていませんが、eVC4 から CeGCC への乗り換えが現実味を帯びて来たかも…?

(2021年3月28日更新) ShowWindow(hWnd, SW_MAXIMIZE); が CeGCC で利かない原因が判明しました。どうも CeGCC のヘッダファイルは通常版 Windows 用のものを流用しており、さらに Windows CE での定数は通常版 Windows とは一致しないようです。よって、今回の場合 SW_MAXIMIZE がコンパイル時に Windows CE における正しい数値に展開されなかったことが原因です。これ以外にも同様の問題は存在し、例えば最小化ボタンを表示させたはずが最大化ボタンが出たりします。なぜ定数を通常版 Windows と一致させなかったのかと Microsoft を恨みたくなりますが、eVC4 等の他のコンパイラに付属のヘッダファイルを参考に直接書き換えたり、ヘッダファイルごと置き換えてしまったりして対応することになると思います。

おわりに

今回は、SHARP Brain 用ソフトウェア開発の方法をまとめました。もしかしたらこういうのは Brain Wiki を拡充する方針で書くべきだったのかもしれませんが(笑)、参考になれば幸いです(2021年3月11日追記: ちゃんと書きました)。SHARP Brain のハックに興味がある方は、Brain での Linux 起動など、様々な挑戦が行われているコミュニティ Brain Hackers があります(ここに紹介があります)ので、そこに参加してみても面白いかもしれません。ただし、Brain Wiki 及び Brain Hackers は当部(OUCC; 大阪大学コンピュータクラブ) とは一切無関係ですのでご注意ください。

なお、今回は Windows API プログラミングについては一切触れていません。興味がある方は、Windows プログラミング入門 – Web/DB プログラミング徹底解説 が参考になると思います。ただし、C/C++ をそれなりに理解していることが求められます。また、最も原始的な方法となるため、比較的レベルが高くなります(高2の頃、Hello, world! にたどり着くまでに 1,2 週間かかりました)。さらには調べてもなかなか出てこない Windows CE の独自仕様も相当あるので(Command Bar が代表例)結構大変です。でも電子辞書で自作ソフトが動作する感動はなかなかなものです!

ちなみに、執筆者もいくつかの SHARP Brain 用ソフトウェアをオープンソースで公開しています。執筆地点では素因数分解プログラム超大量ファイル整理KN MemoPad 機能追加版 がありますので、もしよければ使ってみてください。Windows API プログラミングに関しても何か参考になるかもしれません。

では、ここまでお読みいただきありがとうございました!OUCC では、現在も部員を募集中です。興味がある方は、ぜひご気軽に Discord 新歓サーバー にご参加下さい!