C語言實現井字棋小遊戲
阿新 • • 發佈:2018-12-13
#include <stdio.h> #include <stdlib.h> int store[]={'_','_','_','_','_','_','_','_','_'}, shunt=1, count, i; void print_map() { char boundary='|'; getchar(); system("cls"); for(i=0;i<9;i++) { printf("%c%c",boundary,store[i]); if(i==2||i==5) { putchar(boundary); putchar('\n'); } } putchar(boundary); putchar('\n'); } int judge_win(int f=0) { if(store[0]+store[1]+store[2]==3*'O'||store[0]+store[1]+store[2]==3*'X'|| store[3]+store[4]+store[5]==3*'O'||store[3]+store[4]+store[5]==3*'X'|| store[6]+store[7]+store[8]==3*'O'||store[6]+store[7]+store[8]==3*'X'|| store[0]+store[3]+store[6]==3*'O'||store[0]+store[3]+store[6]==3*'X'|| store[1]+store[4]+store[7]==3*'O'||store[1]+store[4]+store[7]==3*'X'|| store[2]+store[5]+store[8]==3*'O'||store[2]+store[5]+store[8]==3*'X'|| store[0]+store[4]+store[8]==3*'O'||store[0]+store[4]+store[8]==3*'X'|| store[2]+store[4]+store[6]==3*'O'||store[2]+store[4]+store[6]==3*'X') f=1; return f; } void judge_final() { if(count%2==0) printf("二號選手獲勝\n"); else printf("一號選手獲勝\n"); } int number_mend(int number) { switch(number) { case 1:number=7;break; case 2:number=8;break; case 3:number=9;break; case 7:number=1;break; case 8:number=2;break; case 9:number=3;break; default:; } return number; } void scan_number() { int a, b, number; scanf("%d",&number); number=number_mend(number); while(number<1||number>9||store[number-1]!='_') { printf("非法輸入,請重新輸入\n"); getchar(); scanf("%d",&number); number=number_mend(number); } if(shunt%2!=0) { a=number; store[a-1]='O'; print_map(); shunt++; } else { b=number; store[b-1]='X'; print_map(); shunt++; } } void renew() { for(;i>=0;i--) store[i]='_'; } int main() { char turn; printf("這是一個井字棋遊戲,小鍵盤1到9對應九個格。按回車開始遊戲\n"); for(turn='y';turn=='y';turn=getchar(),renew()) { print_map(); for(count=0;count<10;count++) { if(judge_win())break; if(count==9) { printf("平局\n"); goto lp; } scan_number(); } judge_final(); lp:printf("是否繼續?y/n\n"); } printf("遊戲結束\n"); return 0; }