1. 程式人生 > 程式設計 >C語言實現簡單的三子棋

C語言實現簡單的三子棋

本文例項為大家分享了C語言實現簡單三子棋遊戲的具體程式碼,供大家參考,具體內容如下

一、主要思想

1、建立一個3*3的棋盤(使用字元陣列)
2、初始化棋盤(用空格填充)
3、列印棋盤(使其有可見的邊框)
4、玩家落子,用x表示(檢驗是否越界,是否已經落子,是否贏)
5、電腦落子,用o表示(檢驗是否已經落子,是否贏) 注:電腦在有效範圍內隨機落子,使用當前時間戳設定隨機種子即srand(time(0))
6、三種情況:玩家贏,電腦贏,和棋

二、程式碼實現

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//定義巨集,棋盤的最大行數和最大列數為3
#define MAX_ROW 3
#define MAX_COL 3
 
//無論是玩家落子還是電腦落子,都需確定落子的行和列,以此確定在棋盤上的位置
 
//玩家落子
//玩家輸入之後,需要檢驗是否輸入越界,該位置是否已經落子
//若無這兩種情況,就將該位置賦值為'x',否則重新輸入
char playermove(char chessboard[MAX_ROW][MAX_COL])
{
 int row = 0;
 int col = 0;
 while (1){
 printf("請輸入您落子的位置:(row col)");
 scanf("%d %d",&row,&col);
 //校驗
 //校驗輸入是否輸入有誤
 if (row < 0 || row >= MAX_ROW || col<0 || col>=MAX_COL){
 printf("您的輸入越界!!\n");
 continue;
 }else if (chessboard[row][col]!=' '){
 printf("該位置已落子!!\n");
 continue;
 }else{
 chessboard[row][col] = 'x';
 return chessboard[row][col];
 }
 
 }
}
 
//電腦落子
//需要檢驗該位置是否落子(無需檢驗是否越界,因為我們設定的落子範圍為有效範圍)
//若無以上情況,就將該位置賦值為'o',否則,重新獲取隨機值
void computermove(char chessboard[MAX_ROW][MAX_COL])
{
 while (1){
 int row = rand() % MAX_ROW;   //獲取一個0~2範圍內的隨機行數
 int col = rand() % MAX_COL;   //獲取一個0~2範圍內的隨機列數
 //校驗落子位置是否已經落子
 if (chessboard[row][col] != ' '){
 continue;
 }
 chessboard[row][col] = 'o';
 break;
 }
 
}
 
//判斷是否為和棋,即判斷棋盤是否滿
//找到空格代表未滿,找不到,則滿了(因為我們初始化的時候將棋盤初始化為空格' ')
//滿返回1,未滿返回0
char isFull(char chessboard[MAX_ROW][MAX_COL])
{
 for (int row = 0; row < MAX_ROW; row++){
 for (int col = 0; col < MAX_COL; col++){
 //找到空格
 if (chessboard[row][col] == ' '){
 return 0;
 }
 }
 }
 //未找到,即滿了
 return 1;
}
 
//判斷是否贏
//'x'表示玩家獲勝
//'o'表示電腦獲勝
//' '表示勝負未分
//'h'表示和棋
char isWin(char chessboard[MAX_ROW][MAX_COL])
{
//同一行相同
//注意:相同應排除空格相同的情況,以下同
 for (int row = 0; row < MAX_ROW; row++){
 if (chessboard[row][0]!=' '
 &&(chessboard[row][0] ==chessboard[row][1])
 &&(chessboard[row][0]== chessboard[row][2])){
 return chessboard[row][0];
 }
 }
//同一列相同
 for (int col = 0; col < MAX_COL; col++){
 if (chessboard[0][col]!=' '
 &&(chessboard[0][col] == chessboard[1][col])
 &&(chessboard[0][col] == chessboard[2][col])){
 return chessboard[0][col];
 }
 }
//對角線相同
 if (chessboard[0][0] != ' '
 && (chessboard[0][0] == chessboard[1][1])
 && (chessboard[0][0] == chessboard[2][2])){
 return chessboard[0][0];
 }
 if (chessboard[0][2] != ' ' 
 &&(chessboard[0][2] == chessboard[1][1])
 &&(chessboard[0][2] == chessboard[2][0])){
 return chessboard[0][2];
 }
//和棋
 if (isFull(chessboard)){
 return 'h';
 }
 return ' ';
}
 
//初始化棋盤,初始化為空格' '
void init(char chessboard[MAX_ROW][MAX_COL])
{
 for (int row = 0; row < MAX_ROW; row++){
 for (int col = 0; col < MAX_COL; col++){
 chessboard[row][col] = ' ';
 }
 }
}
//列印棋盤
void printchessboard(char chessboard[MAX_ROW][MAX_COL])
{
 printf("+---+---+---+\n");
 for (int row = 0; row < MAX_ROW; row++){
 printf("| %c | %c | %c |\n",chessboard[row][0],chessboard[row][1],chessboard[row][2]);
 printf("+---+---+---+\n");
 }
 
}
 
//遊戲
void game()
{
 char chessboard[MAX_ROW][MAX_COL] = {0};
 init(chessboard);//初始化棋盤
 char winner = ' ';
 while (1){
 printchessboard(chessboard);//列印棋盤
 playermove(chessboard);//玩家落子
 //校驗,是否贏是否和棋
 winner = isWin(chessboard);
 if (winner != ' '){
 break;
 }
 computermove(chessboard);//電腦落子
 winner = isWin(chessboard);
 if (winner != ' '){
 break;
 }
 }
 if (winner == 'x'){
 printchessboard(chessboard);
 printf("恭喜您贏了!\n");
 }else if (winner == 'o'){
 printchessboard(chessboard);
 printf("很遺憾您輸了!\n");
 }else if (winner == 'h'){
 printchessboard(chessboard);
 printf("和棋!您和電腦棋技相當~\n");
 }
}
 
//選單
int menue(int choice)
{
 printf("************************\n");
 printf("1.開始遊戲\n");
 printf("0.結束遊戲\n");
 printf("************************\n");
 printf("請輸入您的選擇:");
 scanf("%d",&choice);
 return choice;
}
 
//主函式
int main()
{
 srand(time(0));
 int choice = 0;
 while (1){
 choice=menue(choice);
 if (choice == 1){
 game();
 }else if (choice == 0){
 break;
 }else{
 printf("您的輸入有誤,請重新輸入\n");
 continue;
 }
 }
 system("pause");
 return 0;
}

三、執行結果

C語言實現簡單的三子棋

大概框架如此,也可以進行優化,比如system("cls")清屏等

更多有趣的經典小遊戲實現專題,分享給大家:

C++經典小遊戲彙總

python經典小遊戲彙總

python俄羅斯方塊遊戲集合

JavaScript經典遊戲 玩不停

java經典小遊戲彙總

javascript經典小遊戲彙總

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。