基于C語言實現(xiàn)簡易三子棋游戲
更新時間:2022年01月14日 12:16:15 作者:獨行劍俠
這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
用C語言寫三子棋的具體代碼,供大家參考,具體內(nèi)容如下
1、頭文件
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //標識符定義 #define ROW 3 #define COL 3 //函數(shù)定義 //棋盤初始化 void init_board(char board[ROW][COL], int row, int col); //打印棋盤 void display_board(char board[ROW][COL], int row, int col); //玩家下棋 void player_game(char board[ROW][COL], int row, int col); //電腦下棋 void comeputer_game(char board[ROW][COL], int row, int col); //判斷輸贏 char is_win(char board[ROW][COL], int row, int col);
2、游戲函數(shù)
#include "game.h" //棋盤初始化 void init_board(char board[ROW][COL], int row, int col) { ?? ?int i = 0; ?? ?int j = 0; ?? ?for (i = 0; i < ROW; i++) { ?? ??? ?for (j = 0; j < COL; j++) { ?? ??? ??? ?board[i][j] = ' '; ?? ??? ?} ?? ?} } //打印棋盤 void display_board(char board[ROW][COL], int row, int col) { ?? ?int i = 0; ?? ?int j = 0; ?? ?int k = 0; ?? ?for (i = 0; i < ROW; i++) { ?? ??? ?for (j = 0; j < COL; j++) { ?? ??? ??? ?printf(" %c ",board[i][j]); ?? ??? ??? ?if (j < COL - 1) { ?? ??? ??? ??? ?printf("|"); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?printf("\n"); ?? ??? ?if (i < ROW - 1) { ?? ??? ??? ?for (k = 0; k < COL; k++) { ?? ??? ??? ??? ?printf("---"); ?? ??? ??? ??? ?if (k < COL - 1) { ?? ??? ??? ??? ??? ?printf("|"); ?? ??? ??? ??? ?} ?? ??? ??? ?}?? ??? ??? ??? ? ?? ??? ?} ?? ??? ?printf("\n"); ?? ?} } //玩家下棋 void player_game(char board[ROW][COL], int row, int col) { ?? ?int x = 0; ?? ?int y = 0; ?? ?while (1) ?? ?{ ?? ??? ?printf("請輸入你要落子的坐標>:"); ?? ??? ?scanf("%d %d", &x, &y); ?? ??? ?if (x <= row && y <= col && x >= 1 && y >= 1) { ?? ??? ??? ?if (board[x - 1][y - 1] == ' ') { ?? ??? ??? ??? ?board[x - 1][y - 1] = '*'; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?else { ?? ??? ??? ??? ?printf("你輸入的坐標被占用!\n"); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?else { ?? ??? ??? ?printf("你輸入的坐標有誤,請重新輸入!\n"); ?? ??? ?} ?? ?}?? ? } //電腦下棋 void comeputer_game(char board[ROW][COL], int row, int col) { ?? ?while (1) { ?? ??? ?int x = rand() % row; ?? ??? ?int y = rand() % col; ?? ??? ?if (board[x][y] == ' ') { ?? ??? ??? ?board[x][y] = '#'; ?? ??? ??? ?break; ?? ??? ?} ?? ?}?? ? } //判斷輸贏 //1.玩家贏返回* //2.電腦贏返回# //3.雙方都不贏,棋盤沒有位置平局返回p //4.雙方都不贏,棋盤還有位置繼續(xù)下棋返回c char is_win(char board[ROW][COL], int row, int col) { ?? ?int x = 0; ?? ?int y = 0;?? ?? ?? ?//判斷行 ?? ?for (x = 0; x < row; x++) { ?? ??? ?if (board[x][0] == board[x][1] && board[x][1] == board[x][2] && board[x][1] != ' ') { ?? ??? ??? ?return board[x][1]; ?? ??? ?}?? ??? ? ?? ?} ?? ?//判斷列 ?? ?for (y = 0; y < col; y++) { ?? ??? ?if (board[0][y] == board[1][y] && board[1][y] == board[2][y] && board[1][y] != ' ') { ?? ??? ??? ?return board[1][y]; ?? ??? ?}?? ??? ? ?? ?} ?? ?//判斷對角線 ?? ?if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') { ?? ??? ?return board[1][1]; ?? ?}? ?? ?if (board[2][0] == board[1][1] && board[1][1] == board[1][2] && board[1][1] != ' ') { ?? ??? ?return board[1][1]; ?? ?} ?? ?//判斷棋盤是否有空位 ?? ?for (x = 0; x < row; x++) { ?? ??? ?for (y = 0; y < col; y++) { ?? ??? ??? ?if (board[x][y] == ' ') { ?? ??? ??? ??? ?return 'c'; ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?return 'p'; }
3、游戲?qū)崿F(xiàn)
#include "game.h" //打印菜單 void menu() { ?? ?printf("***************************\n"); ?? ?printf("********* 三 子 棋 ********\n"); ?? ?printf("********* 1. play ?********\n"); ?? ?printf("********* 0. exit ?********\n"); ?? ?printf("***************************\n"); } void game() { ?? ?char win = 0; ?? ?//定義棋盤存儲 ?? ?char board[ROW][COL]; ?? ?//棋盤初始化 ?? ?init_board(board, ROW, COL); ?? ?//打印棋盤 ?? ?display_board(board, ROW, COL); ?? ?while (1) { ?? ??? ?//玩家下棋 ?? ??? ?player_game(board, ROW, COL); ?? ??? ?display_board(board, ROW, COL); ?? ??? ?//判斷輸贏 ?? ??? ?win = is_win(board, ROW, COL); ?? ??? ?if (win != 'c') { ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?//電腦下棋 ?? ??? ?comeputer_game(board, ROW, COL); ?? ??? ?display_board(board, ROW, COL); ?? ??? ?//判斷輸贏 ?? ??? ?win = is_win(board, ROW, COL); ?? ??? ?if (win != 'c') { ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?if (win == '*') { ?? ??? ?printf("恭喜玩家勝利!\n"); ?? ??? ?display_board(board, ROW, COL); ?? ??? ?system("pause"); ?? ?} ?? ?else if (win == '#') { ?? ??? ?printf("電腦勝利,繼續(xù)加油喲!\n"); ?? ??? ?display_board(board, ROW, COL); ?? ??? ?system("pause"); ?? ?} ?? ?else { ?? ??? ?printf("平局\n"); ?? ??? ?display_board(board, ROW, COL); ?? ??? ?system("pause"); ?? ?} } ? int main(void) { ?? ? ?? ?int num = 0; ?? ?srand((unsigned)time(NULL)); ?? ?do { ?? ??? ?//打印菜單 ?? ??? ?menu(); ?? ??? ?//選擇菜單 ?? ??? ?printf("請選擇菜單>:"); ?? ??? ?scanf("%d", &num); ?? ??? ?switch (num) ?? ??? ?{ ?? ??? ?case 0: ?? ??? ??? ?break; ?? ??? ?case 1: ?? ??? ??? ?game(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?printf("你的選擇錯誤,請重新選擇!\n"); ?? ??? ??? ?system("pause"); ?? ??? ??? ?system("cls"); ?? ??? ??? ?break; ?? ??? ?} ?? ?} while (num); ?? ? ?? ?system("pause"); ?? ?return 0; }
效果圖片
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
詳解C++數(shù)組和數(shù)組名問題(指針、解引用)
這篇文章主要介紹了詳解C++數(shù)組和數(shù)組名問題(指針、解引用),指針的實質(zhì)就是個變量,它跟普通變量沒有任何本質(zhì)區(qū)別,指針本身是一個對象,同時指針無需在定義的時候賦值,具體內(nèi)容詳情跟隨小編一起看看吧2021-09-09