我把我的程式重新寫過之後... 使其可玩性大增。
	PHP 語法:
	
		
			
/*
猜數字 1A2B
規則&條件:
1.先由電腦亂數決定 4 重複的位數。
2.讓玩家可以輸入猜測的數字。
3.判斷+顯示玩家的數字的 A B 率,A:位置,數值相等。B:僅數值相等。
4.可以按下 Q 鍵離開,按 R 鍵重新遊戲。
*/
#include <stdio.h>  /* 載入引導檔 stdio.h */ 
#include <math.h>   /* 載入引導檔 math.h */ 
#define S 20        /* 設定巨集 S 為 20 */ 
#define random(num) (rand() % (num))  /* 取亂數巨集 random(number)  */  
#define randomize() srand((unsigned)time(NULL)) /* 歸零亂數種子巨集 */  
#define clrscr() system("CLS")            /* 清除畫面巨集 */ 
#define pause() system("PAUSE")           /* 暫停畫面巨集 */  
#define swap_tmp(x,y) (temp=x,x=y,y=temp) /* 用 變數 做 AB 交換 */  
unsigned temp;  
char data_source[10] = ""; /* PC 答案的來源 */ 
char npc[5] = "";          /* NPC 的答案 */
char user[6] = "";         /* Uesr 的答案 */
char inv[9] = "";         /* NPC: 0~3,Uesr: 4~7 */
char AB[3] = "";       /* 紀錄單次的 A,B 值的檢查結果*/
short list_a[S] = {0};       /* 表格 1 連續紀錄 User 的輸入數字 */
short list_b[S*2] = {0};   /* 表格 2 連續紀錄 User 輸入數字 A,B 值 */ 
int main(void)
{
int i, j, k, r;
 
 FILE *file1;                    /* 宣告檔案指標 */
 
 logo();
  
 restart:      /* 標籤起點 (配合 RePlay) 再玩一次 */  
 
 start_default ( npc, data_source );  /* 起始開始資料 */
 AB[2] = 0;  
 clrer_1st( inv ,AB );  /* 清除 1 次資料  */
 clrer_list( list_a, list_b ); /* 清除 memory_list */
 i = j = r = 0;
 while ( AB[2] != 4 )       /* 條件為 4A,離開 while loop  */
       {
        nxit:  /* 標籤起點 (配合 RePlay) 繼續玩 */ 
                               
        input_number ( user ); /* 輸入猜測數字 + 檢查 4 位數 + 有無重複 + 檢查 0 值 */
    if ( user[0] == 'q' || user[0] == 'Q' ) 
        break; /* 按 Q 鍵,離開 while loop */
    else if ( user[0] == 'r' || user[0] == 'R' )  /* 按 R 鍵,RESET */
            {
         print_RESET ( npc );                 /* 列印 YOU RESET */
         puts("\n");
         pause();                 
         start_default ( npc, data_source );  /* 起始開始資料 */
                 i = j = 0;             /* 清除 while 計數器 */
                 clrer_1st( inv ,AB );  /* 清除 1 次資料  */
                 clrer_list( list_a, list_b ); /* 清除 memory_list */
                 r = 1;                 /* 紀錄按了 R 鍵 */ 
                 continue;
            } 
            
     if ( i > 0 )   /* 檢查是否有以猜過的數字組  */
         for ( k = 0 ; k < i ; k++ )
               if ( atoi( user ) == list_a[k]  )
                  { 
              puts("\n");
              printf ("該數字組 %s 已數入過,請重新輸入",user);
                   puts("\n");
              pause();  
              goto nxit;
             }
     
        strcat ( inv, npc );   /* 資料組合 npc (配合 check_AB)  */
        strcat ( inv, user );  /* 資料組合 npc + user (配合 check_AB)  */ 
        check_AB ( inv , AB ); /* 檢查猜測數字的 A,B 值 */ 
      
      memory ( i , j );      /* 把遊戲的過程寫入至 memory list */      
        print_setp ( user, AB , i , r ); /* 列印遊戲過程 */
        clrer_1st( inv ,AB );  /* 清除 1 次資料  */
        if ( i == ( S -1 ) )   /* 步驟滿了遊戲結束,玩家算輸 */ 
           { 
        AB[2] = 5;         /* 紀錄玩家算輸的狀態 */ 
        display ( list_a, list_b );  /* 顯示畫面 */    
        puts("\n");
        puts("\n");
        print_LOSE( npc ); /* 列印 YOU LOSE */
        break;
       } 
        else                   /* 控制 list_array 的寫入位置  */
           { 
           i++; 
            j+=2; 
       }  
    }
        
 if ( AB[2] == 4)  /* YOU WIN 遊戲結束的處理 */ 
     print_WIN( npc, user ); /* 列印 YOU WIN */
 
 if( RePlay(AB[2]) )  /* 是否再玩一次的判斷 */ 
    if ( AB[2] >= 4 )
        goto restart; 
    else 
        goto nxit;
 
 if ( AB[2] < 4 )   /* YOU LOSE 遊戲結束的處理 */  
     print_LOSE( npc ); /* 列印 YOU LOSE */
         
 puts("\n程式結束\n"); 
 
 pause();
}
/*----------------------------------------------------------------------------*/
/* 把logo 規則 */
int logo ( void )
{
 clrscr();
 puts("\n");
 puts("\t\t\t 猜數字 1A 2B 小遊戲");
 puts("\n");
 puts("\t遊戲規則:");
 puts("\n");
 puts("\t1.輸入 1 ~ 9 不可重覆之 4 位數字的組合,如 1234、9876 等。");
 puts("\t2.輸入後如有數字和位置與 NPC 相同者為 A,2A 為兩個數字和位置相同。");
 puts("\t3.輸入後僅數字與 NPC 相同者為 B,2B 為兩個數字相同。");
 puts("\t4.當輸入的數字全部為 4A 時,玩家勝利。而退出遊戲、重新遊戲,玩家失敗。");
 puts("\t5.當畫面的表格子用完( 20 格)時,未達 4A 時,玩家失敗。");
 puts("\n");
 puts("\t getter 以 DEV-C 撰寫 ...,版權沒有,當機不究。");  
 puts("\n"); 
 pause();
}
/*----------------------------------------------------------------------------*/
/* 把遊戲的過程寫入至 memory list */
int memory ( i , j )
{
 list_a[i] = atoi( user ); /* 將每筆的猜測值寫入到 memory list_a */
 AB[2] = AB[0];            /* 將每筆的 A 值寫入到 while 檢查器中 */
 list_b[j] = AB[0];        /* 將每筆的 A 值寫入到 memory list_b */
 list_b[j+1] = AB[1];      /* 將每筆的 B 值寫入到 memory list_b */
}
/*----------------------------------------------------------------------------*/
/* 列印 setp */
int print_setp ( char*user , char*AB, int i , int r )
{
 FILE *file1;                    /* 宣告檔案指標 */
 file1=fopen("list.txt","a");  /* 將 file1 指標 = 開啟檔案, a 接著寫入 */
    
 if( r == 1 )                    /* 當按下 R 鍵重來時 */
    fprintf ( file1,"\n");
 if( i == 0 )                    /* 第一筆資時先寫入表頭項目(檔案) */ 
    fprintf ( file1,"\n%4s\t%8s\t %s ","No.","Number","Check" ); 
 fprintf ( file1,"\n %02d.\t%8s\t%dA,%dB", i, user, AB[0], AB[1] );
 fclose( file1 );                /* 關閉檔案 */   
}
/*----------------------------------------------------------------------------*/
/* 列印 YOU RESET */
int print_RESET( char*npc )
{
 FILE *file1;                    /* 宣告檔案指標 */
 printf("\n\t\t\tYOU LOSE,RESET GAME!!");
 printf("\n公佈答案 : ");
 display_ans ( npc );    
          
 file1=fopen("list.txt","a");  /* 將 file1 指標 = 開啟檔案, a 接著寫入 */
 fprintf( file1,"\nYOU LOSE,RESET GAME!!");
 fprintf ( file1,"\n公佈答案 : %s",npc);
 fprintf( file1,"\n--------------------\n"); 
 fclose( file1 );              /* 關閉檔案 */   
}
/*----------------------------------------------------------------------------*/
/* 列印 YOU WIN */
int print_WIN( char*npc, char*user )
{
 FILE *file1;                    /* 宣告檔案指標 */
 display ( list_a, list_b );  /* 顯示畫面 */    
 printf("\n\t\t\tYOU WIN!!\n");
 printf("公佈答案 : ");
 display_ans ( npc );
 printf("你的答案 : ");
 display_ans ( user );
 printf("\n");
 file1=fopen("list.txt","a");  /* 將 file1 指標 = 開啟檔案, a 接著寫入 */
 fprintf(file1,"\nYOU WIN!!\n");
 fprintf(file1,"公佈答案 : %s\n",npc);
 fprintf(file1,"你的答案 : %s\n",user);
 fprintf( file1,"\n--------------------\n"); 
 fclose( file1 );  
}
/*----------------------------------------------------------------------------*/
/* 列印 YOU LOSE */
int print_LOSE( char*npc )
{
 FILE *file1;                    /* 宣告檔案指標 */
 printf("\n\t\t\tYOU LOSE!!");
 printf("\n公佈答案 : ");
 display_ans ( npc );
   
 file1=fopen("list.txt","a");  /* 將 file1 指標 = 開啟檔案, a 接著寫入 */
 fprintf(file1,"\nYOU LOSE!!\n");
 fprintf(file1,"公佈答案 : %s\n",npc);
 fprintf( file1,"\n--------------------\n"); 
 fclose( file1 );              /* 關閉檔案 */ 
}    
/*----------------------------------------------------------------------------*/
/* 寫入來源資料的 1 ~ 9 */
int data_default ( char*data )
{
 int i;
 for ( i = 0; i < 9; i++ )
       data [i] = i + 49; 
 data[9] = '\0'; /* 補上字串結尾 */         
 randomize();     /* 亂數種子表歸零 */  
}
/*----------------------------------------------------------------------------*/
/* 來源資料交錯 ABCD => DBCA (配合 rand_source) */
int data_ins ( char*data ) 
{
 int i;  
 for ( i = 0; i < 4; i += 2 )
      swap_tmp ( data[i], data[8-i] );
}
/*----------------------------------------------------------------------------*/
/* 來源資料亂數交換,打亂源有次序 */
int rand_source ( char*data )
{
 int a, b, i;
 int rad_[2] = {0};
 for ( i = 0; i < 20 ; i++ )  /* 亂數交換 20 次 */ 
     {
      rad_[0] = random (9);
      rad_[1] = random (9);
      data_ins ( data );    
      swap_tmp ( data[ rad_[0] ], data[ rad_[1] ] );
     }
}
/*----------------------------------------------------------------------------*/
/* 從來源資料中的取 4 位數 為 NPC 數值的方法 */
int in_npc ( char*destination, char*source  ) 
{
 int i, j, k;               
 if ( ( random (2) + 1 ) == 1 ) /* 隨機決定取值的方法 1 或 2 */ 
    { 
     for ( i = 0; i < 4; i++ )  /* 取 NPC 數值的方法 1: 亂數抓取法  */ 
         {
      j = random (9-i);
      destination[i] = source[j];  /* 亂數取值  */ 
      source[j] = ' ';             /* 亂數取值後歸 ' ' */ 
      move_data ( source );        /* 整理來源的 data */ 
         } 
    }
 else                           /* 取 NPC 數值的方法 2: 亂數連號抓取法 */  
    {
     j = random (9);
     if ( j < 5 )  /* 亂數值小於 5 時,取連續 4 位數  */ 
    {
     for ( i = 0; i < 4; i++ )
              destination[i] = source[i+j];
    } 
     else          /* 亂數值大於 5 時,取連續 4 位數  */  
        { 
     for ( i = 0; i < 4; i++ )
         {
          if ( i + j > 8 ) 
              destination[i] = source[i+j-9]; 
          else 
          destination[i] = source[i+j];  
             }
        }
    }  
 destination[4] = '\0';
}
/*----------------------------------------------------------------------------*/
/* 來源資料中的特定的值記號的空值往後移動 (配合 in_npc 使用) */
int move_data ( char*data ) 
{
 int i, j;
 for ( i = 0; i < 9; i++ )
      {
      if ( data[i] == ' ' )  /* 以 ACSII 碼空白字元為整理對象 */ 
          for ( j = 0; j < 9 - i ; j++ )
               swap_tmp ( data[j+i] , data[j+i+1] );               
     } 
}
/*----------------------------------------------------------------------------*/ 
/* 起始開始資料 */
int start_default ( char*npc, char*data_source )
{
 data_default ( data_source ); /* 寫入來源資料的 1 ~ 9 */
 rand_source ( data_source );  /* 來源資料亂數交換,打亂源有次序 */ 
 in_npc ( npc, data_source );  /* 從來源資料中的取 4 位數 為 NPC 數值的方法 */
}
/*----------------------------------------------------------------------------*/
/* 顯示畫面 */
int display ( short*tab1, short*tab2 )
{
 int i, j, k;
 k = S / 2;
 clrscr();
 printf ("%4s\t%8s\t %s ","No.","4_Number","Check" );
 printf ("\t%4s\t%4s\t%8s\t %s ","▕","No.","4_Number","Check" );
 for ( i = j = 0; i < k; i++ )      
      { 
      printf ("\n %02d.", i+1);
       if ( tab1[i] != 0 )
         { 
          printf ("\t%8d \t %dA,%dB", tab1[i], tab2[j], tab2[j+1] );
          if ( tab1[i+k] != 0 )
              printf ("\t%4s\t %02d.\t%8d \t %dA,%dB",
                      "▕", i+k+1, tab1[k+i], tab2[S+j], tab2[S+j+1] );    
          else 
                printf ("\t%4s\t %02d.","▕", i+k+1);
         }
      else 
        printf ("\t%8s \t %s %s\t%4s\t %02d.","","","","▕", i+k+1);        
     
     j+=2;
     } 
 
 puts("\n\n按 R 鍵重新遊戲;按 Q 鍵離開\n");
 printf("請輸入猜測數字 4 位數,1 ~ 9 不可重複: "); 
}
/*----------------------------------------------------------------------------*/
/* 資料顯示 NPC 或 uesr 的答案 */
int display_ans ( char*data )
{
 int i;
 for ( i = 0; i < 4; i++ )
      printf ("%c ", data[i]);
 puts(" "); 
}
/*----------------------------------------------------------------------------*/
/* 輸入猜測數字 + 檢查 4 位數 + 有無重複 + 檢查 0 值 */
int input_number ( char*destination )
{
 char input[10] = "";
 int number = 0;
 int i, j;
 while( 1 )
   { 
    reinkny: 
    display ( list_a, list_b );                 /* 顯示畫面 */       
    scanf("%s",&input);
    
    if ( input[0] == 'q' | input[0] == 'Q' | /* 檢查是否按下 Q 鍵中斷 */
         input[0] == 'r' | input[0] == 'R' ) /* 檢查是否按下 R 鍵中斷 */ 
       {
        destination[0] = input[0];           /* 回傳中斷的按鍵值 */ 
        destination[1] = '\0';
        return 0;
        /* return input[0]; */ 
       }
         
    number = atoi ( input );
    if ( number > 999 & number < 10000 ) /* 檢查 4 位數 */ 
       {
           for ( i = 0; i < 4 ; i++ )  
               { 
         if ( input[i] == '0' )      /* 檢查 0 值 */
                { 
         puts("\n");
         printf ("發現 0 值,請重新輸入,");
         pause();
         goto reinkny;
        }
             for ( j = 0; j < 4; j++ ) 
                  if ( i != j )
              if ( input[i] == input[j] ) /* 有無重複 */ 
                 {           
                  puts("\n");
              printf ("發現重複,請重新輸入,");
                          pause();
                  goto reinkny;
                 }
             destination[i] = input[i];                 
            }                 
        break;
       }                 
    else 
       { 
        puts("\n");
      printf ("位數不符合,請重新輸入,");
    pause();    
       } 
  }
 destination[4] = '\0';
}
/*----------------------------------------------------------------------------*/
/* 檢查猜測數字的 A,B 值 */
int check_AB ( char*inv, char*AB )
{
 int i, j;
 for ( i = 0; i < 4; i++ )
      if ( inv[i] == inv[i+4] ) /* 檢查 A */
          AB[0]++;
      else                     /* 檢查 B */
          for ( j = 0; j < 4 ; j++ )
           if ( inv[i] == inv[j+4] )
                   AB[1]++; 
}
/*----------------------------------------------------------------------------*/ 
/* 清除 1 次資料  */
int clrer_1st ( char*inv, char*AB )
{
 AB[0]= 0;
 AB[1]= 0;
 strcpy ( inv,"" );
} 
/*----------------------------------------------------------------------------*/ 
/* 清除 memory_list */
int clrer_list ( char*list_a, char*list_b )
{
 int i;
 for ( i = 0; i < S*2; i++ )
     { 
      if ( i < S )
          list_a [i] = 0;         
      list_b [i] = 0; 
     } 
} 
/*----------------------------------------------------------------------------*/ 
/* 再玩一次 */
int RePlay ( x )
{
 char input;
 if ( x >= 4 )
     printf("要在玩一次嗎(Y/N) ? ");
     
 else
     printf("\n要退出遊戲了嗎(Y/N) ? ");
     
 while(1)
 {
  input = getchar();
  if ( input == 'y' | input == 'Y' )
      if ( x >= 4 )
          return 1;
      else 
          return 0; 
      
  else if ( input == 'n' | input == 'N' )
           if ( x >= 4 )
               return 0;
           else 
               return 1; ; 
      
 } 
}
/*----------------------------------------------------------------------------*/