PPT
firth.mainmenu.cpp
#include#include #include "project.h" int main() { int select; do { system("CLS"); printf("==========期末專題小遊戲==========\n"); printf("== ==\n"); printf("== 0.離開遊戲 ==\n"); printf("== 1.簡易拉霸遊戲 ==\n"); printf("== 2.洗牌比大小 ==\n"); printf("== 3.猜數字遊戲 ==\n"); printf("== ==\n"); printf("==================================\n"); printf("請輸入選項:\n"); scanf("%d",&select); if(select==0) { printf("離開遊戲~\n"); system("pause"); break; } switch(select) { case 1: stu1(); break; case 2: system("CLS"); stu2(); break; case 3: stu3(); break; default: printf("輸入錯誤!\n"); break; } system("pause"); }while(1); }
firth.project.h
void stu1(); void stu2(); void stu3(); void GNGMenu(); void GNGintro(); int GNGstart(); void menu(); //選單之函數 void prepare(); //準備工作之函數 void ask(); //電腦問之函數 void answer(); //回答幾a幾b之函數 void think(); //電腦思考之函數(其實就是從答案庫中排除不可能的答案)
firth.everyoneproject.cpp
#include#include #include #include #include "project.h" #include void stu1() { int n1,n2,n3,n4,n5,n6,n7,n8,n9; int d1,d2,d3,d4,d5,d6,d7,d8,d9; char c1,c2,c3,c4,c5,c6,c7,c8,c9; char c01,c02,c03,c04,c05,c06; char k1,k2,k3,k4,k5,k6,k7,k8,k9; char s1,s2,s3,s4,s5,s6,s7,s8,s9; int a,b,c; int i,j=0,k=0; int q=0; int count,score=0,line=0,coin; do { system("CLS"); printf("☆★☆★☆ 拉霸遊戲機 ★☆★☆★☆\n"); printf("☆ ☆\n"); printf("★ ★\n"); printf("☆ ☆\n"); printf("★ ★\n"); printf("☆ 1.遊戲說明 ☆\n"); printf("★ ★\n"); printf("☆ 2.開始遊戲 ☆\n"); printf("★ ★\n"); printf("☆ 3.離開遊戲 ☆\n"); printf("★ ★\n"); printf("☆★☆★☆★☆★☆★☆★☆★☆★☆\n"); printf("⊙請輸入代號:"); scanf("%d",&a); if(a==3) { printf("exit the gmae!\n"); break; } switch(a) { case 1: system("cls"); printf("⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n"); printf("⊙ 遊 戲 說 明 ⊙\n"); printf("⊙ ⊙\n"); printf("⊙ 每局先輸入一筆錢數當壓金,接 ⊙\n"); printf("⊙ 著選擇拉桿開始遊戲,只要直橫或斜 ⊙\n"); printf("⊙ 的圖案相同,都算是一條連線! ⊙\n"); printf("⊙ ⊙\n"); printf("⊙ 所以得到的金錢總數為每條線 ⊙\n"); printf("⊙ 的(圖案倍數 x 壓金)相加之和! ⊙\n"); printf("⊙ ⊙\n"); printf("⊙ ⊙\n"); printf("⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n"); printf(" \n"); system("pause"); break; case 2: system("cls"); srand(time(NULL)); printf("☆☆☆ 遊 戲 設 定 ☆☆☆\n"); printf(" \n"); for(j=0;j<1;) { printf("◎請輸入您的初始錢數(1000~10000):"); scanf("%d",&coin); if(coin>=10001) { system("cls"); printf("您輸入的初始金錢數太多,請重新輸入!\n"); } else if(coin<=999) { system("cls"); printf("您輸入的初始金錢數太少,請重新輸入!\n"); } else break; } system("cls"); s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0,s8=0,s9=0; c1=2,c2=3,c3=1,c4=6,c5=1,c6=4,c7=2,c8=3,c9=5; for(count=1;count>0;count++) { c01=1; c02=2; c03=3; c04=4; c05=5; c06=6; for(i=0;i<8;i++) { n1=rand()%(6)+1; n2=rand()%(6)+1; n3=rand()%(6)+1; n4=rand()%(6)+1; n5=rand()%(6)+1; n6=rand()%(6)+1; n7=rand()%(6)+1; n8=rand()%(6)+1; n9=rand()%(6)+1; k1=n1,k2=n2,k3=n3,k4=n4,k5=n5,k6=n6,k7=n7,k8=n8,k9=n9; printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■ 遊戲進行中... ■\n"); printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■ ■ ■ ■ 錢數表 ■\n"); printf("■ %c ■ %c ■ %c ■ (每線) ■\n",k1,k2,k3); printf("■ ■ ■ ■ ■\n"); printf("■■■■■■■■■■■■■ %c=1.5倍 ■\n",c01); printf("■ ■ ■ ■ %c=2倍 ■\n",c02); printf("■ %c ■ %c ■ %c ■ %c=2.5倍 ■\n",k4,k5,k6,c03); printf("■ ■ ■ ■ %c=3倍 ■\n",c04); printf("■■■■■■■■■■■■■ %c=3.5倍 ■\n",c05); printf("■ ■ ■ ■ %c=4倍 ■\n",c06); printf("■ %c ■ %c ■ %c ■ ■\n",k7,k8,k9); printf("■ ■ ■ ■ ■\n"); printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■局數|%4d■錢|%7d■分數|%6d■\n",count,coin,score); printf("■■■■■■■■■■■■■■■■■■■\n"); Sleep(250); system("cls"); } if(coin<=0) { printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■ 您的錢數已為零! ■\n"); printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■ G A M E O V E R ■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■ ■\n"); printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■局數|%4d■錢|%7d■分數|%6d■\n",count,coin,score); printf("■■■■■■■■■■■■■■■■■■■\n"); printf(" \n"); system("pause"); break; } printf("■■■■■■■■■■■■■■■■■■■\n"); if(line==0) printf("■ 真可惜,槓龜! ■\n"); else printf("■ 恭喜你,中了%d連線! ■\n",line); printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ 錢數表 ■\n",s1,s1,s1,s2,s2,s2,s3,s3,s3); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ (每線) ■\n",s1,c1,s1,s2,c2,s2,s3,c3,s3); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ ■\n",s1,s1,s1,s2,s2,s2,s3,s3,s3); printf("■■■■■■■■■■■■■ %c=1.5倍 ■\n",c01); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ %c=2倍 ■\n",s4,s4,s4,s5,s5,s5,s6,s6,s6,c02); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ %c=2.5倍 ■\n",s4,c4,s4,s5,c5,s5,s6,c6,s6,c03); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ %c=3倍 ■\n",s4,s4,s4,s5,s5,s5,s6,s6,s6,c04); printf("■■■■■■■■■■■■■ %c=3.5倍 ■\n",c05); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ %c=4倍 ■\n",s7,s7,s7,s8,s8,s8,s9,s9,s9,c06); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ ■\n",s7,c7,s7,s8,c8,s8,s9,c9,s9); printf("■%c %c %c ■%c %c %c ■%c %c %c ■ ■\n",s7,s7,s7,s8,s8,s8,s9,s9,s9); printf("■■■■■■■■■■■■■■■■■■■\n"); printf("■局數|%4d■錢|%7d■分數|%6d■\n",count,coin,score); printf("■■■■■■■■■■■■■■■■■■■\n"); printf(" \n"); for(k=0;k<1;) { printf("☆請輸入您的壓錢數(100~5000):\n"); scanf("%d",&b); if(b>=5001) printf("您輸入的壓金數太多,請重新輸入!\n"); else if(b<=99) printf("您輸入的壓金數太少,請重新輸入!\n"); else { coin=coin-b; break; } } printf("☆拉桿進行遊戲? (1)確定 (2)取消\n"); scanf("%d",&c); system("cls"); switch(c) { case 1: q=0; n1=rand()%(6)+1; n2=rand()%(6)+1; n3=rand()%(6)+1; n4=rand()%(6)+1; n5=rand()%(6)+1; n6=rand()%(6)+1; n7=rand()%(6)+1; n8=rand()%(6)+1; n9=rand()%(6)+1; c1=n1; c2=n2; c3=n3; c4=n4; c5=n5; c6=n6; c7=n7; c8=n8; c9=n9; s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0,s8=0,s9=0; d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0,d9=0; line=0; if((n1==n2)&&(n2==n3)) { d1++; d2++; d3++; line++; if(n1==1) { coin=coin+b*3/2; score=score+10; } if(n1==2) { coin=coin+b*2; score=score+15; } if(n1==3) { coin=coin+b*5/2; score=score+20; } if(n1==4) { coin=coin+b*3; score=score+25; } if(n1==5) { coin=coin+b*7/2; score=score+30; } if(n1==6) { coin=coin+b*4; score=score+35; } } if((n4==n5)&&(n5==n6)) { d4++; d5++; d6++; line++; if(n4==1) { coin=coin+b*3/2; score=score+10; } if(n4==2) { coin=coin+b*2; score=score+15; } if(n4==3) { coin=coin+b*5/2; score=score+20; } if(n4==4) { coin=coin+b*3; score=score+25; } if(n4==5) { coin=coin+b*7/2; score=score+30; } if(n4==6) { coin=coin+b*4; score=score+35; } } if((n7==n8)&&(n8==n9)) { d7++; d8++; d9++; line++; if(n7==1) { coin=coin+b*3/2; score=score+10; } if(n7==2) { coin=coin+b*2; score=score+15; } if(n7==3) { coin=coin+b*5/2; score=score+20; } if(n7==4) { coin=coin+b*3; score=score+25; } if(n7==5) { coin=coin+b*7/2; score=score+30; } if(n7==6) { coin=coin+b*4; score=score+35; } } if((n1==n4)&&(n4==n7)) { d1++; d4++; d7++; line++; if(n1==1) { coin=coin+b*3/2; score=score+10; } if(n1==2) { coin=coin+b*2; score=score+15; } if(n1==3) { coin=coin+b*5/2; score=score+20; } if(n1==4) { coin=coin+b*3; score=score+25; } if(n1==5) { coin=coin+b*7/2; score=score+30; } if(n1==6) { coin=coin+b*4; score=score+35; } } if((n2==n5)&&(n5==n8)) { d2++; d5++; d8++; line++; if(n2==1) { coin=coin+b*3/2; score=score+10; } if(n2==2) { coin=coin+b*2; score=score+15; } if(n2==3) { coin=coin+b*5/2; score=score+20; } if(n2==4) { coin=coin+b*3; score=score+25; } if(n2==5) { coin=coin+b*7/2; score=score+30; } if(n2==6) { coin=coin+b*4; score=score+35; } } if((n3==n6)&&(n6==n9)) { d3++; d6++; d9++; line++; if(n3==1) { coin=coin+b*3/2; score=score+10; } if(n3==2) { coin=coin+b*2; score=score+15; } if(n3==3) { coin=coin+b*5/2; score=score+20; } if(n3==4) { coin=coin+b*3; score=score+25; } if(n3==5) { coin=coin+b*7/2; score=score+30; } if(n3==6) { coin=coin+b*4; score=score+35; } } if((n1==n5)&&(n5==n9)) { d1++; d5++; d9++; line++; if(n1==1) { coin=coin+b*3/2; score=score+10; } if(n1==2) { coin=coin+b*2; score=score+15; } if(n1==3) { coin=coin+b*5/2; score=score+20; } if(n1==4) { coin=coin+b*3; score=score+25; } if(n1==5) { coin=coin+b*7/2; score=score+30; } if(n1==6) { coin=coin+b*4; score=score+35; } } if((n3==n5)&&(n5==n7)) { d3++; d5++; d7++; line++; if(n3==1) { coin=coin+b*3/2; score=score+10; } if(n3==2) { coin=coin+b*2; score=score+15; } if(n3==3) { coin=coin+b*5/2; score=score+20; } if(n3==4) { coin=coin+b*3; score=score+25; } if(n3==5) { coin=coin+b*7/2; score=score+30; } if(n3==6) { coin=coin+b*4; score=score+35; } } if(d1>=1) s1=15; if(d2>=1) s2=15; if(d3>=1) s3=15; if(d4>=1) s4=15; if(d5>=1) s5=15; if(d6>=1) s6=15; if(d7>=1) s7=15; if(d8>=1) s8=15; if(d9>=1) s9=15; score=score+10; break; case 2: q=1; break; } if(q==1) break; } } }while(1); } #define BUF_SIZE 5 #define USED -1 // 使用過之牌設成 -1 #define N 52 #define SWAP(a, b){int t; t=a; a=b; b=t;} #define RANDOM(low, up)(int)(((up)-(low))*(double)(rand())/RAND_MAX +(low)) const char flower[4] = {'\5','\4','\3','\6'}; // 4個花色 const char number[13][BUF_SIZE] = { " A", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", " J", " Q", " K"}; // shuttle void shuttle(int *array, int Size) { int i, pos; srand((unsigned)time(NULL)); rand(); // 先抽掉一個亂數 for(i=0; i<=Size-1; i++) { // 取出第 pos 張牌 pos = RANDOM(0, N-1); // 將第 i 張牌與第 pos 張牌交換 SWAP(array[i], array[pos]); } } // display_card void display_card(int card) { putchar(flower[ card % 4 ]); printf("%s",number[ card >> 2 ]); } void display(int* array, int Size) { int i; for(i=0; i<=Size-1; i++) { if(array[i]!=USED) display_card(array[i]); printf("\n"); } } // 比較單張大小, a>b 傳回 1, ab) return 1; else return 0; } // 計算現有牌數之第 n 張牌之數值 int cal_n_pos(int *array, int Size, int n) { int number=0; // 點數 //將第N張使用的牌設為-1 while(array[n]==USED) n++; number = array[n]; array[n]=USED; return number; } void stu2() { int i, poker[N]; int card_cnt=N; // 剩下牌數 int draw_pos=0; // 玩家抽第幾張牌 int draw_number=0; // 玩家抽出之點數 int win=0,lose=0; // 戰積 int pc_pos; //pc抽第幾張牌 int pc_number;//pc抽出之點數 for(i=0; i<=N-1; i++) poker[i] = i; shuttle(poker,N); while(card_cnt!=0) { printf("----------------------\n"); printf("\n[the numbers of card: %2d]\n", card_cnt); // 顯示剩餘牌數 // 欲抽哪張牌 do{ printf("please input nth card to draw(1~%2d)(輸入0離開): ", card_cnt); scanf("%d", &draw_pos); if(draw_pos==0) break; if(draw_pos>card_cnt || draw_pos<=0) printf("input error!! input again\n"); }while(draw_pos>card_cnt || draw_pos<=0); if(draw_pos==0) break; draw_pos--; // 玩家抽出之點數 draw_number = cal_n_pos(poker, N, draw_pos); printf("You draw:"); display_card(draw_number); card_cnt--; // 電腦抽出之點數 pc_pos = RANDOM(0, card_cnt-1); pc_number = cal_n_pos(poker, N, pc_pos); printf("\nPC draw:"); display_card(pc_number); card_cnt--; printf("\n"); if(compare_single(draw_number, pc_number)) { win++; printf("you win!!\n"); } else { lose++; printf("pc wins!!\n"); } } printf("--------------------------\n"); printf("you win %d times!!\n", win); printf("you lose %d times!!\n", lose); printf("thank you for playing.."); } int answerBase[5040][4]; /*答案庫,會裝入所有重複的四位數,從1234到9876 5040是因為10*9*8*7,4是因為每組答案是一個四位數*/ int isOver, restart; //當作布林值,判斷是否遊戲結束以及是否要繼續玩 int remain; //答案庫裡面的答案數 int a, b; //拿來裝使用者回答的幾a幾b int randNum; //裝亂數,隨機從答案庫裡面拿答案 void stu3() { int select; while (1) { system("cls"); printf("Welcome to the guess number game ^^!!\n"); GNGMenu(); scanf_s("%d", &select); if (select == 0) { printf("Bye Bye ^^!!\n"); break; } switch (select) { case 1: GNGintro(); break; case 2: GNGstart(); break; default: break; } } } void GNGMenu() { printf("=======================================\n"); printf(" 0. Exit!\n"); printf(" 1. Introduction!\n"); printf(" 2. Start the game!\n"); printf("=======================================\n"); } void GNGintro() { system("cls"); printf("***************************************************\n"); printf("***************************************************\n"); printf("** **\n"); printf("** 規則說明: **\n"); printf("** 1. 每回合會猜一個四位數字 **\n"); printf("** 2. A的次數代表猜對了幾個數字且位置正確 **\n"); printf("** 3. B的次數代表猜對了幾個數字但位置不對 **\n"); printf("** 4. 你必須告訴A和B的值 **\n"); printf("** 5. 七回合內必可猜出答案 **\n"); printf("** **\n"); printf("***************************************************\n"); printf("***************************************************\n"); printf("Menu!"); system("pause"); } int GNGstart() { while (1 == 1) { system("cls"); printf("+++++++++++ Game Start !! ^^~ +++++++++++\n"); prepare(); while (!isOver) { ask(); answer(); if (isOver) break; think(); printf("------------------\n"); } menu(); if (!restart) break; } system("pause"); return 0; } void prepare(void) { int i, tmp, unit_1, unit_10, unit_100, unit_1000; remain = 5040; tmp = 0; //tmp只是一個拿來計數變數 isOver = 0; //判斷結束與否 for (i = 0; i<10000; i++)//這個for產生答案庫 { unit_1 = (i / 1) % 10; //以下四行把四位數拆成四個各位數分別存到四個變數 unit_10 = (i / 10) % 10; unit_100 = (i / 100) % 10; unit_1000 = (i / 1000) % 10; if (unit_1 != unit_10 && unit_1 != unit_100 && unit_1 != unit_1000 && unit_10 != unit_100 && unit_10 != unit_1000 && unit_100 != unit_1000) { answerBase[tmp][0] = unit_1000; answerBase[tmp][1] = unit_100; answerBase[tmp][2] = unit_10; answerBase[tmp][3] = unit_1; tmp++; } } } void ask(void) { int i; printf("Player:請問是"); srand(time(0)); while (1 == 1) { randNum = 0; for (i = 0; i<4; i++) { randNum *= 10; randNum += rand() % 10; } if (randNum 4)//如果a和b相加大於4當然就錯啦~ { printf("輸入錯誤\n\n"); right = 0; } } while (!right); if (a == 4) { printf("Player:耶~答對了!\n"); isOver = 1; } else if (remain == 1) //如果答案庫只剩一個答案,但是這答案還是錯的,就是玩家作弊! { printf("Player:你作弊!= =+\n"); isOver = 1; } } void think(void) { int i, j, k, aa, bb; int refer[4]; for (i = 0; i<4; i++) { refer[i] = answerBase[randNum][i]; } for (i = 0; i
沒有留言:
張貼留言