2006-06-11, 06:31 PM
|
#2 (permalink)
|
管理員
|
剛剛完工的 測試一下
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 編輯.
|
__________________
在「專業主討論區」中的問題解決後,要記得按一下 按鈕喔,
這是一種禮貌動作。
一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。
不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。
天線寶寶說再見啦~ ... 天線寶寶說再見啦~
迪西:「再見~ 再見~」
『 Otaku Culture Party 』 關心您 ...
|
|
送花文章: 37855,
收花文章: 6441 篇, 收花: 26052 次
|