« ○×ゲーム作成 | トップページ | ○×ゲームをやるとき »

2005/01/07

○×ゲーム改良

今日は昨日の続きで○×ゲームの改良を試みました
何をしたかというと本を適当に読み進めて30分くらいで必要そうなところだけ読んでGUIプログラムを作ってみようと朝鮮してみました。
ほぼまた昨日と同じくらい時間かかりました。朝9時から昼の3時くらいかなぁ。
まぁ時間は気にするなということで。

とりあえずVisualStudio.NETで新規プロジェクトを作成でGUIアプリの作れるプロジェクトを作ってみました。
ほとんど本の内容は理解していないのでちんぷんかんぷんOTL
VisualBASICを少し使ったことがあるので同じように操作してみる → コンパイルエラー。当たり前ですよねOTL
とりあえずフォームを作ってラベルに文字を表示するプログラムをつくるために本を少し読み返してみる。
VBのときは
label1 = "aaa"
みたいな感じだった気がするんですけどもちろんこれじゃぁダメ。
本を読んだら
Form1::label1->Text="aaa";
こうやるんだとか。これでボタンをクリックするとラベルにaaaと表示されました。
「::」だったり「->」(これは矢印なのかなぁ)を一緒に使うとは・・・。
Form1::label1::Text="aaa";
これのがわかりやすくないのかなぁ・・・。
まぁ文句を言ってもまったく意味がないのでとりあえず矢印として覚えておきます。
ひとまずラベルに文字を表示する方法は理解。(たぶんね・・・。
次は昨日作った○×ゲームを移植する作業。
いままでは盤を表示する関数を作ってそれを呼び出していたんですけどとりあえずそれはカット。
そんでいままで関数に渡していた数値を利用してボタンの文字を○か×にするようにしてみました。
そこでまたもや問題が・・・。
switchを使って渡された数値に応じて○とか×を表示させようとしたんですけどどうもうまくいかずデフォルト設定の"?"マークが表示されてしまう・・・。
原因はまったくわからずif elseを使ってswitchと同じ機能を作って実行してみると普通にできました。
原因はわかりませんがとりあえずできたなら問題ナシ!
ということでGUI版○×ゲームの完成です。

marubatu_2.zip

とりあえず完成!ということだったんですけどこれに画像を付けるだけなら簡単なのでは?と思って改良してみました。
まず初期状態でボタンの右側に盤を表示。その盤にあわせて9個の画像を表示するピクチャーボックスを準備して数字を書いた画像を1から9まで表示させておきます。
そしてボタンが押されたらその画像を○や×の画像に切り替える。という拡張です。
同時にボタンを押したときにボタンの文字も変わってしまうので、かわらないように処理を削除。
そしてまた問題がOTL
画像を表示させたいんだけど直接画像の名前をコードに書き入れてもコンパイルエラーでだめでした。
ここでまた本を読み返して試行錯誤。ひとまず画像を表示させる方法を見つけ実行。

どうやら画像のある場所をimage型の変数にアドレスとして代入してその変数を使って呼び出すようです。メンドOTL
そこでわかったからやってみよう~!・・・・・・・できないOTL
image型の変数を定義してそこに画像までのアドレスを格納するのかな。そんな感じで呼び出すみたいなんですけど変数をどこで定義すればいいのか。
グローバル変数と同じ場所に記入してみるもコンパイルエラー。
次にFormクラスの一番上に書いてもNG。結局ボタンがおされたときに変数の宣言を書いてみると成功。
というわけでボタン9個分すべてに同じ宣言を書いてみると名前の衝突のエラーもでずに無事コンパイル成功。

とりあえずVisualStudioでデバック無しで実行をしてみると無事完成!だったんですけどデバックありで実行してみるとなんかDBGファイルがないみたいなエラーが無数に並んでいます・・・。ちょうど親がAirH”持ってきてたんでネットで調べてみると別にそのエラーはまったく問題ないとか。とりあえず安心して完成~と思って直接コンパイルされたEXEファイルを実行してみると無事起動。
しかし・・・・・。ボタンを押してみるとエラーが・・・。「値が無効です」みたいなエラーが表示されて強制終了。
ネットで調べてみるも情報は無し。
なんでだろうなぁと思ってなんとなく画像やソースファイル、EXEファイルなど関係しそうなものをすべて同じフォルダにコピーして実行してみるとできた~~~~~!感動でしたw
どうやら画像ファイルは同じフォルダにいれておかないとだめらしいです。VisualStudioで実行するときは別に同じフォルダになくてもできていたし、起動直後に表示されるように設定してあった数字の画像や盤の画像は表示できていたんで画像もひとつにまとめられているのかなぁと思ってたんですけど違ったんですね
とりあえず原因がわかってよかったですよ。
そして最終的に完成したのがこちら

marubatu_3.zip

途中で大事なコードを削除してしまったのかフォームにボタンやら画像やらがなくなってしまい事前にとっておいたバックアップからまたやり直ししたりしたんで以外と時間かかりました・・・^^;
でも完成したことにはしたんで気にしないことにしますw

ここで思ったことなんですけどGUIのようなフォームのあるプログラムは一連の流れというものが無いのかなぁという印象が残りました。
コンソールだとメイン関数を上から順番に実行していくのでプログラムの流れが作りやすいんですけどフォームを持たせるといまいち流れというものが感じられないので苦戦しました。
流れがないというのはコンソールだと上から順番に処理を実行していってたとえば数字を入力させたいときにはそこに入力を受けるように処理を書けばいいんですけどフォームのものだとボタンが押されたら処理を実行する。という感じなのでいままでと違うなぁと。
まぁ逆に言えばそれによってプログラムの幅が広がるのかなぁとは思うんですけど今まで勉強していたのがコンソールだけだったのでわかりにくかったのかなぁと。
まぁ目標はフォームを持ったアプリなのでこれからがんばりたいと思います。

« ○×ゲーム作成 | トップページ | ○×ゲームをやるとき »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: ○×ゲーム改良:

« ○×ゲーム作成 | トップページ | ○×ゲームをやるとき »