简单五子棋(单机版-C)
数组
一个简单的五子棋过程。code
之实现了开局和判断胜负。缺乏载入棋谱,保存棋谱。
游戏
#include <stdio.h> //图形输出棋盘 printGraphicBoard(int b[9][9]){ int i,j; for(i=0;i<9;i++) { if(i==0) printf(" ①②③④⑤⑥⑦⑧⑨\n"); switch (i) { case 0: printf("⒈");break; case 1: printf("⒉");break; case 2: printf("⒊");break; case 3: printf("⒋");break; case 4: printf("⒌");break; case 5: printf("⒍");break; case 6: printf("⒎");break; case 7: printf("⒏");break; case 8: printf("⒐");break; } for(j=0;j<9;j++) { if(i==0 && j==0 ) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("┌"); if(i==0 && (j>=1 && j<=7)) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("┬"); if(i==0 && j==8 ) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("┐"); if(j==0 && (i>=1 && i<=7)) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("├"); if(j==8 && (i>=1 && i<=7)) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("┤"); if(i!=0 && j!=0 && i!=8 && j!=8) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("┼"); if(i==8 && j==0 ) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("└"); if(i==8 && (j>=1 && j<=7)) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("┴"); if(i==8 && j==8 ) if(b[i][j] == -1) printf("●"); else if (b[i][j]==1) printf("○"); else printf("┘"); } printf("\n"); } } //根据b数组判断该棋局是否已胜,若是已经胜了,返回1;不然,返回0 int isWin(int b[9][9]){ int i,j,k; for(i=0;i<9;i++) for(j=0;j<9;j++) { for(k=1;k<=8;k++) if (b[i][j]!=0) switch (k) { case 1://左边 if( j-4>=0 && b[i][j]==b[i][j-1] && b[i][j]==b[i][j-2] && b[i][j]==b[i][j-3] && b[i][j]==b[i][j-4] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; case 2://右边 if( j+4<=8 && b[i][j]==b[i][j+1] && b[i][j]==b[i][j+2] && b[i][j]==b[i][j+3] && b[i][j]==b[i][j+4] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; case 3://上面 if( i-4>=0 && b[i][j]==b[i-1][j] && b[i][j]==b[i-2][j] && b[i][j]==b[i-3][j] && b[i][j]==b[i-4][j] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; case 4://down if( i+4 <= 8 && b[i][j]==b[i+1][j] && b[i][j]==b[i+2][j] && b[i][j]==b[i+3][j] && b[i][j]==b[i+4][j] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; case 5://左上 if( i-4>=0 && j-4 >= 0 && b[i][j]==b[i-1][j-1] && b[i][j]==b[i-2][j-2] && b[i][j]==b[i-3][j-3] && b[i][j]==b[i-4][j-4] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; case 6://左下i+,j- if( i+4<=8 && j-4>=0 && b[i][j]==b[i+1][j-1] && b[i][j]==b[i+2][j-2] && b[i][j]==b[i+3][j-3] && b[i][j]==b[i+4][j-4] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; case 7://右上i-,j+ if( i-4>=0 && j+4<=8 && b[i][j]==b[i-1][j+1] && b[i][j]==b[i-2][j+2] && b[i][j]==b[i-3][j+3] && b[i][j]==b[i-4][j+4] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; case 8://右下 if( i+4<=8 && j+4 <=8 && b[i][j]==b[i+1][j+1] && b[i][j]==b[i+2][j+2] && b[i][j]==b[i+3][j+3] && b[i][j]==b[i+4][j+4] ) { printf("%s\n",b[i][j]==1?"白方获胜。":"黑方获胜。"); return 1;//一方获胜返回1 } break; } } return 0; } void main() { int board[9][9]={0}; int key; int i,j,x,y; int turn = -1; //1 游戏屏幕 printf("=================================================\n"); printf("* 1. 开局 *\n"); printf("* 2. 载入 *\n"); printf("* 3. 保存 *\n"); printf("* 4. 退出 *\n"); printf("=================================================\n"); //输入选择 scanf("%d",&key); //根据选择进入不一样过程 switch (key) { case 1: //图形化输出初始的棋盘 //print board printGraphicBoard(board); //game start while(!isWin(board)){ if (turn == -1) { printf("请输入黑方落子点行(i,j)"); scanf("%d",&x); scanf("%d",&y); if(board[x-1][y-1]==0) board[x-1][y-1] = -1;//记住一个黑子 else { printf("此处不准落子!\n"); turn = turn * -1; } //显示黑子 printGraphicBoard(board); } else { //输入白字 printf("请输入白方落子点行(i,j)"); scanf("%d",&x); scanf("%d",&y); if(board[x-1][y-1]==0) board[x-1][y-1] = 1;//记住一个白子 else { printf("此处不准落子!\n"); turn = turn * -1; } //显示 printGraphicBoard(board); } turn = turn * -1;//轮流下棋 } // break; case 2: case 3: case 4: default: break; } }