三子棋
七夕到了,没有女朋友怎么办?没事~ 写一个小游戏,让女朋友陪你玩三子棋~
1.展示棋盘
这部分我折腾了很久,因为展示出来的效果是实现能通过更改ROW和COL的值来展示不同大小的棋盘
只能不断的调整–观察发现最后一行不打印横线,最后一列不打印竖杠
void Displayboard(char board[ROW][COL], int row, int col) { int i, j,k; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if(j<col-1) printf(" %c |", board[i][j]); if (j == col-1 ) { printf(" %c \n", board[i][j]); } } for (j = 0;j<col; j++) { if (j <col-1 && i!=row-1) { printf("---|"); } } if (i != row - 1) { printf("---"); printf("\n"); } } }
效果如下:
通过更改ROW和COL的值来展示不同大小的棋盘:
三子棋:
五子棋:
七子棋:
2. 玩家落子
注意:每次落子完要重新打印一次棋盘
当输入坐标错误或者已经有棋子的时候要进行相应的提示
void PlayerMove(char board[ROW][COL], int row, int col)//玩家落子 { int x, y; while (1) { printf("请玩家落子>"); printf("请输入棋子行列坐标:\n"); scanf("%d%d", &x, &y); if (x >= 1 && x <= row && y >= 1 && y <= col) { if (board[x - 1][y - 1] == ' ')//数组的真实下标从0开始 { board[x - 1][y - 1] = '*'; } else { printf("坐标被占用,请重新输入"); } } else printf("输入坐标非法,请重新输入\n"); Displayboard(board, ROW, COL); } }
3.女朋友落子
注意:这里需要生成随机数,并且引用相应的头文件
void ComputerMove(char board[ROW][COL], int row, int col) { int x, y; printf("\n"); printf("女朋友下棋:\n"); while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') { board[x][y] = '#'; break; } } Displayboard(board, ROW, COL); }
生成随机数:
头文件:
效果如下
4.判断游戏输赢
结局共有三个:女朋友赢,你赢,平局
根据四种返回值来判段
你赢-- ‘*’
女朋友赢–’#’
平局–‘Q’
继续–‘C’
char isWin(char board[ROW][COL], int row, int col) { //1.判断输赢 int i; for (i = 0; i < row; i++)//判断行是否相等 { if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != ' ') { return board[i][0]; } } for (i = 0; i < row; i++)//判断列是否相等 { if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ' ') { return board[0][i]; } } if (board[2][0] == board[1][1] && board[0][2] == board[2][0] && board[2][0]!=' ')//判断对角线 { return board[2][0]; } if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] != ' ') { return board[0][0]; } //2.判断平局 if (isFull(board, row, col) == 1) { return 'Q'; } else return 'C'; }
5.最终效果
平局:
女朋友赢:
玩家赢:
最终的所有的代码如下: