基于C語言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)簡(jiǎn)單五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
五子棋大家都玩兒過,所以規(guī)則就不介紹了
今天遇到一個(gè)學(xué)弟在實(shí)現(xiàn)的時(shí)候遇到一些問題,所以將實(shí)現(xiàn)的過程記錄下
水平有限,僅供參考,互相交流,共同進(jìn)步。
#include<stdio.h>
#include<windows.h>
?
int main()
{
?
? ? int i,j;//表示棋盤橫縱坐標(biāo)
? ? /*************************************************
? ? *
? ? *繪制表格需要的字符:┌ ┬ ┐├ ┼ ┤└ ┴ ┘│─●○
? ? *數(shù)組的值0表示黑棋,1表示白棋,2表示該位置沒有棋
? ? *
? ? */
? ? int qipan[20][20];
? ? int color=0;//0表示黑棋(圓圈),1表示白棋
? ? int iTemp = 0,jTemp = 0,countTemp = 0;
? ? int colorFlag = 0;
? ? char op;
?
again:
?
? ? for(i=0;i<20;i++)
? ? ? ? for(j=0;j<20;j++)
? ? ? ? ? ? qipan[i][j]=2;
?
? ? while(1)
? ? {
? ? ? ? printf("請(qǐng)輸入棋子位置(棋盤大小為20*20),如2,2: ");
? ? ? ? scanf("%d,%d", &i,&j);
?
? ? ? ? if(i<1 || i >20 || j<1 || j>20)
? ? ? ? {
? ? ? ? ? ? printf("輸入的位置超出了棋盤的范圍,請(qǐng)重新輸入!\n");
? ? ? ? ? ? continue;
? ? ? ? }
?
? ? ? ? if((2 != qipan[i-1][j-1]))
? ? ? ? {
? ? ? ? ? ? printf("提示:該位置已經(jīng)有棋子了!\n");
? ? ? ? ? ? fflush(stdin);
? ? ? ? ? ? continue;
? ? ? ? }
?
? ? ? ? color=(color+1)%2;//獲取棋盤棋子屬性
? ? ? ? qipan[i-1][j-1]=color;//將該位置棋子屬性給棋盤
?
? ? ? ? //根據(jù)棋盤對(duì)應(yīng)位置屬性,繪制最新狀態(tài)的棋盤,一行行繪制,邊緣特別處理
? ? ? ? for(i=1;i<=20;i++)
? ? ? ? {
? ? ? ? ? ? //第一行
? ? ? ? ? ? if(i==1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //第一列
? ? ? ? ? ? ? ? if(qipan[i-1][0]==1)
? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? if(qipan[i-1][0]==0)
? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? if(qipan[i-1][0]==2)
? ? ? ? ? ? ? ? ? ? printf("┌ ");
?
? ? ? ? ? ? ? ? //第2-19列
? ? ? ? ? ? ? ? for(j=2;j<=19;j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==1)
? ? ? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==0)
? ? ? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==2)
? ? ? ? ? ? ? ? ? ? ? ? printf("┬ ");
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? //第20列
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==1)
? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==0)
? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==2)
? ? ? ? ? ? ? ? ? ? printf("┐ ");
?
? ? ? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? }
?
? ? ? ? ? ? //第2-19行
? ? ? ? ? ? if(i<=19 && i>=2)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //第一列
? ? ? ? ? ? ? ? if(qipan[i-1][0]==1)
? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? if(qipan[i-1][0]==0)
? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? if(qipan[i-1][0]==2)
? ? ? ? ? ? ? ? ? ? printf("├ ");
?
? ? ? ? ? ? ? ? //第2-19列
? ? ? ? ? ? ? ? for(j=2;j<=19;j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==1)
? ? ? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==0)
? ? ? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==2)
? ? ? ? ? ? ? ? ? ? ? ? printf("┼ ");
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? //第20列
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==1)
? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==0)
? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==2)
? ? ? ? ? ? ? ? ? ? printf("┤ ");
?
? ? ? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? }
?
? ? ? ? ? ? //第20行
? ? ? ? ? ? if(i==20)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(qipan[i-1][0]==1)
? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? if(qipan[i-1][0]==0)
? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? if(qipan[i-1][0]==2)
? ? ? ? ? ? ? ? ? ? printf("└ ");
?
? ? ? ? ? ? ? ? for(j=2;j<=19;j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==1)
? ? ? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==0)
? ? ? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==2)
? ? ? ? ? ? ? ? ? ? ? ? printf("┴ ");
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==1)
? ? ? ? ? ? ? ? ? ? printf("●");
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==0)
? ? ? ? ? ? ? ? ? ? printf("○");
? ? ? ? ? ? ? ? if(qipan[i-1][j-1]==2)
? ? ? ? ? ? ? ? ? ? printf("┘ ");
?
? ? ? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? }
?
? ? ? ? }
?
? ? ? ? //判斷輸贏
? ? ? ? for(i=0;i<20;i++)
? ? ? ? {
? ? ? ? ? ? for(j=0;j<20;j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //count = 0;
? ? ? ? ? ? ? ? //如果檢測(cè)到該有棋子,則檢查與該棋子有關(guān)的是否可以贏
? ? ? ? ? ? ? ? if(2 != qipan[i][j] )
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? colorFlag = qipan[i][j];
? ? ? ? ? ? ? ? ? ? countTemp = 1;
? ? ? ? ? ? ? ? ? ? iTemp = i;
? ? ? ? ? ? ? ? ? ? jTemp = j;
?
? ? ? ? ? ? ? ? ? ? //該棋子橫向上是否可以贏
? ? ? ? ? ? ? ? ? ? while((++jTemp<20 )&&( 5 != countTemp ))
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if(colorFlag == qipan[i][jTemp])
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp++;
? ? ? ? ? ? ? ? ? ? ? ? ? ? if(5 == countTemp)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(0 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("黑棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else if(1 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("白棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? goto whileEnd;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? //縱向可以贏
? ? ? ? ? ? ? ? ? ? iTemp = i;
? ? ? ? ? ? ? ? ? ? jTemp = j;
? ? ? ? ? ? ? ? ? ? countTemp = 1;
? ? ? ? ? ? ? ? ? ? while((++iTemp<20 )&&(5 !=countTemp))
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if(colorFlag == qipan[iTemp][j])
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp++;
? ? ? ? ? ? ? ? ? ? ? ? ? ? if(5 == countTemp)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(0 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("黑棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else if(1 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("白棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? goto whileEnd;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp= 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? //斜向,從左上到右下方向檢查
? ? ? ? ? ? ? ? ? ? iTemp = i;
? ? ? ? ? ? ? ? ? ? jTemp = j;
? ? ? ? ? ? ? ? ? ? countTemp = 1;
? ? ? ? ? ? ? ? ? ? while((++iTemp<20 )&&(++jTemp<20 )&&(5 !=countTemp))
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if(colorFlag == qipan[iTemp][jTemp])
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp++;
? ? ? ? ? ? ? ? ? ? ? ? ? ? if(5 == countTemp)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(0 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("黑棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else if(1 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("白棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? goto whileEnd;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? //斜向,從右上到左下方向檢查
? ? ? ? ? ? ? ? ? ? iTemp = i;
? ? ? ? ? ? ? ? ? ? jTemp = j;
? ? ? ? ? ? ? ? ? ? countTemp = 1;
? ? ? ? ? ? ? ? ? ? while((++iTemp>=0 )&&(--jTemp>=0)&&(5 !=countTemp))
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? if(colorFlag == qipan[iTemp][jTemp])
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp++;
? ? ? ? ? ? ? ? ? ? ? ? ? ? if(5 == countTemp)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(0 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("黑棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else if(1 == colorFlag)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("白棋贏了!\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? goto whileEnd;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? countTemp = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? }
?
? ? ? ? }
?
? ? }
whileEnd:
? ? printf("重新開始,還是退出?重新開始請(qǐng)按y/Y,退出請(qǐng)按任意鍵:");
? ? fflush(stdin);
? ? op = getchar();
?
? ? if(('y' == op) ||( 'Y' == op))
? ? {
? ? ? ? system("cls");
? ? ? ? printf("已經(jīng)重新開始了,請(qǐng)輸入第一顆棋子的坐標(biāo):\n\n\n");
? ? ? ? goto again;
? ? }
?
}效果圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
一篇文章讓你輕松理解C++中vector和list區(qū)別
對(duì)于學(xué)c語言的同學(xué)來說,vector和list這兩個(gè)東西經(jīng)常會(huì)搞錯(cuò),下面這篇文章主要給大家介紹了關(guān)于C++中vector和list區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-01-01
OpenCV使用BSM統(tǒng)計(jì)視頻中移動(dòng)的對(duì)象
這篇文章主要為大家詳細(xì)介紹了OpenCV如何使用BackgroundSubstractor(BSM)實(shí)現(xiàn)視頻中移動(dòng)對(duì)象統(tǒng)計(jì)功能,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-02-02
C語言中strcpy和strcat的使用和模擬實(shí)現(xiàn)
strcpy()?函數(shù)是?C語言中一個(gè)非常重要的字符串處理函數(shù),其功能是將一個(gè)字符串復(fù)制到另一個(gè)字符串中,strcat函數(shù)可以將一個(gè)字符串拼接到另一個(gè)字符串的末尾,本文給大家介紹了C語言中strcpy和strcat的使用和模擬實(shí)現(xiàn),需要的朋友可以參考下2024-03-03
C++構(gòu)造函數(shù)的一些注意事項(xiàng)總結(jié)
構(gòu)造函數(shù)是創(chuàng)建類對(duì)象,并且在創(chuàng)建完成前,對(duì)類進(jìn)行初始化的特殊函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++構(gòu)造函數(shù)的一些注意事項(xiàng),需要的朋友可以參考下2021-11-11
MFC中動(dòng)態(tài)創(chuàng)建控件以及事件響應(yīng)實(shí)現(xiàn)方法
這篇文章主要介紹了MFC中動(dòng)態(tài)創(chuàng)建控件以及事件響應(yīng)實(shí)現(xiàn)方法,詳細(xì)講解了MFC中動(dòng)態(tài)創(chuàng)建控件以及事件響應(yīng)的概念與實(shí)現(xiàn)方法,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10

