当前位置: 代码迷 >> 综合 >> C语言(最基础三子棋)game
  详细解决方案

C语言(最基础三子棋)game

热度:5   发布时间:2023-12-05 22:47:27.0

1  创建三个工程分别为实现部分为test.c,游戏的头文件game.h,游戏的源文件game.c。

1 test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
void  menu()
{printf("***********************\n");printf("*****   1.play   ******\n");printf("*****   0.exit   ******\n");printf("***********************\n");
}void game()
{//数组存储到一个字符的二维数组,玩家下棋是’*‘,电脑下棋是‘#’。char board[ROW][COL] = { 0 };//数组的内容应该全部是空格InitBoard(board, ROW, COL);//初始化棋牌//打印棋盘DisplayBoard(board, ROW, COL);//下棋char ret = 0;while (1){player_move(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 test()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");default:printf("选择错误");break;}} while (input);
}int main()
{test();return 0;
}

2.游戏的头文件

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 3
#define COL 3//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘
void DisplayBoard (char board[ROW][COL], int row, int col);
//玩家下棋
void player_move(char board[ROW][COL], int row, int col);
//电脑下棋
void computer_move(char board[ROW][COL], int row, int col);
//判断输赢的代码
//玩家赢-’*‘
//电脑赢- ’#‘
//平均---’Q‘
//继续---’C‘
char is_win(char board[ROW][COL], int row, int col);
int is_full(char board[ROW][COL], int row, int col);

3.游戏的源文件

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = ' ';}}
}//void DisplayBoard(char board[ROW][COL], int row, int col)
//{
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < row; i++)
//	{
//		//数据
//		printf(" %c | %c | %c \n", board[i][0], board[i][i], board[i][2]);
//		//分割行
//		if(i<row-1)
//		printf("---|---|---\n");
//	}
//}
//版本2
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){//数据for (j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1){for (j = 0; j < col; j++){printf("---");if (j < row - 1)printf("|");}}printf("\n");}
}
void player_move(char board[ROW][COL], int row, int col)
{printf("玩家下棋:>");int x = 0;int y = 0;scanf("%d %d", &x, &y);while (1){//坐标合法的判断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)
{while (1){int x = 0;int y = 0;printf("电脑下棋>\n");x = rand() % ROW;//0~2y = rand() % COL;//0~2if (board[x][y] == ' '){board[x][y] = '#';break;}}
}int is_full(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' '){return 0;}}}return 1;
}
char is_win(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] &&board [i][1]!= ' '){return board[i][1];}}for (i = 0; i < col; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' '){return board[1][i];}}//判断对角线if (board[0][0]==board[1][1]&& board[1][1]== board[2][2] &&board[1][1] !=' '){return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局if (1==is_full(board, row, col)){return'Q';}return 'C';//继续
}

  相关解决方案