学习笔记10-C语言-小项目-五子棋
生活随笔
收集整理的這篇文章主要介紹了
学习笔记10-C语言-小项目-五子棋
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
小項(xiàng)目:
需要的數(shù)據(jù) 1、定義棋盤的二維數(shù)組 2、定義變量用于記錄下棋的坐標(biāo) 3、定義角色 @ 黑棋 O 白棋 * 空位業(yè)務(wù)邏輯: 是否需要對(duì)數(shù)據(jù)初始化 for(;;) {1、清屏、顯示棋盤2、落子坐標(biāo)是否合法、該位置是否有棋子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āng)前棋手:%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:光標(biāo)代替字符#
#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āng)前棋手:%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"); } }總結(jié)
以上是生活随笔為你收集整理的学习笔记10-C语言-小项目-五子棋的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux | 高级I/O函数
- 下一篇: 双屏怎么快速切换鼠标_在笔记本上实现双屏