Announce

PukiWiki contents have been moved into SONOTS Plugin (20070703)

01.kazuate.c

数当て

投稿者s1080134
作成日2000/07 (学部1年前期)
最終更新日2000/07
言語C
Table of Contents

説明

数当てをするゲームです。プログラミング入門の最後の課題、ランダム関数を使ったゲームを自由に作る、で作成したものです。

ルールはヘルプ参照のこと。ソースの#define NUM 3 のところを4 に変えたりしてコンパイルすれば、4桁の数字当てのゲームにすぐ変わります。

後記:オプションで指定できるようにしろってところですね。

書式

使い方は以下のようになっています。

./kazuate

以降はメッセージにしたがってください。

ソースコード

/* 数字当てゲーム                                             */

#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define START 0
#define FIN   9
#define NUM   3



main(){

  int flag,loop,i,turn=1,c[NUM],u[NUM],hit,error;
  
  srand((unsigned int)time(NULL)); 
  
  for(i=0;i<NUM;i++)
    {
    c[i]=rand()%FIN+START;
    }

  printf("%dつの数字当てゲーム\n",NUM);
label:  printf("%dつの数字を入力してください。ただし%dから%dまでの数字です。
ルールはなぜか33で見れます。中止は C-c でも押してください。\n",NUM,START,
FIN);
  
  while(1)
    {
      flag=2;
      
      scanf("%d",&u[0]);
      if(u[0]==33)
	{
	  printf("
\"もしもコンピュータによって与えられた数が 1 2 3 だとします。

そのときあなたが 4 1 5 と入力すると 1 ERROR と表示されます。

これは、与えられた数と、位置はちがうが同じ数が含まれているからです。

位置も同じ場合 ( 例えば 1 4 5 ) 1 HIT と表示されます。

つまり、1 1 1 と入力した場合、1 HIT と 2 ERROR が表示されます。

与えられた数が 6 6 7 の場合 6 6 6 と入力すれば, 2 HIT,4 ERROR が表示されます。

6 7 6 と入力したら 1 HIT 4 ERROR ですね。

3 HIT すればクリアです。以上\"\n\n");
goto label;
}
    
      for(i=1;i<NUM;i++)
	{
	  scanf("%d",&u[i]);
	}
      
      for(i=0,hit=0;i<NUM;i++)
	{
	  if(c[i]==u[i])hit++;
	  else flag=0;
	} 
      
      if (flag==2)
	{
	  printf("ALL HITs!! Congraturation!!\n");
	  printf("You spend %d turns\n",turn);
	  exit(0);
	}

      for(loop=1,error=0;loop<NUM;loop++)
	{
	  for(i=0;i<NUM-loop;i++)
	    {
	      if(c[i]==u[i+loop])error++;
	      if(c[i+loop]==u[i])error++;
	    }
	}
      if(hit>0){printf("%d HIT!!\n",hit);flag=1;}
      if(error>0){printf("%d ERROR!!\n",error);flag=1;}
      if(flag==0) printf("Not match at all.\n");
      turn++;
    }
}