iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

昔作ったプログラムを見て

お久しぶりです、今回のブログ担当のシロハです。
年末に実家に帰った際にPCのデータを見ていて、
昔作った七ならべのプログラムを見つけたので、
それを見ながら考えたことについて書いていこうと思います。

作ったきっかけとか

このプログラム自体はまだ大学生の時に作成したもので、
VisualStudio+DXライブラリを用いて、C言語で作成しています。
作ったきっかけは、大学のゼミがプログラム関連の所で、C++について触る機会があり
プログラムをそれぞれ作ることになりました。
その時に作ったのが七ならべのプログラムです。

そのプログラムのスクリーンショットが下の画像です
f:id:ipx-writer:20180127220537p:plain

その時は自分がルールを知っている何かを作ろうと考えて、
トランプなんかわかりやすいのではないか?みたいなノリで作り始めました。

処理とかフローとか

七ならべはそれぞれの手番や中間処理がありますが、それぞれの処理をブロックとして考えて作っています。
プログラムのフローは、

1:(プレイヤーの手番)トランプを選択する⇒2へ or 手番をパスする⇒3へ
2:(中間処理)選択したトランプが場に出す条件を満たしている: yes⇒3へ, no⇒1へ
3:(相手の手番)場に出せるトランプを探索する ⇒ 4へ
4:(中間処理)場に出せるトランプを見つけたら場に出す。なければパスする ⇒ 1へ

こんな雰囲気フローでプログラムを作ってます。
といっても、フローを紙に書き起こしてすらいませんが。
大学で、しかも半分趣味で作ったようなプログラムで、ちゃんとした開発でもありませんでしたので。
ただ、社会に出てからはそんな適当だとだめですね。
ちゃんと仕様決めて、フロー起こして、ってやらないと・・できてるかどうかは別として

ただ、七ならべのルールや処理が分かっている以上
'何を作ればよいか' が分かっているから適当でも作れたのだと思います。

作り方に関して

コードは上のそれぞれのフローをブロックごとに記述し、それぞれを独立させています。
その結果どうなるかといえば、一つ一つのブロックごとにデバッグが可能になります。
バグが出た時にバグを取り除くことは、プログラムが大規模になるほど難しいと思います。
ですが、それぞれをブロック化して作っていけば、
それぞれのブロックごとにデバッグや動作確認できるようになります。
一番良いのは、それぞれのブロックを作る⇒動作確認⇒問題なければ次のブロックの作成⇒・・・
といった流れですが。


こういった作り方は今でも必要だと思ってます。
ただ、作るものの規模が大きくなると検証するブロックの数が多く、
それぞれの検証にも時間がかかってしまいます。
その結果、動作確認がおろそかになり・・・
そして組み合わせた結果、想定通りに動かなかったり、
バグがあったりするといわゆる手戻りが発生します。
最近業務で同じようなことが起きたので、やはり一つ一つ動作確認するのは大事だと改めて感じます。

そういえば、この時に初めて構造体に手を出しました。
それぞれのトランプの数字・絵柄(対応する画像)・トランプを出せる条件・
トランプを表示する場所(画像表示するときのX・Y座標)
などトランプの持っているそれぞれの情報、
あるいはプログラムの都合で持たせたい情報を構造体で持たせる形にしています。
トランプの情報をどうやって管理しよう、と考えて調べていたら '構造体' が出てきて
これ使えるかも、と思ったのが懐かしい


プログラム以外のこと

トランプの画像はネットから52枚組のトランプの画像を探してきて、
それをまたフリーのGimpという画像編集ソフトを使って1枚1枚切り分けてから使用してます。
七ならべのプログラムを作る少し前に別件でGimpを触ったことがあったので、迷うことなく選択。
有償の画像編集ソフトがどんな感じなのかはよく知りませんが、よく知らない人からしたら
Gimpは便利な画像編集ソフト、って感じです。

終わりに

今思えば、背景が真っ黒なのはさみしいし、手札の順番も整理していない
(上のスクショでも絵柄、数字の順番がばらばら)。
当時そこまでやろうと思ってなかったとはいえ、これはひどい・・
ただ、自分のなかで作ろうとしているもののイメージを固めて、
それをプログラムという形で書き起こすのは楽しいというのは覚えてます。
あと、本文中で触れていませんでしたが、筆者は大学は数学科でした。
そのため構造体も学んだようなそうでないような・・だったり、
クラスも学んでいない(はず)な状態で作ってます。
そんな感じで筆者の少し昔を思い出しつつ、自分の作ったものの良いところと悪いところを見直そうという回でした。