> 文档中心 > 4399小游戏之三子棋(可联机)

4399小游戏之三子棋(可联机)

文章目录

  • 前言
  • 1.源代码
  • 2.大概思路
  • 总结

前言

大家应该都玩过#字棋游戏也称三子棋,今天我们通过c语言来实现一下。

1.源代码

如果你想直接进行游戏,可直接复制代码。

#define _CRT_SECURE_NO_WARNINGS 1 #include#include#include#define ROW 3#define COL 3//初始化棋盘void InitBoard(char board[ROW][COL], int row, int col){for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] = ' ';}}}//打印棋盘void DisPlayboard(char board[ROW][COL], int row, int col){for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < row - 1){for (int s = 0; s < col; s++){printf("---");if (s < col - 1){printf("|");}}printf("\n");}}}void Player_Move1(char board[ROW][COL], int row, int col){printf("玩家下棋\n");int x, y;while (1){scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标被占用,请重新输入\n");}}else{printf("非法输入,请重新输入\n");}}}void Computer_Move(char board[ROW][COL], int row, int col){printf("电脑下棋\n");int x, y;while (1){x = rand() % row;//0-2y = rand() % col;//0-2if (board[x][y] == ' '){board[x][y] = '#';break;}}}void Player_move2(char board[ROW][COL], int row, int col){printf("玩家2下棋\n");int x, y;while (1){scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '#';break;}else{printf("该坐标被占用\n");}}else{printf("坐标非法,请重新输入\n");}}}char is_win(char board[ROW][COL], int row, int col){//判断行for (int i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][2] == board[i][1] && board[i][1] != ' '){return board[i][0];}}//判断列for (int i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[2][i] == board[1][i] && board[1][i] != ' '){return board[0][i];}}//判断对角线if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[0][0];}if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' '){return board[2][0];}//平局 返回Qfor (int i = 0; i < row; i++){for (int j = 0; j < col; j++){if (board[i][j] == ' '){return 'c';}}}return 'Q';}void menu1(){printf("******欢迎来到4399小游戏*******\n");printf("*****1.player1 vs player2******\n");printf("****2.computer vs player1******\n");printf("*******************************\n");}//玩家vs玩家void pp(char board[ROW][COL], int row, int col){char ret = 0;while (1){//玩家1下棋Player_Move1(board, ROW, COL);DisPlayboard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'c'){break;}//玩家2下棋Player_move2(board, ROW, COL);DisPlayboard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'c'){break;}}if (ret == '*'){printf("玩家1胜利\n");}else if (ret == '#'){printf("玩家2胜利\n");}else{printf("平局\n");}}//玩家vs电脑void cp(char board[ROW][COL], int row, int col){char ret = 0;while (1){//玩家下棋Player_Move1(board, ROW, COL);DisPlayboard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'c'){break;}//电脑下棋Computer_Move(board, ROW, COL);DisPlayboard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'c'){break;}}if (ret == '*'){printf("玩家胜利\n");}else if (ret == '#'){printf("电脑胜利\n");}else{printf("平局\n");}}void game(){int x = 0;char ret = 0;//创建一个棋盘char board[ROW][COL] = { 0 };//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘DisPlayboard(board, ROW, COL);menu1();printf("请选择你要玩的模式\n");scanf("%d", &x);switch (x){case 1:pp(board, ROW, COL);break;case 2:cp(board, ROW, COL);break;}}void menu(){printf("************************\n");printf("*********1 .play********\n");printf("*********0 .exit********\n");printf("************************\n");}void test(){srand((unsigned int)time(NULL));int input;do{menu();printf("请输入一个数:(1/0)\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);}int main(){test();}

2.大概思路

在写三子棋的时候我们首先要创建一个三字棋的模型,然后并打印棋盘来让我们判断往哪下,在下棋的过程中已经下过的坐标就不能进行下棋,最后在通过具体算法进行实现。

总结

本文代码仅供参考,如果有错误可以私信。
谢谢大家的支持!!

记得关注 浩克 奥!!!