基于C語言實現(xiàn)簡單五子棋游戲
更新時間:2022年03月25日 09:52:02 作者:行者三個石
這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡單五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)簡單五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
五子棋大家都玩兒過,所以規(guī)則就不介紹了
今天遇到一個學弟在實現(xiàn)的時候遇到一些問題,所以將實現(xiàn)的過程記錄下
水平有限,僅供參考,互相交流,共同進步。
#include<stdio.h>
#include<windows.h>
?
int main()
{
?
? ? int i,j;//表示棋盤橫縱坐標
? ? /*************************************************
? ? *
? ? *繪制表格需要的字符:┌ ┬ ┐├ ┼ ┤└ ┴ ┘│─●○
? ? *數(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("請輸入棋子位置(棋盤大小為20*20),如2,2: ");
? ? ? ? scanf("%d,%d", &i,&j);
?
? ? ? ? if(i<1 || i >20 || j<1 || j>20)
? ? ? ? {
? ? ? ? ? ? printf("輸入的位置超出了棋盤的范圍,請重新輸入!\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ù)棋盤對應位置屬性,繪制最新狀態(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;
? ? ? ? ? ? ? ? //如果檢測到該有棋子,則檢查與該棋子有關的是否可以贏
? ? ? ? ? ? ? ? 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("重新開始,還是退出?重新開始請按y/Y,退出請按任意鍵:");
? ? fflush(stdin);
? ? op = getchar();
?
? ? if(('y' == op) ||( 'Y' == op))
? ? {
? ? ? ? system("cls");
? ? ? ? printf("已經(jīng)重新開始了,請輸入第一顆棋子的坐標:\n\n\n");
? ? ? ? goto again;
? ? }
?
}效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
一篇文章讓你輕松理解C++中vector和list區(qū)別
對于學c語言的同學來說,vector和list這兩個東西經(jīng)常會搞錯,下面這篇文章主要給大家介紹了關于C++中vector和list區(qū)別的相關資料,需要的朋友可以參考下2022-01-01
C語言中strcpy和strcat的使用和模擬實現(xiàn)
strcpy()?函數(shù)是?C語言中一個非常重要的字符串處理函數(shù),其功能是將一個字符串復制到另一個字符串中,strcat函數(shù)可以將一個字符串拼接到另一個字符串的末尾,本文給大家介紹了C語言中strcpy和strcat的使用和模擬實現(xiàn),需要的朋友可以參考下2024-03-03
MFC中動態(tài)創(chuàng)建控件以及事件響應實現(xiàn)方法
這篇文章主要介紹了MFC中動態(tài)創(chuàng)建控件以及事件響應實現(xiàn)方法,詳細講解了MFC中動態(tài)創(chuàng)建控件以及事件響應的概念與實現(xiàn)方法,具有一定的實用價值,需要的朋友可以參考下2014-10-10

