摘要:三子棋小游戲三子棋游戲簡介一分析及實現(xiàn)棋盤落子判斷輸贏二程序演示三完整代碼總結(jié)三子棋游戲簡介這是一個簡單的三子棋小游戲,估計大家小時候都玩兒過,只要能連成三個,無論是行,列還是對角線,就可以勝利了。
這是一個簡單的三子棋小游戲,估計大家小時候都玩兒過,只要能連成三個,無論是行,列還是對角線,就可以勝利了。是不是很簡單呢,那我們來嘗試一下用C語言來寫一個簡單的三子棋游戲。
想要玩游戲,那首先應(yīng)該有一個棋盤吧。因為我們玩兒的是三子棋,所以來說一個3X3的棋盤應(yīng)該可以滿足要求。這里使用了一個三行三列的二維數(shù)組來模擬三子棋的棋盤。
有了棋盤之后在開始游戲之前先把棋盤初始化一下,這樣看起來更方便。
//初始化棋盤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] = " "; } }}
之后呢,再來打印看看,要優(yōu)化一下再打印出來
//打印棋盤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");}
這是我設(shè)計的一個簡單的小棋盤
棋盤的風(fēng)格和樣式可以根據(jù)自己的喜好更改。
好了,現(xiàn)在我們有了棋盤,有了打印出來的樣子,那接下來就應(yīng)該向棋盤上落子了!
下棋呢可以是兩個人下,當(dāng)然也可以自己和電腦下棋,這里我選擇和電腦對弈,這樣就需要兩個功能了,一個是玩家下棋,一個就是電腦下棋了。
//玩家下棋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("坐標(biāo)已被占用!/n"); } } else { printf("坐標(biāo)非法,請重新輸入!/n"); } }}
為了將玩家和電腦區(qū)分開,需要使用兩個不一樣的符號來代表玩家的落子和電腦的落子 玩家----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; } }}
玩家的落子可以通過輸入坐標(biāo),而電腦呢,我們讓他隨機選擇合理的坐標(biāo)范圍進(jìn)行落子。
那隨著玩家和電腦相繼落子,我們就需要判斷誰獲勝了,或者平局的情況。
//判斷輸贏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表示繼續(xù)}
如果棋盤滿了,還沒有分出勝負(fù)的話就是平局的情況。
為了判斷棋盤是否滿了,我們也需要相應(yīng)的功能來簡化我們的代碼。
//判斷棋盤是否滿了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文件用來存儲預(yù)處理指令和宏定義
#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("坐標(biāo)已被占用!/n"); } } else { printf("坐標(biāo)非法,請重新輸入!/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表示繼續(xù)}
#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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/123195.html
摘要:三子棋目錄一問題介紹三子棋,在民間又叫井字棋。因為人們在游玩時常常不畫棋盤的邊框,正如漢字中的井字,多稱為井字棋。 三子棋 目錄 一、問題介紹 ? ? ? ? 三子棋,在民間又叫井字棋。因為人們在游玩時常常不畫棋盤的邊框,正如漢字中的井字,多稱為井字棋。 三子棋的游戲規(guī)則十分的簡單: ...
摘要:簡單介紹了三子棋原理后接下來為大家講解分步目標(biāo)及代碼如何實現(xiàn)。電腦下棋我們實現(xiàn)了玩家和電腦的下棋后,我們需要編寫一個函數(shù)來判斷雙方的輸贏。我們使用函數(shù)來實現(xiàn)這一目標(biāo)。 目錄 1.三子棋原理 2.分塊代碼實現(xiàn) 3.總結(jié) 1.首先向大家介紹一下三子棋的原理 首先我們需要有一個棋盤,初始時棋...
摘要:文章目錄三子棋的設(shè)置的內(nèi)容設(shè)置的設(shè)置棋盤的內(nèi)容棋盤以及棋盤的初始化打印棋盤下棋步驟玩家下棋電腦下棋判斷是否勝利三子棋三子棋的規(guī)則是在的棋盤里,雙方輪流下子以和表示,先將個子連成一條線橫豎斜都可以的一方獲勝下面是三子棋語 ...
摘要:三子棋三子棋游戲介紹規(guī)則游戲設(shè)計思路代碼分析文件代碼分析。玩家下棋實現(xiàn)。三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋圈圈叉叉一條龍井字棋等。落子后打印棋盤以顯示。假設(shè)平局時判定輸贏的函數(shù)返回后面代碼實現(xiàn)時詳細(xì)講。 ...
閱讀 794·2021-11-12 10:36
閱讀 3373·2021-09-08 10:44
閱讀 2744·2019-08-30 11:08
閱讀 1402·2019-08-29 16:12
閱讀 2673·2019-08-29 12:24
閱讀 896·2019-08-26 10:14
閱讀 683·2019-08-23 18:32
閱讀 1172·2019-08-23 17:52