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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
嵐山二世

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

#1

投稿記事 by 嵐山二世 » 7年前

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

アバター
ぱにしん
記事: 58
登録日時: 8年前
住所: 滋賀

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

#2

投稿記事 by ぱにしん » 7年前

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ゲームを作っているのですが……

#3

投稿記事 by 嵐山二世 » 7年前

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

アバター
ぱにしん
記事: 58
登録日時: 8年前
住所: 滋賀

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

#4

投稿記事 by ぱにしん » 7年前

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

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

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

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

#5

投稿記事 by YuO » 7年前

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の方がよいと思います (これらは関連があるため)。

アバター
ぱにしん
記事: 58
登録日時: 8年前
住所: 滋賀

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

#6

投稿記事 by ぱにしん » 7年前

>YuOさん

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る