700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 嵌入式培训经验分享——C语言小项目(五子棋)

嵌入式培训经验分享——C语言小项目(五子棋)

时间:2024-04-19 17:55:14

相关推荐

嵌入式培训经验分享——C语言小项目(五子棋)

在学习了C语言的基本语法之后,我们可以尝试着来做一个小小的项目,下面是我尝试着做的一个小项目-----五子棋,分享给大家,功能不太完善,多多指教,里面没有用到指针的知识点。

#include <stdio.h>#include <string.h>char board[17][17];int w=17,count=0,a,b;int flag=0;char arr[5],buf[2];char number[]={'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};void set_init();//棋盘的初始化void set_down();//双方轮流下棋void set_reinit();//刷新棋盘int sure_result(int aa,int bb);//判断是否胜利int main(){set_init();while(sure_result(a-1,b-1)){set_down();set_reinit();}printf("共交手%d次\n",(count+1)/2);return 0;}void set_init(){//初始化棋盘for(int i=0;i<w;i++){for(int j=0;j<w;j++){board[i][j]='.';}}//打印棋盘横着的编码printf(" ");for(int a=0;a<w;a++){printf(" %c",number[a]);}printf("\n");//打印棋盘的边框printf(" ");for(int a=0;a<w;a++){printf("——");}printf("\n");//打印棋盘for(int x=0;x<w;x++){printf("%c",number[x]);//打印棋盘竖着编码for(int y=0;y<w;y++){if(y==0)printf("|");//打印左边边框printf(" %c",board[x][y]);if(y+1==w)printf(" |");//打印右边边框}printf("\n");}//打印棋盘的边框printf(" ");for(int a=0;a<w;a++){printf("——");}printf("\n");}void set_down(){count++;//记录交手的次数if(!(count%2))//偶数白方下棋{printf("请白方下棋:");for(int i=0;i<2;i++){scanf("%c",&arr[i]);}}else if(count%2)//奇数黑方下棋{printf("请黑方下棋:");for(int i=0;i<2;i++){scanf("%c",&arr[i]);}}fgets(buf,sizeof(buf),stdin);#if 0for(int a=0;a<2;a++){printf("%d",arr[a]);}printf("\n");#endif//判断输入的格式是否正确if(!(arr[0]>'0' && arr[0]<'I')){printf("输入的格式有误!!!\n");if(!(count%2))//偶数白方下棋{printf("请白方下棋:");for(int i=0;i<2;i++){scanf("%c",&arr[i]);}}else if(count%2)//奇数黑方下棋{printf("请黑方下棋:");for(int i=0;i<2;i++){scanf("%c",&arr[i]);}}fgets(buf,sizeof(buf),stdin);}else if(!(arr[1]>'0' || arr[1]<'I')){printf("输入的格式有误!!!\n");if(!(count%2))//偶数白方下棋{printf("请白方下棋:");for(int i=0;i<2;i++){scanf("%c",&arr[i]);}}else if(count%2)//奇数黑方下棋{printf("请黑方下棋:");for(int i=0;i<2;i++){scanf("%c",&arr[i]);}}fgets(buf,sizeof(buf),stdin);}//计算输入的行号if(arr[0]>='A' && arr[1]<'A'){a=arr[0]-55;b=arr[1]-48;}else if(arr[0]>='A' && arr[1]>='A'){a=arr[0]-55;b=arr[1]-55;}else if(arr[0]<'A' && arr[1]>='A'){a=arr[0]-48;b=arr[1]-55;}else{a=arr[0]-48;b=arr[1]-48;}//刷新棋盘的数据if(!(count%2)){board[a-1][b-1]='o';}else if(count%2){board[a-1][b-1]='x';}}//打印刷新的棋盘void set_reinit(){//打印棋盘横着的编码printf(" ");for(int a=0;a<w;a++){printf(" %c",number[a]);}printf("\n");//打印棋盘的边框printf(" ");for(int a=0;a<w;a++){printf("——");}printf("\n");//打印棋盘for(int x=0;x<w;x++){printf("%c",number[x]);//打印棋盘竖着编码for(int y=0;y<w;y++){if(y==0)printf("|");//打印左边边框printf(" %c",board[x][y]);if(y+1==w)printf(" |");//打印右边边框}printf("\n");}//打印棋盘的边框printf(" ");for(int a=0;a<w;a++){printf("——");}printf("\n");}//判断是否是胜利int sure_result(int aa,int bb){//printf("aa=%d,bb=%d\n",aa,bb);//遍历数组if(board[aa][bb]=='o'){for(int n=aa-4;n<=aa;n++)//判断竖直方向是否有5个棋子{if(n<0)continue;for(int nn=n;nn<(n+5);nn++){if(board[nn][bb]=='O'){flag=flag+1;;}if(flag==5){printf("白方胜利\n");return 0;}}flag=0;}for(int n=bb-4;n<=bb;n++)//判断水平方向是否有5个棋子{if(n<0)continue;for(int nn=n;nn<(n+5);nn++){if(board[aa][nn]=='o'){flag=flag+1;;}if(flag==5){printf("白方胜利\n");return 0;}}flag=0;}for(int n=aa-4,n1=bb-4;n<=aa;n++,n1++)//判断斜下方向是否有5个棋子{if(n<0 || n1<0)continue;for(int nn=n,nn1=n1;nn<(n+5);nn++,nn1++){if(board[nn][nn1]=='o'){flag=flag+1;;}if(flag==5){printf("白方胜利\n");return 0;}}flag=0;}for(int n=aa+4,n1=bb-4;n1<=bb;n--,n1++)//判断斜上方向是否有5个棋子{if(!(n<=16 && n>=0) || n1<0)continue;for(int nn=n,nn1=n1;nn1<(n1+5);nn--,nn1++){if(board[nn][nn1]=='o'){flag=flag+1;;}if(flag==5){printf("白方胜利\n");return 0;}}flag=0;}//判断黑方是否获胜}else if(board[aa][bb]=='x'){for(int n=aa-4;n<=aa;n++)//判断竖直方向是否有5个棋子{if(n<0)continue;for(int nn=n;nn<(n+5);nn++){if(board[nn][bb]=='x'){flag=flag+1;;}if(flag==5){printf("黑方胜利\n");return 0;}}flag=0;}for(int n=bb-4;n<=bb;n++)//判断水平方向是否有5个棋子{if(n<0)continue;for(int nn=n;nn<(n+5);nn++){if(board[aa][nn]=='x'){flag=flag+1;;}if(flag==5){printf("黑方胜利\n");return 0;}}flag=0;}for(int n=aa-4,n1=bb-4;n<=aa;n++,n1++)//判断斜下方向是否有5个棋子{if(n<0 || n1<0)continue;for(int nn=n,nn1=n1;nn<(n+5);nn++,nn1++){if(board[nn][nn1]=='x'){flag=flag+1;;}if(flag==5){printf("黑方胜利\n");return 0;}}flag=0;}for(int n=aa+4,n1=bb-4;n1<=bb;n--,n1++)//判断斜上方向是否有5个棋子{if(!(n<=16 && n>=0) || n1<0)continue;for(int nn=n,nn1=n1;nn1<(n1+5);nn--,nn1++){if(board[nn][nn1]=='x'){flag=flag+1;;}if(flag==5){printf("黑方胜利\n");return 0;}}flag=0;}}return 1;}

功能不太完善,但是可以完成基本的功能,下棋,交手,判断输赢等等

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。