摘要:三子棋小游戲三子棋游戲簡介一分析及實現棋盤落子判斷輸贏二程序演示三完整代碼總結三子棋游戲簡介這是一個簡單的三子棋小游戲,估計大家小時候都玩兒過,只要能連成三個,無論是行,列還是對角線,就可以勝利了。
這是一個簡單的三子棋小游戲,估計大家小時候都玩兒過,只要能連成三個,無論是行,列還是對角線,就可以勝利了。是不是很簡單呢,那我們來嘗試一下用C語言來寫一個簡單的三子棋游戲。
想要玩游戲,那首先應該有一個棋盤吧。因為我們玩兒的是三子棋,所以來說一個3X3的棋盤應該可以滿足要求。這里使用了一個三行三列的二維數組來模擬三子棋的棋盤。
有了棋盤之后在開始游戲之前先把棋盤初始化一下,這樣看起來更方便。
//初始化棋盤void InitBoard(char board[][COL], int row, int col){ int i = 0; for (i = 0; i < ROW; i++) { int j = 0; for (j = 0; j < COL; j++) { board[i][j] = " "; } }}
之后呢,再來打印看看,要優化一下再打印出來
//打印棋盤void DisplayBoard(char board[ROW][COL], int row, int col){ int i = 0; for (i = 0; i < row; i++) { printf("+---+---+---+/n"); int j = 0; for (j = 0; j < col; j++) { printf("| %c ", board[i][j]); } printf("|/n"); } printf("+---+---+---+/n");}
這是我設計的一個簡單的小棋盤
棋盤的風格和樣式可以根據自己的喜好更改。
好了,現在我們有了棋盤,有了打印出來的樣子,那接下來就應該向棋盤上落子了!
下棋呢可以是兩個人下,當然也可以自己和電腦下棋,這里我選擇和電腦對弈,這樣就需要兩個功能了,一個是玩家下棋,一個就是電腦下棋了。
//玩家下棋void Player_move(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; while (1) { printf("玩家下棋:->"); scanf("%d %d", &x, &y); if (x > 0 && x <= row && y > 0 && y <= col) { if (board[x - 1][y - 1] == " ") { board[x - 1][y - 1] = "O"; break; } else { printf("坐標已被占用!/n"); } } else { printf("坐標非法,請重新輸入!/n"); } }}
為了將玩家和電腦區分開,需要使用兩個不一樣的符號來代表玩家的落子和電腦的落子 玩家----O,電腦----X
//電腦下棋void Computer_move(char board[ROW][COL], int row, int col){ printf("電腦下棋:/n"); while (1) { int x = rand() % ROW; int y = rand() % COL; if (board[x][y] == " ") { board[x][y] = "X"; break; } }}
玩家的落子可以通過輸入坐標,而電腦呢,我們讓他隨機選擇合理的坐標范圍進行落子。
那隨著玩家和電腦相繼落子,我們就需要判斷誰獲勝了,或者平局的情況。
//判斷輸贏char Is_win(char board[ROW][COL], int row, int col){ //判斷行列 int i = 0; for (i = 0; i < ROW; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) { return board[i][0]; } if (board[0][i] == board[1][i] && board[1][i] == board[2][i]) { return board[0][i]; } } //判斷對角線 if ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || (board[0][2] == board[1][1] && board[1][1] == board[2][0])) { return board[1][1]; } if (Is_full(board, row, col)) { return "D"; //平局 } return "C"; //Continue表示繼續}
如果棋盤滿了,還沒有分出勝負的話就是平局的情況。
為了判斷棋盤是否滿了,我們也需要相應的功能來簡化我們的代碼。
//判斷棋盤是否滿了int Is_full(char board[ROW][COL], int row, int col){ int i = 0; for (i = 0; i < ROW; i++) { int j = 0; for (j = 0; j < COL; j++) { if (board[i][j] == " ") return 0; } } return 1;}
以下是完整代碼,有需要的可以查看,我用了三個文件來存儲,兩個.c文件用來書寫主要代碼,一個.h文件用來存儲預處理指令和宏定義
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"int main(){ test(); return 0;}
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){ printf("**********************************/n"); printf("********** 1.play ************/n"); printf("********** 0.exit ************/n"); printf("**********************************/n");}void game(){ char board[ROW][COL] = {0}; InitBoard(board, ROW, COL); DisplayBoard(board, ROW, COL); char ret = 0; while (1) { Player_move(board, ROW, COL); DisplayBoard(board, ROW, COL); ret = Is_win(board, ROW, COL); if (ret == "O") { printf("玩家贏!/n"); break; } if (ret == "D") { printf("平局/n"); break; } Computer_move(board, ROW, COL); DisplayBoard(board, ROW, COL); ret = Is_win(board, ROW, COL); if (ret == "X") { printf("電腦贏!/n"); break; } }}void test(){ srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("請選擇:->"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戲!/n"); break; default: printf("輸入錯誤,請重新輸入!/n"); break; } } while (input);}//初始化棋盤void InitBoard(char board[][COL], int row, int col){ int i = 0; for (i = 0; i < ROW; i++) { int j = 0; for (j = 0; j < COL; j++) { board[i][j] = " "; } }}//打印棋盤void DisplayBoard(char board[ROW][COL], int row, int col){ int i = 0; for (i = 0; i < row; i++) { printf("+---+---+---+/n"); int j = 0; for (j = 0; j < col; j++) { printf("| %c ", board[i][j]); } printf("|/n"); } printf("+---+---+---+/n");}//玩家下棋void Player_move(char board[ROW][COL], int row, int col){ int x = 0; int y = 0; while (1) { printf("玩家下棋:->"); scanf("%d %d", &x, &y); if (x > 0 && x <= row && y > 0 && y <= col) { if (board[x - 1][y - 1] == " ") { board[x - 1][y - 1] = "O"; break; } else { printf("坐標已被占用!/n"); } } else { printf("坐標非法,請重新輸入!/n"); } }}//電腦下棋void Computer_move(char board[ROW][COL], int row, int col){ printf("電腦下棋:/n"); while (1) { int x = rand() % ROW; int y = rand() % COL; if (board[x][y] == " ") { board[x][y] = "X"; break; } }}//判斷棋盤是否滿了int Is_full(char board[ROW][COL], int row, int col){ int i = 0; for (i = 0; i < ROW; i++) { int j = 0; for (j = 0; j < COL; j++) { if (board[i][j] == " ") return 0; } } return 1;}//判斷輸贏char Is_win(char board[ROW][COL], int row, int col){ //判斷行列 int i = 0; for (i = 0; i < ROW; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) { return board[i][0]; } if (board[0][i] == board[1][i] && board[1][i] == board[2][i]) { return board[0][i]; } } //判斷對角線 if ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || (board[0][2] == board[1][1] && board[1][1] == board[2][0])) { return board[1][1]; } if (Is_full(board, row, col)) { return "D"; //平局 } return "C"; //Continue表示繼續}
#define _CRT_SECURE_NO_WARNINGS 1#define ROW 3#define COL 3#include #include #include void test();void menu();void InitBoard(char board[ROW][COL], int, int);void DisplayBoard(char board[ROW][COL], int, int);void Player_move(char board[ROW][COL], int, int);void Computer_move(char board[ROW][COL], int, int);char Is_win(char board
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123195.html
摘要:三子棋目錄一問題介紹三子棋,在民間又叫井字棋。因為人們在游玩時常常不畫棋盤的邊框,正如漢字中的井字,多稱為井字棋。 三子棋 目錄 一、問題介紹 ? ? ? ? 三子棋,在民間又叫井字棋。因為人們在游玩時常常不畫棋盤的邊框,正如漢字中的井字,多稱為井字棋。 三子棋的游戲規則十分的簡單: ...
摘要:簡單介紹了三子棋原理后接下來為大家講解分步目標及代碼如何實現。電腦下棋我們實現了玩家和電腦的下棋后,我們需要編寫一個函數來判斷雙方的輸贏。我們使用函數來實現這一目標。 目錄 1.三子棋原理 2.分塊代碼實現 3.總結 1.首先向大家介紹一下三子棋的原理 首先我們需要有一個棋盤,初始時棋...
摘要:三子棋三子棋游戲介紹規則游戲設計思路代碼分析文件代碼分析。玩家下棋實現。三子棋是一種民間傳統游戲,又叫九宮棋圈圈叉叉一條龍井字棋等。落子后打印棋盤以顯示。假設平局時判定輸贏的函數返回后面代碼實現時詳細講。 ...
閱讀 787·2021-11-12 10:36
閱讀 3363·2021-09-08 10:44
閱讀 2739·2019-08-30 11:08
閱讀 1392·2019-08-29 16:12
閱讀 2667·2019-08-29 12:24
閱讀 888·2019-08-26 10:14
閱讀 675·2019-08-23 18:32
閱讀 1160·2019-08-23 17:52