日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习笔记10-C语言-小项目-五子棋

發布時間:2023/12/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记10-C语言-小项目-五子棋 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小項目:

需要的數據 1、定義棋盤的二維數組 2、定義變量用于記錄下棋的坐標 3、定義角色 @ 黑棋 O 白棋 * 空位業務邏輯: 是否需要對數據初始化 for(;;) {1、清屏、顯示棋盤2、落子坐標是否合法、該位置是否有棋子3、判斷是否五子連珠4、交換角色5、顯示棋盤 }

代碼1

#include<stdio.h> #include<getch.h> #include<stdlib.h> int map[15][15]={}; int bx=0,by=0; int cnt=1,ret=0;int if_end(void); int color(void);void init(void) {map[bx][by]=3; }void show(void) {system("clear");for(int i=0;i<15;i++){for(int j=0;j<15;j++){switch(map[i][j]){case 0:printf("* ");break; case 1:printf("@ ");break; case 2:printf("O ");break; default:printf("# ");break;}}printf("\n");}printf("棋手1: @ 棋手2: O\n");printf("當前棋手:%d\n",color()); }void move_left(void) {if(by-1>=0){map[bx][by] -=3;map[bx][by-1] +=3;by--;} }void move_right(void) {if(by+1<15){map[bx][by] -=3;map[bx][by+1] +=3;by++;} }void move_up(void) {if(bx-1>=0){map[bx][by] -=3;map[bx-1][by] +=3;bx--;} }void move_down(void) {if(bx+1<15){map[bx][by] -=3;map[bx+1][by] +=3;bx++;} }void drop() {if(map[bx][by]==3){map[bx][by] += color();cnt++;} }void move(void) {switch(getch()){case 183:move_up();break;case 184:move_down();break;case 186:move_left();break;case 185:move_right();break;case 48:drop();break;} }int color(void) {if(cnt%2){return 1;}return 2; }int check1(void) {int num=0;for(int i=0;i<15;i++){if(map[bx][i]==1 || map [bx][i]==4){num++;if(num==5)return 1;}else{num=0;}}for(int i=0;i<15;i++){if(map[bx][i]==2 || map [bx][i]==5){num++;if(num==5)return 1;}else{num=0;}}return 0; }int check2(void) {int num=0;for(int i=0;i<15;i++){if(map[i][by]==1 || map [i][by]==4){num++;if(num==5)return 1;}else{num=0;}}for(int i=0;i<15;i++){if(map[i][by]==2 || map [i][by]==5){num++;if(num==5)return 1;}else{num=0;}}return 0; }int check3(void) {int i=1,num=0;while(by+i<15 && bx+i<15){if(map[bx][by]-3 != 0 && map[bx+i][by+i]==map[bx][by]-3){num++;i++;}else{i=1;break;}}while(by-i>=0 && bx-i>=0){if(map[bx][by]-3 != 0 && map[bx-i][by-i]==map[bx][by]-3){num++;i++;}else{i=1;break;}}if(num>=4)return 1;return 0; }int check4(void) {int i=1,num=0;while(by+i<15 && bx-i>=0){if(map[bx][by]-3 != 0 && map[bx-i][by+i]==map[bx][by]-3){num++;i++;}else{i=1;break;}}while(by-i>=0 && bx+i<15){if(map[bx][by]-3 != 0 && map[bx+i][by-i]==map[bx][by]-3){num++;i++;}else{i=1;break;}}if(num>=4)return 1;return 0; }int is_end(void) {if(check1()==1) return 1;if(check2()==1) return 1;if(check3()==1) return 1;if(check4()==1) return 1;return 0; }int main(int argc,const char* argv[]) {init();while(1){show();if(is_end()==1){map[bx][by] -=3;show();break;}move();}if(cnt%2){printf("白棋win");}else{printf("黑棋win"); } }

代碼2:光標代替字符#

#include<stdio.h> #include<getch.h> #include<stdlib.h> int map[15][15]={}; int bx=7,by=7; int cnt=1,ret=0;int if_end(void); int color(void);void show(void) {system("clear");for(int i=0;i<15;i++){for(int j=0;j<15;j++){switch(map[i][j]){case 0:printf(" *");break; case 1:printf(" @");break; case 2:printf(" O");break; }}printf("\n");}printf("棋手1: @ 棋手2: O\n");printf("當前棋手:%d\n",color()); }void drop() {if(map[bx][by]==0){map[bx][by] += color();cnt++;} }void move(void) {printf("\33[%d;%dH",bx+1,(by+1)*2);switch(getch()){case 183:bx>0&& bx--;break;case 184:bx<14&& bx++;break;case 186:by>0&& by--;break;case 185:by<14&& by++;break;case 48:drop();break;} }int color(void) {if(cnt%2){return 1;}return 2; }int check1(void) {int num=0;for(int i=0;i<15;i++){if(map[bx][i]==1 || map [bx][i]==4){num++;if(num==5)return 1;}else{num=0;}}for(int i=0;i<15;i++){if(map[bx][i]==2 || map[bx][i]==5){num++;if(num==5)return 1;}else{num=0;}}return 0; }int check2(void) {int num=0;for(int i=0;i<15;i++){if(map[i][by]==1 || map [i][by]==4){num++;if(num==5)return 1;}else{num=0;}}for(int i=0;i<15;i++){if(map[i][by]==2 || map [i][by]==5){num++;if(num==5)return 1;}else{num=0;}}return 0; }int check3(void) {int i=1,num=0;while(by+i<15 && bx+i<15){if(map[bx][by] != 0 && map[bx+i][by+i]==map[bx][by]){num++;i++;}else{i=1;break;}}while(by-i>=0 && bx-i>=0){if(map[bx][by] != 0 && map[bx-i][by-i]==map[bx][by]){num++;i++;}else{i=1;break;}}if(num>=4)return 1;return 0; }int check4(void) {int i=1,num=0;while(by+i<15 && bx-i>=0){if(map[bx][by] != 0 && map[bx-i][by+i]==map[bx][by]){num++;i++;}else{i=1;break;}}while(by-i>=0 && bx+i<15){if(map[bx][by] != 0 && map[bx+i][by-i]==map[bx][by]){num++;i++;}else{i=1;break;}}if(num>=4)return 1;return 0; }int is_end(void) {if(check1()==1) return 1;if(check2()==1) return 1;if(check3()==1) return 1;if(check4()==1) return 1;return 0; }int main(int argc,const char* argv[]) {while(1){show();if(is_end()==1){}move();}if(cnt%2){printf("白棋win");}else{printf("黑棋win"); } }

總結

以上是生活随笔為你收集整理的学习笔记10-C语言-小项目-五子棋的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。