基于C語言實現(xiàn)簡單五子棋游戲
更新時間:2022年03月25日 09:52:02 作者:行者三個石
這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡單五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)簡單五子棋游戲的具體代碼,供大家參考,具體內容如下
五子棋大家都玩兒過,所以規(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; ? ? } ? }
效果圖:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
數(shù)據(jù)結構課程設計-用棧實現(xiàn)表達式求值的方法詳解
本篇文章是對在c語言中用棧實現(xiàn)表達式求值的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05