ページ 11

計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:31
by gest
私は今計算ゲームを作っているんですが躓いてしまいました。

↓ソース

codeタグを追加しました。 by softya(ソフト屋)

コード:

#include <stdio.h>
#include <time.h>
#include <stdilb.h>

int main() {

	int a ;			/*回答格納用*/
	int b ,c ;		/*問題生成用*/
	int i= q,w,e,r ;	/*式の-+/*の役目*/
	int q=+ ,w=- ,e=* ,r=/ ;

	printf("【計算ゲーム】\n");

	/*乱数を初期化する*/

	((unsigned)time(NULL));

	/*乱数の種をまく*/

	b = rand()% 100 + 1;
	c = rand()% 100 + 1;

	/*問題の表示*/

	printf("%d %d %d =%d",b,i,c,a);

	/*答えの入力*/

	scanf("%d",&a);

	/*問題の結果表示と分岐処理*/

	if(b i c ==a) {
		printf("正解!");
	} else {
		printf("残念…")
	}

	return 0;
}
まず-+*/
をどうやって乱数にするかが分からないです。


それを理解できればできるかなと思っています。・・・・

お願いします。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:36
by みけCAT
コードはcodeタグで囲んでいただけるとありがたいです。

コード:

char* enzansi={"+","-","*","/"};
printf("%s\n",enzansi[rand()%4]);
簡単に書くとこんな感じでしょうか。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:39
by みけCAT
答えの作成もですね。

コード:

int calc(int a,int b,int enzan) {
    int ans;
    switch(enzan) {
        case 0:
            ans=a+b;
            break;
        case 1:
            ans=a-b;
            break;
        case 2:
            ans=a*b;
            break;
        case 3:
            ans=b?a/b:0;
            break;
        default:
            ans=0;
            break;
    }
    return ans;
}
enzanの番号は前のレスと同じです。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:39
by box
gest さんが書きました:

コード:

	int i= q,w,e,r ;	/*式の-+/*の役目*/
	int q=+ ,w=- ,e=* ,r=/ ;
C言語の文法をしっかり頭にたたき込んでから
計算ゲームというアプリケーションを開発することを
強くおすすめします。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:45
by gest
おもにどういう文法を学んだ方がいいでしょうか?

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:49
by softya(ソフト屋)
gest さんが書きました:おもにどういう文法を学んだ方がいいでしょうか?
文法の基本的なところは満遍なく理解しないと作れないと思います。
この問題は課題ですか?それとも、何らかの入門書の問題ですか?

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:51
by gest
自分で興味があるんで作っているだけです。

ので一様時間はかけれます。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:54
by softya(ソフト屋)
何らかの入門書はお持ちですか?
あるいは、どこかの入門サイトは読まれていますか?

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 21:55
by gest
10日でわかるC言語入門

というのを読んでいます。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 22:07
by wing
質問とは違うんですが、
#include <stdilb.h>
は、
#include <stdlib.h>
ではありませんか?。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 22:10
by gest
すみません、間違えてましたw

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 22:15
by softya(ソフト屋)
そうですね。
・コンパイラを使って実際にコンパイル・実行されていますか?
・数値型、文字型の理解がされていません。変数もですが、printfの書式の理解も必要です。
・乱数の初期化の説明は「10日でおぼえるC言語」には無かったのでしょうか?
・もしかすると値の代入とか文の実行順序自体も理解されていない可能性があります。
・switch文は理解できますか?
ざっと、こんな所でしょうか?

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 22:19
by gest
softya(ソフト屋) さんが書きました:そうですね。
・コンパイラを使って実際にコンパイル・実行されていますか?
・数値型、文字型の理解がされていません。変数もですが、printfの書式の理解も必要です。
・乱数の初期化の説明は「10日でおぼえるC言語」には無かったのでしょうか?
・もしかすると値の代入とか文の実行順序自体も理解されていない可能性があります。
・switch文は理解できますか?
ざっと、こんな所でしょうか?

・コンパイラは使えます。

・数値型や文字型(char?)などはあまり理解できていません・・・

・一様初期化のやり方は書いてありました。もしかして間違っていましたか!?

・代入はわかっているつもりですが…

・switch文はあまり理解していません・・・・

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 22:27
by softya(ソフト屋)
・数値型や文字型(char?)などはあまり理解できていません・・・
書籍には書かれていないのですか?
・一様初期化のやり方は書いてありました。もしかして間違っていましたか!?
はい。関数呼び出しになっていません。
・switch文はあまり理解していません・・・・
これも書籍には書かれていないのでしょうか?
if文で代用できないこともないです。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 22:50
by box
gest さんが書きました: 一様時間はかけれます。
一様初期化のやり方は書いてありました。
日本語も勉強しましょう。
一様ではなくて、一応(いちおう)です。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月13日(水) 23:53
by 白い時空
簡単に、間違っている所を指摘しますと

コード:

int i= q,w,e,r ;    /*式の-+/*の役目*/
int q=+ ,w=- ,e=* ,r=/ ;
上の部分ですが、q,w,e,rを変数の宣言前に使っているので、エラーになるでしょう。
また、q,w,e,r と書くと実際には一番右の値が返されるので、
int i = r;
と同じになります。

次に下の部分ですが、int型は変数を入れるものであり、演算の記号は入らないです。
文字型charに'+','-','*','/'と、演算記号の文字を入れることで代用してください。

コード:

/*乱数を初期化する*/
((unsigned)time(NULL));
このままだと何もしないです。関数名が抜けてますね。

コード:

if(b i c ==a) {
iには記号が入ったりしないので、これは明らかにエラーになります。
みけCATさんの関数を参考にしてみてください。

Re: 計算ゲームが作れない・・・

Posted: 2011年7月14日(木) 07:18
by みけCAT
白い時空 さんが書きました:簡単に、間違っている所を指摘しますと

コード:

int i= q,w,e,r ;    /*式の-+/*の役目*/
int q=+ ,w=- ,e=* ,r=/ ;
上の部分ですが、q,w,e,rを変数の宣言前に使っているので、エラーになるでしょう。
また、q,w,e,r と書くと実際には一番右の値が返されるので、
int i = r;
と同じになります。
これは間違っている気がします。
Ideoneで試したところ、コンパイルエラーになりました。
コード

コード:

#include <stdio.h>
 
int main(void) {
        int q=1;
        int w=2;
        int e=3;
        int r=4;
        int i= q,w,e,r ;
        printf("i=%d\n",i);
        return 0;
}
エラーメッセージ

コード:

prog.c: In function ‘main’:
prog.c:8: error: redeclaration of ‘w’ with no linkage
prog.c:5: error: previous definition of ‘w’ was here
prog.c:8: error: redeclaration of ‘e’ with no linkage
prog.c:6: error: previous definition of ‘e’ was here
prog.c:8: error: redeclaration of ‘r’ with no linkage
prog.c:7: error: previous definition of ‘r’ was here
prog.c:8: warning: unused variable ‘r’
prog.c:8: warning: unused variable ‘e’
prog.c:8: warning: unused variable ‘w’
http://ideone.com/MHJFE

Re: 計算ゲームが作れない・・・

Posted: 2011年7月14日(木) 09:34
by 白い時空
すいません。完全に私のミスです。orz

コード:

int i= q,w,e,r ;
これ普通に見たら、qの値が入ったiとw,e,rを宣言してますね。

要はこの一文は下記と同じになりますね。

コード:

int i=q;
int w,e,r;
なので、これ以外の場所でw,e,rを宣言していれば、
複数宣言でエラーになります。