void win() { int i,j; for(i=0;i<11;i++) { for(j=0;j<11;j++) { if(2 != qipan[i][j] ) { colorFlag = qipan[i][j]; countTemp = 1; iTemp = i; jTemp = j; while((++jTemp<11 )&&(countTemp!=5 )) { if(colorFlag == qipan[i][jTemp]) { countTemp++; if(countTemp==5) { if(colorFlag==0) { printf("黑棋赢了!\a\n"); } else if(colorFlag==1) { printf("白棋赢了!\a\n"); } exit(0); } } else { countTemp = 0; break; } }
时间: 2024-02-10 14:22:41 浏览: 23
这段代码定义了一个函数win,其作用是判断当前是否有玩家胜利。
函数说明:
- win函数没有参数,没有返回值。
- 在函数体内部,使用两个for循环遍历棋盘的每个位置,根据不同的状态判断是否有连续的五个棋子。
- 在判断过程中,使用了一些临时变量,包括colorFlag、countTemp、iTemp和jTemp。其中,colorFlag存储当前位置的状态(0表示黑棋,1表示白棋),countTemp用于计数,iTemp和jTemp是当前位置的坐标。
- 如果有连续的五个棋子,就输出胜利信息,然后使用exit函数退出程序。
- win函数的作用是在玩家下棋的过程中不断判断是否有胜利者。如果有胜利者,就输出胜利信息并结束游戏。
相关问题
#include<stdio.h> #define Row a #define Col b #define Mine c void Board(int board[Row][Col],int mark[Row][Col]) { int i,j,k=0; do{ for(i=0;i<Row;i++) { for(j=0;j<Col;j++) { scanf("%c",&board[i][j]); mark[i][j]="."; if(board[i][j]=="") k++; } printf("\n"); } }while(k!=Mine); } void Number(int x,int y,int board[Row][Col],int mark[Row][Col]) { int i,j,n=0; for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;i++) { if(board[i][j]=="") n++; } } mark[x][y]=n; } void Print(int mark[Row][Col]) { int i,j; for(i=0;i<Row;i++) { for(j=0;j<Col;j++) { printf("%c",mark[i][j]); } } } void Operation(int o,int x,int y,int win,int board[Row][Col],int mark[Row][Col],int mine) { switch(o) { case 1:Number(x,y,board[Row][Col],mark[Row][Col]); while(mark[x][y]==0){int i,j; for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;j++) { Number(i,j,board[Row][Col],mark[Row][Col]); win=win+1; } } } break; case 2:if(mark[x][y]=="."||mark[x][y]=="?"){mark[x][y]="!";mine=mine-1;} break; case 3:if(mark[x][y]=="."){mark[x][y]="?";}if(mark[x][y]=="!"){mark[x][y]="?";mine=mine+1;} break; case 4:if(mark[x][y]=="?"){mark[x][y]=".";}if(mark[x][y]=="!"){mark[x][y]=".";mine=mine+1;} break; case 9: if(mark[x][y]=="."||mark[x][y]=="?"||mark[x][y]=="!") break; int i,j,m=0,v=0; for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;i++) { if(mark[i][j]=="!") m++; if(mark[i][j]=="."&&board[i][j]=="") v++; } } if(m==mark[x][y]&&v!=0) { printf("Hit mine, you lose"); break; } if(m==mark[x][y]&&v==0) { for(i=x-1;i<=x+1;i++) { for(j=y-1;j<=y+1;i++) { if(mark[i][j]==".") { Number(i,j,board[Row][Col],mark[Row][Col]); win=win+1; } } } } } } int main() { int win=0; int step=0; int t,a,b,c; scanf("%d",&t); switch(t) { case 1:a=9,b=9,c=10; break; case 2:a=16,b=16,c=40; break; case 3:a=16,b=30,c=99; break; case 4:scanf("%d %d %d",&a,&b,&c); break; } printf("\n"); int mine=c; int board[Row][Col],mark[Row][Col]; Board(board[Row][Col]); int o,x,y; while(win<ab-c) { scanf("%d %d %d",&o,&x,&y); step=step+1; if(o==1&&board[x][y]=="") { printf("Hit mine, you lose"); break; } if(o!=1&&o!=2&&o!=3&&o!=4&&o!=9) { win=win+1; } if(x<1||x>Row||y<1||y>Col) { win=win+1; } else { Operation(o,x,y); } printf("Game in progress"); printf("操作次数:%d 剩余雷数:%d",step,mine); Print(mark[Row][Col]); } while(win==ab-c) { printf("Game over, you win"); } int i,j; for(i=0;i<Row,i++) { for(j=0;j<Col;j++) { if(board[i][j]=="*") mark[i][j]=board[i][j]; } } Print(mark[Row][Col]); return 0; } 修改代码
#include<stdio.h>
#define Row 9
#define Col 9
#define Mine 10
void Board(char board[Row][Col], char mark[Row][Col]) {
int i, j, k=0;
do {
for(i=0; i<Row; i++) {
for(j=0; j<Col; j++) {
scanf(" %c", &board[i][j]);
mark[i][j]='.';
if(board[i][j]=='*') k++;
}
}
} while(k!=Mine);
}
void Number(int x, int y, char board[Row][Col], char mark[Row][Col]) {
int i, j, n=0;
for(i=x-1; i<=x+1; i++) {
for(j=y-1; j<=y+1; j++) {
if(i>=0 && i<Row && j>=0 && j<Col && board[i][j]=='*') n++;
}
}
mark[x][y]=n+'0';
}
void Print(char mark[Row][Col]) {
int i, j;
for(i=0; i<Row; i++) {
for(j=0; j<Col; j++) {
printf("%c ", mark[i][j]);
}
printf("\n");
}
}
void Operation(int o, int x, int y, int &win, char board[Row][Col], char mark[Row][Col], int &mine) {
switch(o) {
case 1:
if(board[x][y]=='*') {
printf("Hit mine, you lose\n");
break;
}
if(mark[x][y]=='.') {
Number(x, y, board, mark);
win++;
if(board[x][y]=='0') {
int i, j;
for(i=x-1; i<=x+1; i++) {
for(j=y-1; j<=y+1; j++) {
if(i>=0 && i<Row && j>=0 && j<Col && mark[i][j]=='.') {
Operation(1, i, j, win, board, mark, mine);
}
}
}
}
}
break;
case 2:
if(mark[x][y]=='.') {
mark[x][y]='!';
mine--;
}
break;
case 3:
if(mark[x][y]=='.') {
mark[x][y]='?';
} else if(mark[x][y]=='!') {
mark[x][y]='?';
mine++;
}
break;
case 4:
if(mark[x][y]=='?') {
mark[x][y]='.';
} else if(mark[x][y]=='!') {
mark[x][y]='.';
mine++;
}
break;
case 9:
if(mark[x][y]!='.') break;
int i, j, m=0, v=0;
for(i=x-1; i<=x+1; i++) {
for(j=y-1; j<=y+1; j++) {
if(i>=0 && i<Row && j>=0 && j<Col) {
if(mark[i][j]=='!') m++;
if(mark[i][j]=='.' && board[i][j]=='*') v++;
}
}
}
if(m==mark[x][y]-'0' && v!=0) {
for(i=x-1; i<=x+1; i++) {
for(j=y-1; j<=y+1; j++) {
if(i>=0 && i<Row && j>=0 && j<Col && mark[i][j]=='.') {
Operation(1, i, j, win, board, mark, mine);
}
}
}
}
break;
}
}
int main() {
int win=0, step=0;
int t, mine=Mine;
char board[Row][Col], mark[Row][Col];
printf("请选择难度:\n1.初级(9x9,10个雷)\n2.中级(16x16,40个雷)\n3.高级(16x30,99个雷)\n4.自定义\n");
scanf("%d", &t);
switch(t) {
case 1: break;
case 2: Row=Col=16; mine=40; break;
case 3: Col=30; mine=99; break;
case 4: scanf("%d %d %d", &Row, &Col, &mine); break;
}
printf("\n");
Board(board, mark);
int o, x, y;
printf("Game in progress\n");
while(win<Row*Col-mine) {
scanf("%d %d %d", &o, &x, &y);
step++;
if(x<0 || x>=Row || y<0 || y>=Col) {
printf("Invalid input\n");
continue;
}
Operation(o, x, y, win, board, mark, mine);
printf("操作次数:%d 剩余雷数:%d\n", step, mine);
Print(mark);
}
printf("Game over, you win\n");
Print(board);
return 0;
}
运行如下代码#include<iostream> using namespace std; char out[20][20];//由八个字符串组成 八行九列 int o[20][20]={0};// int sum1=0; int sum2=0; void judgechar(char a,char b,int i){ if((a>='A'&&a<='G')&&(b>='0'&&b<='6')){ int aa=a-'A'; int bb=b-'0'; if(o[bb+1][aa+1]==0){ o[bb+1][aa+1]=i; if(bb%2==1){ out[bb+1][aa+1]='|'; }else{ out[bb+1][aa+1]='-'; } } } } void judgebox(){ for(int i=2;i<=6;i+=2){ for(int j=2;j<=6;j+=2){ if(o[i][j]==3&&o[i-1][j]==1&&o[i+1][j]==1&&o[i][j-1]==1&&o[i][j+1]==1){ o[i][j]=1; out[i][j]='1'; sum1++; } if(o[i][j]==3&&o[i-1][j]==2&&o[i+1][j]==2&&o[i][j-1]==2&&o[i][j+1]==2){ o[i][j]=2; out[i][j]='2'; sum2++; } } } } void print(){ //输出矩阵 for(int i=0;i<=7;i++){ for(int j=0;j<=7;j++){ cout<<out[i][j]; } cout<<endl; } } int main(){ out[0][0]=' '; int win; //设计矩阵 for(int i=1;i<=7;i++){ out[0][i]='A'-1+i; o[0][i]=3; } for(int i=1;i<=7;i++){ out[i][0]='0'+i-1; o[i][0]=3; } for(int i=1;i<=7;i++){ for(int j=1;j<=7;j++){ if(i%2!=0&&j%2!=0){ out[i][j]='*'; o[i][j]=3; }else if(i%2!=0&&j%2==0){ out[i][j]=' '; }else if(i%2==0){ out[i][j]=' '; if(j%2==0){ o[i][j]=3; } } } } for(int i=1;i<=25;i++){ char l,h; cin>>l; if(l=='Q'){ win=i%2; if(win==0){ win=2; } break; }else{ cin>>h; } int ii=i%2; if(ii==0){ ii+=2; } judgechar(l,h,ii); judgebox(); print(); } if(sum1>sum2){ cout<<"1赢了"; } if(sum1<sum2){ cout<<"2赢了"; } }
这段代码看起来像是一个小游戏,运行时需要输入字符对应的行列坐标,然后程序会在矩阵中标记这个点,并根据规则判断是否有方格被勾选。最后会输出哪个玩家赢了。
具体来说,这个程序设计了一个 $7\times 7$ 的矩阵,其中每个交叉点上都标记了一个数字 $0,1,2,3$。程序会不断读入输入,每输入一对坐标,就将对应的点标记为当前玩家的数字。然后程序会判断是否有方格被勾选,如果是,则将该方格标记为当前玩家的数字。最后,如果有一方的方格数多于另一方,则输出该方胜利。
需要注意的是,这段代码的实现方式并不是很严谨,比如没有进行输入格式的检查,也没有处理输入越界的情况。同时,该游戏规则也比较简陋,只有两个玩家轮流在矩阵中标记点,没有其他操作。