2014年5月7日 星期三

HW7 九宮格賓果

1. 請列印主選單
ex: 歡迎使用成法表列印程式
  -1.開始玩賓果
  -2.離開程式
請輸入選項1或2
2. 讀取使用者輸入的選項
3. 若使用者輸入1,進入賓果遊戲,否則執行步驟4
 3.1 請先宣稱大小為9跟5的int陣列
 3.2 請亂數產生不重複的9個數字(範圍在1~9)放到剛剛宣稱的陣列
 3.3 請使用者輸入5個數字(範圍1~9,不能重複),中間以"空白隔開(ex:1 5 7 8 6)"->參考課本第八章
 3.4 輸入完之後顯示一次剛剛輸入的數字,再將這串字串以"空白切割"放到大小5的陣列裡面->參考課本第八章
 3.5 將使用者輸入的5個數字判斷賓果盤相同的五個數字在哪 改變其值為0
 3.6 顯示5個數字放進去之後的3*3的賓果圖
 3.7 判斷中幾條直線(橫的、直的、對角斜各算一條,全部一共八條,其餘不算)
 3.8 顯示使用者獲得幾條直線,如果超過2條顯示"賓果!",沒有則顯示"你輸拉!"
 3.9 等待使用者輸入任意鍵
 3.10 清空畫面並回到步驟1
4. 離開程式
ex:
電腦產生的亂數(1,5,8,6,7,9,2,4,3)賓果盤
1 5 8
6 7 9
2 4 3
請使用者輸入五個數字ex:1 5 7 3 6
產生最後的賓果盤
0 0 8
0 0 9
2 4 0
結果:
1條線,你輸了!



#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void creat(int number[]);     //宣告 creat  函式
void bingo(int x[],int y[]);  //宣告 bingo  函式
void keyput(int z[]);         //宣告 keyput 函式
int main(void)
{
int i,j,s,d;  //宣告i j s d 為整數
int n,m;      //宣告n 和 m 為整數
int a[9]={};  //宣告 大小為9的a陣列
int b[5]={};  //宣告 大小為5的b陣列
srand(time(NULL));  // 亂數


for(;;){                            //迴圈
printf("歡迎\n");               //印出
printf("1.賓果");
printf("2.離開\n");
scanf("%d",&m);                 //寫入m值
for(;;){

if(m==2) {                  //當 m 為 2 就結束程式
printf("結束\n");
system("pause");
return 0;
}

if(m==1) {                  //當 m 為 1 則執行下列
creat(a);               //呼叫creat  函式
keyput(b);              //呼叫keyput 函式

for(d=0;d<5;d++){        //當 使用者輸入的數字 和 亂數產生的數字 相同時 則數字變為0
for(s=0;s<10;s++)
if(a[s]==b[d]){
a[s]=0;}
}
for(i=0;i<9;i++){        //列出3*3 的賓果盤
if(i%3==0)
printf("\n");
printf("%d",a[i]);
}
bingo(a,b);              //判斷 連成幾線
system("pause");
system("CLS");

}


break;
}
}
}



void creat(int number[])                 // 亂數產生9個數字 寫入 a陣列
{
int i,j;
srand(time(NULL));
for(i=0;i<9;i++)
{
number[i]=1+rand()%9;
for(j=0;j<i;j++)              
{
if(number[i]==number[j])     //判斷亂數是否重複
{
i--; break;  
}
}
}
}



void keyput(int z[])            //使用者 寫入的五個數字
{
char put[11]={0};
int i=0;
char c;
char t[] = " ";
fflush(stdin);
printf("輸入5個數字 用空白隔開\n");
while((c = getchar())!='\n')           //抓字串
{
put[i++]=c;
}
char *test = strtok(put, " ");        //空白分割
i=0;
while (test != NULL) {
printf("%c ", *test);

if(i<5){
z[i++]=(int)(*test-48);       //char 轉 int 並寫入陣列
}
test = strtok(NULL, " ");
}


printf("\n");
}



void bingo(int x[],int y[])             //判斷連成幾線
{
int q,w,e,r,t,u,o,p;

if(0==x[0] && 0==x[1] && 0==x[2]){       //如果 這三個位置 都為0 則q為1
q=1;}
else
{q=0;}                                   //不然q = 0
if(0==x[3] && 0==x[4] && 0==x[5]){
w=1;}
else                                     //以下類推
{w=0;}
if(0==x[6] && 0==x[7] && 0==x[8]){
e=1;}
else
{e=0;}
if(0==x[0] && 0==x[4] && 0==x[8]){
r=1;}
else
{r=0;}
if(0==x[2] && 0==x[4] && 0==x[6]){
t=1;}
else
{t=0;}
if(0==x[6] && 0==x[3] && 0==x[0]){
u=1;}
else
{u=0;}
if(0==x[7] && 0==x[4] && 0==x[1]){
o=1;}
else
{o=0;}
if(0==x[8] && 0==x[5] && 0==x[2]){
p=1;}
else
{p=0;}
if(2== q+w+e+r+t+u+o+p){           //如果全部加起來=2 就是有連成兩條
printf("\n \n 你贏了\n\n");
}
else{
printf(" \n 沒兩條 你輸了\n ");}
}

沒有留言:

張貼留言