ページ 11

自分なりにOXゲームを作っているのですが……

Posted: 2013年3月22日(金) 19:05
by 嵐山二世
こんにちは
作りかけなのですが行き詰ったので相談です
http://www1.axfc.net/uploader/so/2839442 PASS「arasiyama」
○のターンのフラグが立っているので対応した位置のアルファベットを押すと□から○になるはずなのですが、□にままで変わりません。
配列に数字は入っているみたいなのですがその後がわかりません。
アドバイスお願いします。

Re: 自分なりにOXゲームを作っているのですが……

Posted: 2013年3月22日(金) 20:13
by ぱにしん
byausya関数の

コード:

	int a;
	for(a = 0; a<OOKISA; a++)
	{
			switch(dan1[OOKISA])
			{
			case NASI:
				printf("□");
				break;

			case MARU:
				printf("○");
				break;

			case BATU:
				printf("×");
				break;
			}
	}

以下三箇所のswitchについてですが、"dan1[OOKISA]"の部分が間違っています。
#defune OOKISA 3 とありますので、このままだと常にdan1[3]について判定してしまいます。

追伸
関数名のローマ字が間違っているようなので直しておきましょう。
オフトピック
defineとconstってどっち使うのがいいんでしょ

Re: 自分なりにOXゲームを作っているのですが……

Posted: 2013年3月22日(金) 20:44
by 嵐山二世
ありがとうございます。
switch(dan1[OOKISA])をswitch(dan1[a%OOKISA])と変えたところうまくいきました。
ローマ字はもっと気を付けるようにします。
オフトピック
経験が浅いので調べてみたりなどの意見なのですが、
constは変数や引数の時に少し違う機能になるみたいなので、
自分みたいな経験の浅い人間は機能が一つしかないdefineを使ったほうがいいと思います

Re: 自分なりにOXゲームを作っているのですが……

Posted: 2013年3月22日(金) 21:00
by ぱにしん
あれ、わざわざa%OOKISAにする必要ってあるんでしょうか?
OOKISAがフィールドの最大値である以上はaをOOKISAで割ってもa余るに決まってますのでそれでも確かに動きますが、それなら普通に添え字にはaを入れてあげた方が分かりやすいのでは?

分かりやすいかどうかは個人のこだわりの範疇なのかも知れませんが・・・

Re: 自分なりにOXゲームを作っているのですが……

Posted: 2013年3月22日(金) 22:16
by YuO
offtopic部分に反応。
ぱにしん さんが書きました:defineとconstってどっち使うのがいいんでしょ
嵐山二世 さんが書きました:constは変数や引数の時に少し違う機能になるみたいなので、
自分みたいな経験の浅い人間は機能が一つしかないdefineを使ったほうがいいと思います
Cにおけるconstは,対象が「変更不可能なオブジェクト」であることを表すもので,「定数」を表す物ではありません。

コード:

const int N = 10;

void func (void)
{
    int a[N];
}
というコード片は,C99ではvalidですがC90/C95ではinvalidなコードになります。
ただし,a[N]はa[10]と一緒ではなく,実行時に長さNの配列を作ることになります。
# C99ならNはconstでなくても動く。

C++におけるconstは,状況によっては定数を作り出します。
このため,

コード:

const int N = 10;

void func (void)
{
    int a[N];
}

コード:

void func (void)
{
    int a[10];
}
は真に等しくなります。
# 当然,constが外部結合を持つ,定義されていない対象に使われている場合は変更不可能なオブジェクト扱いです。


C++において,定数には#defineではなくconstまたはenum使うのが鉄則です。
Cにおいては
  • 列挙型がふさわしい定数にはenumを使う
  • 列挙型がふさわしくない定数の定義には#defineを使う
  • オブジェクトが変更不可能であることを示すためにはconstを使う
という使いわけになります。
今回だと,NASI/MARU/BATUはenumの方がよいと思います (これらは関連があるため)。

Re: 自分なりにOXゲームを作っているのですが……

Posted: 2013年3月22日(金) 22:31
by ぱにしん
>YuOさん

解説ありがとうございます。
C++とCではconstは違う意味を持ってるんですね。いきなりC++に手を出したからか知りませんでした。

もう一回入門書読んだりしてキッチリ調べ直すことにします。