1. 程式人生 > 其它 >C語言三子棋初級

C語言三子棋初級

技術標籤:c語言

程式碼實現:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
int menu(){
    printf("***********************\n");
    printf("*******  1.paly  ******\n");
    printf("*******  0.exit  ******\n");
    printf("***********************\n"
); return 0; } int initGame(char arr[ROW][COL],int row,int col){ for(int i=0; i< row;i++){ for( int j=0; j< col ;j++){ arr[i][j]=' '; } } return 0; } int displayGame(char arr[ROW][COL],int row,int col){ if(arr==NULL){ return -1; } int
i,j; for(i = 0; i< row ;i++){ for(j =0 ;j< col;j++){ printf(" %c ",arr[i][j]); if( j< col -1){ printf("|"); } } printf("\n"); if(i < col -1){ for( j=0 ;j < col ;
j++){ printf("---"); if( j< col -1){ printf("|"); } } printf("\n"); } } return 0; } int playMove(char arr[ROW][COL],int row,int col){ int x,y; while (1){ printf("玩家輸入:\n"); scanf("%d %d",&x,&y); if(x >= 1 && x<= row && y>=1 &&y <= col ){ if(arr[x-1][y-1] !=' '){ printf("位置已被佔用\n"); }else { arr[x-1][y-1] = '*'; break; } } else{ printf("位置不合法\n"); } } return 0; } int computerMove(char arr[ROW][COL],int row,int col){ int x,y; x=rand()%row; y=rand()%col; printf("電腦輸入\n"); while (1){ if(arr[x][y] ==' '){ arr[x][y] = '#'; break; } } return 0; } int isFull(char arr[ROW][COL],int row,int col){ for(int i=0; i<row ;i++){ for(int j=0 ;j<col;j++){ if(arr[i][j] == ' '){ return 0; } } } return 1; } char checkWin(char arr[ROW][COL],int row,int col){ int i=0; //行 for( i=0;i<row ; i++){ if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2]&&arr[i][0]!=' '){ return arr[i][0]; } } //列 for( i=0;i<col ; i++){ if(arr[0][i]==arr[1][i]&&arr[1][i]==arr[2][i]&&arr[0][i]!=' '){ return arr[i][0]; } } //對角線 if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]&&arr[0][0]!=' '){ return arr[0][0]; } if(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0]&&arr[1][1]!=' '){ return arr[1][1]; } //平局,棋盤已滿 if(isFull(arr,row,col)==1){ return 'q'; } //繼續對局 return 'c'; } int game(){ char arr[ROW][COL]; char ret=0; //隨機數生成器 srand((unsigned int)time(NULL)); //初始化 initGame(arr,ROW,COL); //展示 displayGame(arr,ROW,COL); while (1) { //玩家走 playMove(arr,ROW,COL); //檢查是否結束 ret= checkWin(arr,ROW,COL); if(ret!='c'){ break; } displayGame(arr,ROW,COL); computerMove(arr,ROW,COL); ret =checkWin(arr,ROW,COL); if(ret != 'c'){ break; } displayGame(arr,ROW,COL); } if(ret == '*'){ printf("玩家勝利\n"); }else if( ret == '#'){ printf("電腦勝利\n"); }else if(ret == 'q'){ printf("平局\n"); } return 0; } int main(){ int input=0; do{ menu(); scanf("%d",&input); switch (input) { case 1: game(); break; case 0: printf("退出遊戲\n"); break; default: printf("選擇錯誤\n"); break; } }while(input); return 0; }

問題:

判斷輸贏checkwin無擴充套件性,僅適用於三子棋