C語言數(shù)組實現(xiàn)三子棋應(yīng)用實例
本文實例為大家分享了C語言數(shù)組實現(xiàn)三子棋應(yīng)用的具體代碼,供大家參考,具體內(nèi)容如下

三子棋:(拆分部分如下)
test.c 測試游戲邏輯
game.h關(guān)于游戲相關(guān)的函數(shù)聲明,符號聲明 頭文件的包含
game.c游戲相關(guān)函數(shù)的實現(xiàn)
游戲進(jìn)行的過程:(4種)
1.玩家獲勝--*(游戲結(jié)束)
2.電腦獲勝--#(游戲結(jié)束)
3.平局--Q(游戲結(jié)束)
4.游戲繼續(xù)--C
IsWin函數(shù) 用來判斷游戲的狀態(tài)
game.c
#include"game.h"
#include<stdio.h>
//初始化棋盤的函數(shù)?
void InitBoard(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 DisplayBoard(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++)
?? ??? ?{
?? ??? ??? ?printf(" %c ",board[i][j]);
?? ??? ??? ?if(j<col-1)
?? ??? ??? ??? ?printf("|");
?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?if(i<row-1)?
?? ??? ?{
?? ??? ??? ?int j=0;
?? ??? ??? ?for(j=0;j<col;j++)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("---");
?? ??? ??? ??? ?if(j<col-1)
?? ??? ??? ? ? ??? ?printf("|");?? ?
?? ??? ??? ?}
?? ??? ??? ?printf("\n");?? ?
?? ??? ?}
?? ?}
}
?
//玩家下棋?
void PlayerMove(char board[ROW][COL],int row,int col)?
{
?? ?int x=0;
?? ?int y=0;
?? ?printf("玩家走:>\n");
?? ?while(1)
?? ?{
?? ??? ?printf("請輸入下棋的坐標(biāo):>");
?? ??? ?scanf("%d%d",&x,&y);
?? ??? ?//判斷坐標(biāo)合法性?
?? ??? ?if(x>=1&&x<=row&&y>=1&&y<=col)
?? ??? ?{
?? ??? ??? ?//下棋
?? ??? ??? ?//判斷坐標(biāo)是否被占用
?? ??? ??? ?if(board[x-1][y-1]==' ')
?? ??? ??? ?{
?? ??? ??? ??? ?board[x-1][y-1]='*';
?? ??? ??? ??? ?break;
?? ??? ??? ?}?
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?printf("坐標(biāo)被占用,請重新輸入\n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("坐標(biāo)非法,請重新輸入\n");
?? ??? ?}
?? ?}
}
?
void ComputerMove(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]='#';
?? ??? ??? ?break;
?? ??? ?}
}
IsFull(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++)
?? ??? ?{
?? ??? ??? ?if(board[i][j]==' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return 0;//棋盤沒滿?
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return 1;
?? ?//棋盤滿了?
}
?
char IsWin(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]&&board[i][1]!=' ')
?? ??? ?{
?? ??? ??? ?return board[i][1];
?? ??? ?}
?? ?}
?? ?//判斷三列
?? ?for(i=0;i<ccol;i++)
?? ?{
?? ??? ?if(board[0][i]==board[1][i]&&board[1][i]==board[2][i]&&board[1][i]!=' ')
?? ??? ?{
?? ??? ??? ?return board[1][i];
?? ??? ?}
?? ?}?
?? ?//判斷對角線
?? ?if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')
?? ?{
?? ??? ?return board[1][1];
?? ?}
?? ?if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=' ')
?? ?{
?? ??? ?return board[1][1];
?? ?}
?? ?
?? ?//判斷平局--棋盤是否下滿,滿了返回1,不滿返回0
?? ?int ret=IsFull(board,row,col);
?? ?if(ret==1)
?? ?{
?? ??? ?return '0';
?? ?}?
?? ??
?? ?//繼續(xù)
?? ?return 'C';?? ??
}game.h
//頭文件的包含? #include<stdio.h> #include<stdlib.h> #include<time.h> ? //符號的定義? #define ROW 3 #define COL 3 ? //函數(shù)的聲明 //初始化棋盤? void InitBoard(char board[ROW][COL],int row,int col); ? //打印棋盤 void DisplayBoard(char board[ROW][COL],int row,int col);? ? //玩家下棋? void PlayerMove(char board[ROW][COL],int row,int col); ? //電腦下棋 void ComputerMove(char board[ROW][COL],int row,int col); ? //判斷游戲是否出現(xiàn)輸贏? char IsWin(char board[ROW][COL],int row,int col);
test.c
#include"game.h"http://引用頭文件?
void menu()
{
?? ?printf("*************************\n");
?? ?printf("***** ? ?1.play ? ?******\n");
?? ?printf("***** ? ?0.exit ? ?******\n");
?? ?printf("*************************\n");
}
void game()
{
?? ?//存儲數(shù)據(jù),二維數(shù)組
?? ?char board[ROW][COL];?
?? ?//初始化棋盤,初始化空格
?? ?InitBoard(board,ROW,COL);
?? ?//打印棋盤--本質(zhì)為打印數(shù)組內(nèi)容?
?? ?DisplayBoard(board,ROW,COL);?
?? ?char ret=0;//接受游戲狀態(tài)?
?? ?while(1)
?? ?{
?? ??? ?//玩家下棋
?? ??? ?PlayerMove(board,ROW,COL);
?? ??? ?DisplayBoard(board,ROW,COL);
?? ??? ?//判斷玩家是否獲勝?
?? ??? ?ret=IsWin(board,ROW,COL);
?? ??? ?if(ret!='C')
?? ??? ??? ?break;?
?? ??? ?
?? ??? ?//電腦下棋?
?? ??? ?ComputerMove(board,ROW,COL);
?? ??? ?DisplayBoard(board,ROW,COL);
?? ??? ?//判斷電腦是否獲勝?
?? ??? ?ret=IsWin(board,ROW,COL);
?? ??? ?if(ret!='C')
?? ??? ??? ?break;
?? ?}
?? ?if(ret=='*')
?? ?{
?? ??? ?printf("玩家獲勝\n");?? ?
?? ?}
?? ?else if(ret=='#')
?? ?{
?? ??? ?printf("電腦獲勝\n");?? ?
?? ?}
?? ?else
?? ?{
?? ??? ?printf("平局\n");?? ?
?? ?}
?? ?DisplayBoard(board,ROW,COL);?? ?
}
int main()
{
?? ?int input=0;
?? ?srand((unsigned int)time(NULL));
?? ?do
?? ?{
?? ??? ?menu();
?? ??? ?printf("請選擇:>");
?? ??? ?scanf("%d",&input);
?? ??? ?switch(input)
?? ??? ?{
?? ??? ?case 1:
?? ??? ??? ?printf("三子棋游戲\n");
?? ??? ??? ?break;
?? ??? ?case 0:
?? ??? ??? ?printf("退出游戲\n");
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?printf("選擇錯誤,重新選擇\n");
?? ??? ??? ?break;
?? ??? ?}
?? ?}while(input);
?? ?
}

部分游戲界面,如上圖所示
具體思路見代碼中注釋所示
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解約瑟夫環(huán)問題及其相關(guān)的C語言算法實現(xiàn)
這篇文章主要介紹了詳解約瑟夫環(huán)問題及其相關(guān)的C語言算法實現(xiàn),也是ACM當(dāng)中經(jīng)常會引用到的基礎(chǔ)題目,文中共介紹了三種C語言解答,需要的朋友可以參考下2015-08-08
OpenMP task construct 實現(xiàn)原理及源碼示例解析
這篇文章主要為大家介紹了OpenMP task construct 實現(xiàn)原理及源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
C語言詳解分析進(jìn)程控制中進(jìn)程終止的實現(xiàn)
當(dāng)進(jìn)程完成執(zhí)行最后語句并且通過系統(tǒng)調(diào)用 exit() 請求操作系統(tǒng)刪除自身時,進(jìn)程終止。這時,進(jìn)程可以返回狀態(tài)值(通常為整數(shù))到父進(jìn)程(通過系統(tǒng)調(diào)用 wait())。所有進(jìn)程資源,如物理和虛擬內(nèi)存、打開文件和 I/O 緩沖區(qū)等,會由操作系統(tǒng)釋放2022-08-08
C/C++實現(xiàn)HTTP協(xié)議解析的示例代碼
基本上,HTTP?是一種基于?TCP/IP?的通信協(xié)議,用于通過?Web?傳遞?HTML?文件、圖像文件、查詢結(jié)果等數(shù)據(jù)。本文將用C/C++實現(xiàn)HTTP協(xié)議解析,感興趣的可以了解一下2022-07-07

