C語言_簡易三子棋小遊戲
阿新 • • 發佈:2018-12-19
三子棋和五子棋的玩法相同,率先三子連成直線的玩家即可獲勝。
下面簡單介紹用C語言編寫的三子棋小遊戲。
思路如下:
1.定義一個二維陣列做為棋盤,定義陣列的行和列。
2.將棋盤初始化,填充為空格。
3.列印棋盤函式,每次下子後都列印一次棋盤。
4.玩家下子函式。
5.電腦下子函式。
6.判定遊戲結束函式。
7.程式碼如下:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #define ROW 3 #define COL 3 char chess[ROW][COL]; void InIt() { for (int row = 0; row < ROW; row++) { for (int col = 0; col < COL; col++) { chess[row][col] = ' '; } } } void Print() { printf(" \n"); printf(" |---|---|---|\n"); for (int row = 0; row < ROW; row++) { printf(" | %c | %c | %c |\n", chess[row][0], chess[row][1], chess[row][2]); if (row != ROW - 1) { printf(" |---|---|---|\n"); } } printf(" |---|---|---|\n"); printf(" \n"); } void PlayerTime() { while (1) { //1.提示玩家落子 printf("請玩家落子(輸入一個座標):\n"); int row = 0, col = 0; scanf("%d %d", &row, &col); //2.判斷輸入的座標是否合法,做出正確提示 if (row < 0 || row >= ROW || col < 0 || col >= COL) { printf("輸入有誤,請重新輸入!\n"); continue; } if (chess[row][col] != ' ') { printf("該位置已有子,請重新輸入!\n"); continue; } //3.合法後將對應位置填充為x chess[row][col] = 'x'; break; } } void ComputerTime() { printf("電腦落子!\n"); int row = 0, col = 0; //1.隨機產生一個行和列 while (1) { row = rand() % ROW; //[0,row) col = rand() % COL; //[0,col) //2.判斷位置是否正確 if (chess[row][col] == ' ') { //3.將對應位置填充為o chess[row][col] = 'o'; break; } } } int IsFull() { for (int row = 0; row < ROW; row++) { for (int col = 0; col < COL; col++) { if (chess[row][col] == ' '); return 0; } } return 1; } char CheckOver() { //檢查是否連成3個子 for (int row = 0; row < ROW; row++) { if (chess[row][0] == chess[row][1] && chess[row][0] == chess[row][2] && chess[row][2] != ' ') { return chess[row][0]; } } for (int col = 0; col < COL; col++) { if (chess[0][col] == chess[1][col] && chess[0][col] == chess[2][col] && chess[0][col] != ' ') { return chess[0][col]; } } if (chess[0][0] == chess[1][1] && chess[0][0] == chess[2][2] && chess[0][0] != ' ') { return chess[0][0]; } if (chess[0][2] == chess[1][1] && chess[0][2] == chess[2][0] && chess[0][4] != ' ') { return chess[0][2]; } if (IsFull()) { return 'q'; } return ' '; } int main() { char winner = ' '; InIt(); while (1) { Print(); PlayerTime(); winner = CheckOver(); if (winner != ' ') { Print(); break; } ComputerTime(); winner = CheckOver(); if (winner != ' ') { Print(); break; } } if (winner == 'o') { printf("電腦獲勝!!!\n"); } else if (winner == 'x') { printf("玩家獲勝!!!\n"); } else if (winner == 'q') { printf("和棋!!!\n"); } system("pause"); return 0; }