查看單個文章
舊 2006-06-11, 06:31 PM   #2 (permalink)
getter
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

剛剛完工的 測試一下

RS 下載 http://rapidshare.de/files/22795294/1A2B.rar.html

語法:
/*
猜數字 1A2B
規則&條件:
1.先由電腦亂數決定 4 重複的位數。
2.讓玩家可以輸入猜測的數字。
3.判斷+顯示玩家的數字的 A B 率,A:位置,數值相等。B:僅數值相等。
4.可以按下 Q 鍵離開。
 
*/
#include <stdio.h> /* 載入引導檔 stdio.h */ 
#define random(num) (rand() % (num))
#define randomize() srand((unsigned)time(NULL))
#define clrscr() system("CLS")
#define pause() system("PAUSE")
#define swap_xor(x,y) (x^=y,y^=x,x^=y) 
#define swap_tmp(x,y) (temp=x,x=y,y=temp) 
unsigned temp;

int main(void)
{
 int data_num [10] = {0};
 int kc_num [2][4] = {0};
 int check[3] = {0};
 int checks[10][2] = {0};
 int input = 0;
 int inputs[10] = {0};
 int i;

 data_default ( data_num );  /* 資料起始 */
 rand_scan ( data_num );     /* 資料亂數交換 */
 in_pc_mun ( kc_num[0], data_num ); /* 取 pc_mun 數值的方法 */

 i = 0;
 while ( check[3] != 4 )
       {
        
		display( inputs, checks );    /* 顯示資料 */
		   
        input = get_num ( kc_num[1] );  /* 輸入猜測數字 */
		if ( input == 'q' || input == 'Q' )
		    break; 
		   	
        AB_check ( kc_num, check );      /* 檢查 A,B */ 
        
        display_us_num ( kc_num[1], check );   /* 顯示需入的檢查結果 */
        
		inputs [i] = input;
		check [3] = check[0]; 
		checks [i][0] = check[0]; 
		checks [i][1] = check[1];
	    check[0] = 0 ;
	    check[1] = 0 ;
       	    
		if ( i > 9 )
            i = 0;
  	    else 
		    i++;
				
		pause();
	   }

 if ( check[3] == 4)
     printf("\n 你贏了");
 else 
	 printf("\n 你輸了");
	 
 puts("\n程式結束\n\n"); 
 pause();
}
/*----------------------------------------------------------------------------*/
/* 資料亂數交換 */
int rand_scan ( int*data )
{
 int a, b, i;
 int rad_[2] = {0};
 for ( i = 0; i < 100; i++ )
     {
	  rad_[0] = random (9);
	  rad_[1] = random (9);
	  data_ins ( data );	
	  swap_tmp ( data [ rad_[0] ], data [ rad_[1] ] );
     }
}
/*----------------------------------------------------------------------------*/
/* 資料起始 */
int data_default ( int*data )
{
 int i;
 for ( i = 0; i < 9; i++ )
 	  data [i] = i + 1; 
 randomize();
}
/*----------------------------------------------------------------------------*/
/* 資料顯示 */
int display ( int*dat1, int*dat2[10][2] )
{
 int i;
 clrscr();
 printf ("%4s\t%8s\t %s ","No.","Number","Check" );
 for ( i = 0; i < 10; i++ )	  
 	 { 
	  printf ("\n %02d.", i+1);
 	  if ( dat1[i] != 0 ) 
          printf ("\t%8d \t %dA,%dB", dat1[i], dat2[i][0], dat2[i][1] );
      else 
  	  printf ("\t%8s \t %s %s","","","");
	 } 
 puts("\n\n"); 
}
/*----------------------------------------------------------------------------*/
/* 資料顯示 pc_num */
int display_pc_num ( int*data )
{
 int i;
 printf(" pc_num : "); 
 for ( i = 0; i < 4; i++ )	  
 	  printf ("%d ", data [i]);
 puts("");
}
/*----------------------------------------------------------------------------*/
/* 資料顯示 us_num */
int display_us_num ( int*data,int*check )
{
 int i;
 puts("\n");
 printf(" ps_num : "); 
 for ( i = 0; i < 4; i++ )	  
 	  printf ("%d ", data [i]);
 printf("%dA,%dB", check[0], check[1] );
 puts("\n\n");
}
/*----------------------------------------------------------------------------*/
/* 資料交錯 */
int data_ins ( int*data ) 
{
 int i;  
 for ( i = 0; i < 4; i += 2 )
 	  	   swap_xor ( data [ i ], data [ 8 - i ] );
}
/*----------------------------------------------------------------------------*/
/* 將特定的值記號往後移動 */
int move_data ( int*data ) 
{
 int i, j;
 for ( i = 0; i < 9; i++ )
 	 {
	  if ( data[i] >= 9 )
	      for ( j = 0; j < 9 - i ; j++ )
	           swap_xor ( data [j+i] , data [j+i+1] );			   
	 } 
}
/*----------------------------------------------------------------------------*/
/* 取 pc_mun 數值的方法 */
int in_pc_mun ( int*destination, int*source  ) 
{
 int i, j, k; 			  
 if ( ( random (2) + 1 ) == 1 )
    { 
     for ( i = 0; i < 4; i++ )
         {
   	     j = random (9-i);
 	     destination [i] = source [ j ]; 
	     source [ j ] = 32;
	     move_data ( source );	  
	     } 
    }
 else
    {
	 j = random (9);
 	 if ( j < 5 )
	    {
	     for ( i = 0; i < 4; i++ )
              destination [ i ] = source [ i + j ];
	    } 
     else 
        { 
	     for ( i = 0; i < 4; i++ )
	         {
	          if ( i + j > 8 )
		          destination [ i ] = source [ i + j - 9 ];
		      else 
		          destination [ i ] = source [ i + j ];  
		     }
		}
	}
}
/*----------------------------------------------------------------------------*/
/* 輸入猜測數字 */
int get_num ( int*destination )
{
 char input[10];
 int num;
 printf("請輸入猜測數字 0 ~ 9 不可重複 (按 Q 離開): ");
 scanf("%s",&input);
 num = atoi (input);
 destination[0] = num/1000%10; /* 取千位數 */
 destination[1] = num/100%10;  /* 取百位數 */ 
 destination[2] = num/10%10;   /* 取拾位數 */  
 destination[3] = num%10;      /* 取個位數 */  
 if ( input[0] == 'q' || input[0] == 'Q' )
     return input[0]; 
 else 
     return num;
}
/*----------------------------------------------------------------------------*/
/* 檢查 A,B */
int AB_check ( int data[2][4], int*C )
{
 int i, j, k = 0;
 for ( i = 0; i < 4; i++ )
      if ( data[0][i] == data[1][i] )
          C [0]++;
      else 
         {
   		  for ( j = 0; j < 4 ; j++ )
	          {
  			   if ( data[0][j] == data[1][i] )
                   C [1]++;
			  }
		 }
}
/*----------------------------------------------------------------------------*/

此帖於 2006-06-12 12:21 AM 被 getter 編輯.
__________________
在「專業主討論區」中的問題解決後,要記得按一下 http://forum.slime.com.tw/images/stamps/is_solved.gif 按鈕喔,
這是一種禮貌動作。

一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。
不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。

天線寶寶說再見啦~ ... 天線寶寶說再見啦~

迪西:「再見~ 再見~」

Otaku Culture Party 關心您 ...
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖