ページ 11

一桁の足し算の記憶力を試すプログラム を作りたいです。

Posted: 2016年10月08日(土) 21:44
by task
一桁の足し算の記憶力を試すプログラム
を作りたいです。


最初まず、問1 1+3= 問2 2+3=  問3 4+9= とランダムな
足し算の計算問題を出題し、ユーザーに記憶してもらう。

 ↓

次に問4 2+3= の計算問題を出題すると同時に「問1」で出題した計算問題の
「答え」をユーザーに質問する

ユーザーの答えが正解なら○、不正解なら、×を表示する。

次に問5 2+3= の計算問題を出題すると同時に「問2」で出題した計算問題の
「答え」をユーザーに質問する

ユーザーの答えが正解なら○、不正解なら、×を表示する。

以下問題を同じように繰り返していき全30門でゲーム終了。


このプログラムを作る上で、全体の構成要素としてどのような要素(関数など)を組み合わせれば
ゲームを完成できますか?現在C#の初歩を勉強中です。さらに、発展させて数字だけでなく音声版
のたし算(視覚障害者用)なども作っていこうと考えてます。

とりあえず、まずはプログラムを構築する上での全体像と構成要素が一番知りたいです
ご教授よろしくお願いします。

Re 一桁の足し算の記憶力を試すプログラム を作りたいです。

Posted: 2016年10月26日(水) 22:39
by Re

コード:

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

void main(void){

int i,j,i2,j2,i3,j3,k,g;

 srand((unsigned) time(NULL));


for(g=1;g<=30;g++){

if(g%6==1){
	
	i=rand()%10+1;
	j=rand()%10+1;
	printf("%d問目:%d+%d=%d\n",g,i,j,i+j);
	
	
}else if(g%6==2){
	
	i2=rand()%10+1;
	j2=rand()%10+1;
	printf("%d問目:%d+%d=%d\n",g,i2,j2,i2+j2);
	
	
	

	
}else if(g%6==3){
	
	i3=rand()%10+1;
	j3=rand()%10+1;
	printf("%d問目:%d+%d=%d\n",g,i3,j3,i3+j3);	
	printf("記憶したら何かキーを入力して下さい");	
	
	char t;
	t=getch();
	
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");	
	
	
}else if(g%6==4){
	
	printf("%d問目:%d+%d=",g,i,j);
	
	scanf("%d",&k);	
	
	if(k==i+j){
		printf("○\n");
		
	}else{
	printf("×\n");
		
	}
	
	}else if(g%6==5){
	
	printf("%d問目:%d+%d=",g,i2,j2);
	
	scanf("%d",&k);	
	
	if(k==i2+j2){
		printf("○\n");
		
	}else{
	printf("×\n");
		
	}
	}else if(g%6==0){
	
	printf("%d問目:%d+%d=",g,i3,j3);
	
	scanf("%d",&k);	
	
	if(k==i3+j3){
		printf("○\n");
		
	}else{
	printf("×\n");
		
	}
	}
	
}




}
乱数が毎回同じになるのを防ぐために毎回時刻を用いて設定しています
記憶力を試すためなので画面上に元の答えが表示されると意味がないため
改行を用いて前に表示された答えを画面外に流しています

Re: 一桁の足し算の記憶力を試すプログラム を作りたいです。

Posted: 2016年10月27日(木) 11:17
by あんどーなつ
うーん、taskさんがどのくらいの時間をプログラミングにペイできるかですよね。
あとデバイスがPCじゃなくてタブレットならC#じゃなくてJavaのほうがいいということもありえます。PCは高いです。

とりあえず一か月プログラミングしかしないならできる「かも」といったかんじです。
実際に異業種のノウハウを生かしてプログラミングを習得し、起業した人もたくさんいます。
でも、プログラミングが得意な大学生に声をかけて作ってもらうのが一番楽じゃないかと思います。

---
このプログラムで一番難しいのは、「プログラムが質問をする」というところかと思います。
質問は画面に表示すればいいかもしれないですが、ユーザー入力はキーボードだとちょっとダメですよね。
マウス、できればタッチパネルと音声認識がほしいですよね。
こうなると、プログラマでもできる人は意外に少ないと思います。

あと、iPad, Androidアプリで似たようなのがないか探したほうがいいです。
時間は高価です。

こんな感じでしょうか?

Re: 一桁の足し算の記憶力を試すプログラム を作りたいです。

Posted: 2016年10月28日(金) 19:11
by akasann
こんな形で作ってみました。参考になるか分りませんが・・・
アドバイスなどありましたら、ご自由にお願いします。

コード:

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

#define N 30

int main(void){
	int a,b,c,d,i,m[N],answer;
	srand((unsigned)time(NULL));

	printf("--------------記憶力ゲーム---------------\n");

	for(i=0;i<N;i++){
		a=rand()%9+1; b=rand()%9+1;
		printf("\n問題%d\n%3d+%d =",i+1,a,b);
		scanf("%d",&c);
		
		answer=a+b;
		if(answer!=c){
			printf("×\n");
			break;
		}

		m[i]=c;

		if(i>=2){
			printf("\n問題%d番目の答えは?\n",i-1);
			scanf("%d",&d);
			if(m[i-2]==d)
				printf("○\n");
			else{
				printf("×\n");
				break;
			}
		}
	}	
	if(i==N)
		printf("クリアです\n");
	
	return 0;
}

Re: 一桁の足し算の記憶力を試すプログラム を作りたいです。

Posted: 2016年10月28日(金) 21:14
by あんどーなつ
短いのにちゃんと動いているので(私がコードをながめて想像していたのより)いいと思います。
ただ、Cygwinで動作させたのですが、

コード:

$ ./a.exe
--------------記憶力ゲーム---------------

問題1
  4+2 =6

問題2
  4+1 =5

問題3
  6+6 =12

問題1番目の答えは?
6
○

一番目の答えがでてるときに聞くのは意味ないです。意地の悪い私がやるなら、

コード:

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

int getnum() {
  return rand() % 9 + 1;
}

void jamming() {
  int cnt = 100 + rand() % 100;
  for (int i = 0; i < cnt; i++) {
    int a = getnum(), b = getnum();
    printf("%d + %d = %d\n", a, b, a + b);
  }
}

int main() {
  srand((unsigned)time(NULL));
  int prob;
  for (int i = 0; i < 3; i++) {
    int a = getnum(), b = getnum();
    if (i == 0) prob = a + b;
    jamming();
    printf("%d + %d = ", a, b);
    int tmp;
    scanf("%d", &tmp);
    if (tmp != a + b) {
      printf("間違いです\n");
      return 0;
    }
  }
  printf("最初の問題の答えは? ");
  int tmp;
  scanf("%d", &tmp);
  if (tmp == prob)
    printf("あなたの勝ちです\n");
  else
    printf("あなたの負けです\n");
    
    return 0;
}

こうですかね~