C語言入門---仿五子棋遊戲
阿新 • • 發佈:2018-10-31
仿五子棋遊戲
#define _CRT_SECURE_NO_WARNINGS #define ROW 15 #define COL 15 #include<stdio.h> #include<stdlib.h> #include<math.h> //1.定義二維陣列表示棋盤 char g_chess_board[ROW][COL]; int input_row = -1; int input_col = -1; void Init(){ for (int row = 0; row < ROW; row++){ for (int col = 0; col < COL; col++){ g_chess_board[row][col] = ' '; } } //2.對棋盤初始化 } //3.列印棋盤 void print(){ int row = 0; for (int row = 0; row < ROW; row++){ printf(" %2d", row); } printf("\n"); for (int row = 0; row < ROW; row++){ for (int i = 0; i < ROW; i++){ if (i == 0){ printf(" |----"); } else{ printf("|----"); } } printf("\n"); for (int col = 0; col < COL; col++){ if (col != COL - 1){ if (col == 0){ printf("%2d| %c ", row, g_chess_board[row][col]); } else{ printf("| %c ", g_chess_board[row][col]); } } else{ printf("| %c |\n", g_chess_board[row][col]); } } } for (int i = 0; i < ROW; i++){ if (i == 0){ printf(" |----"); } else{ printf("|----"); } } printf("\n"); } int IsFull(){ //滿了返回1 沒滿返回0 for (int row = 0; row < ROW; row++){ for (int col = 0; col < COL; col++){ if (g_chess_board[row][col] == ' ') return 0; } return 1; } } void PlayerMove(){ //4.玩家落子,檢查遊戲是否結束 // a提示玩家落子 // b檢驗玩家輸入 // c若玩家輸入不合法提示玩家重新輸入 // d.若合法 賦值 while (1){ printf("請玩家落子(輸入棋盤數字座標row col)\n"); scanf("%d%d", &input_row, &input_col); if (input_col > COL || input_col<0 || input_row>ROW || input_row < 0){ printf("輸入棋盤範圍錯誤,請重輸~~\n"); continue; } else if (g_chess_board[input_row][input_col] != ' '){ printf("當前棋格有子,請重下!\n"); continue; } else if (g_chess_board[input_row][input_col] == ' '){ g_chess_board[input_row][input_col] = 'x'; break; } } } void ComputerMove_upgrade_dia(int row, int col){ while (1){ if (g_chess_board[++row][++col] == ' '){ g_chess_board[row][col] = 'o'; break; } } } void ComputerMove_upgrade_right(int row, int col){ while (1){ if (g_chess_board[++row][col] == ' '){ g_chess_board[row][col] = 'o'; break; } else{ if (g_chess_board[row][++col] == ' '){ g_chess_board[row][col] = 'o'; break; } } } } void ComputerMove_upgrade_left(int row, int col){ while (1){ if (g_chess_board[row][--col] == ' '){ g_chess_board[row][col] = 'o'; break; } else{ if (g_chess_board[--row][col] == ' '){ g_chess_board[row][col] = 'o'; break; } } } } void ComputerMove_upgrade(int row, int col){ if (row == col){ ComputerMove_upgrade_dia( row, col); } else if (row < col){ ComputerMove_upgrade_right(row, col); } else if (row>col){ ComputerMove_upgrade_left(row, col); } } void ComouterMove(){ //5.電腦落子,檢查遊戲是否結束 while (1){ int input_row = rand() % ROW; int input_col = rand() % COL; if (g_chess_board[input_row][input_col] == ' '){ g_chess_board[input_row][input_col] = 'o'; break; } } } char CheckWinner(){ //檢查列是否有連子 for (int row = 0; row < ROW; row++){ for (int col = 0; col < COL; col++){ if (g_chess_board[row][col] == g_chess_board[row][col + 1] && g_chess_board[row][col] == g_chess_board[row][col + 2] && g_chess_board[row][col] == g_chess_board[row][col - 1] && g_chess_board[row][col] == g_chess_board[row][col - 2] && g_chess_board[row][col] != ' ') return g_chess_board[row][col]; } } for (int row = 0; row < ROW; row++){ for (int col = 0; col < COL; col++){ if (g_chess_board[row][col] == g_chess_board[row + 1][col] && g_chess_board[row][col] == g_chess_board[row + 2][col] && g_chess_board[row][col] == g_chess_board[row - 1][col] && g_chess_board[row][col] == g_chess_board[row - 2][col] && g_chess_board[row][col] != ' ') return g_chess_board[row][col]; } } //檢查k=-1/2時 是否有連子 for (int row = 0; row < ROW; row++){ for (int col = 0; col < COL; col++){ if (g_chess_board[row][col] == g_chess_board[row - 1][col - 1] && g_chess_board[row][col] == g_chess_board[row - 2][col - 2] && g_chess_board[row][col] == g_chess_board[row + 1][col + 1] && g_chess_board[row][col] == g_chess_board[row + 2][col + 2] && g_chess_board[row][col] != ' ') return g_chess_board[row][col]; } } //檢查k=1/2時 是否有連子 for (int row = 0; row < ROW; row++){ for (int col = 0; col < COL; col++){ if (g_chess_board[row][col] == g_chess_board[row - 1][col + 1] && g_chess_board[row][col] == g_chess_board[row - 2][col + 2] && g_chess_board[row][col] == g_chess_board[row + 1][col - 1] && g_chess_board[row][col] == g_chess_board[row + 2][col - 2] && g_chess_board[row][col] != ' ') return g_chess_board[row][col]; } } if (IsFull()){ return 'q'; } else return ' '; //1.返回x表示玩家勝利 //2.返回o表示電腦勝利 //3.返回q表示和棋 //4.返回‘ ‘表示遊戲繼續 } int main(){ char winner = ' '; Init(); while (1){ print(); PlayerMove(); winner = CheckWinner(); if (winner != ' '){ break; } ComputerMove_upgrade(input_row, input_col); //ComouterMove(); winner = CheckWinner(); if (winner != ' '){ break; } } if (winner == 'x'){ print(); printf("玩家勝利!\n"); } else if (winner == 'o'){ printf("電腦勝利!\n"); } else if (winner == 'q'){ printf("和棋\n"); } system("pause"); return 0; }