江苏省高校品牌专业建设网站,广州建筑集团有限公司品牌,横向网站源码,网站建设的域名续费本文实例为大家共享了C语言实现三子棋游戏的详细代码#xff0c;供大家参考#xff0c;详细内容如下什么是多文件#xff1f;多数大型的工程的头文件和源文件非常多#xff0c;我们也不可能把所有的代码都写在同一个文件里#xff0c;这样也不方便代码的阅读与维护#x…本文实例为大家共享了C语言实现三子棋游戏的详细代码供大家参考详细内容如下什么是多文件多数大型的工程的头文件和源文件非常多我们也不可能把所有的代码都写在同一个文件里这样也不方便代码的阅读与维护通常都会根据不同的功能将代码分别书写到多个源文件与头文件中。游戏简介三子棋是个简单的双人游戏双方在3X3的棋盘上轮流落子当一条直线上出现三颗连续且相同的棋子时即获胜。此程序让玩家先落子电脑在棋盘上随机落子。游戏结束时显示胜负玩家可以选择是否继续玩游戏。代码实现chess.h通常我们会在头文件中写一些类型的定义、结构体定义、宏定义、函数声明、include共含等内容。#ifndef _CHESS_H_#define _CHESS_H_#include#include #include #include #include#pragma warning(disable:4996)#define ROW 3#define COL 3#define BLACK_PIECE X#define WHITE_PIECE Ovoid InitBoard(char board[ROW][COL], int row, int col);void ShowBoard(char board[ROW][COL], int row, int col);void PlayerMove(char board[ROW][COL], int row, int col);int ComputerMove(char board[ROW][COL], int row, int col);char CheckWin(char board[ROW][COL], int row, int col);#endifchess.c源文件中共含了chess.h这个头文件于是在这个chess.c文件中就可以使用这些在头文件中定义的内容可以使用自定义类型、自定义函数、标准输入输出函数等。include的路径问题当使用 来指定共含的头文件时编译器会从系统头文件库中进行查找而使用 来共含的头文件编译器将会从当前程序目录进行查找。在include时被共含文件可以是绝对路径也可以是相对路径总之只要头文件的存放路径与当前源文件的关系正确就行了。#include chess.h//打印棋盘void InitBoard(char board[][COL], int row, int col){for (int i 0; i row; i){for (int j 0; j col; j){board[i][j] ;}}}void ShowBoard(char board[][COL], int row, int col){printf( | 1 | 2 | 3 |\n);int i 0;for (; i row; i){printf(----------------\n);printf( %d | %c | %c | %c |\n, i 1, board[i][0], board[i][1], board[i][2]);}printf(----------------\n);}//玩家下棋void PlayerMove(char board[][COL], int row, int col){int x 0;int y 0;printf(\n);printf(----------玩家走----------\n);printf(\n);while (1){printf(请输入走的坐标:);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] X;break;}else{printf(坐标被占用请重新版输入!\n);}}else{printf(坐标有误\n);}}}//电脑下棋int ComputerMove(char board[][COL], int row, int col){int x 0;int y 0;printf(\n);printf(----------电脑走----------\n);printf(\n);while (1){for (x 0; x 2; x){ //当玩家有两个子连成一条线时堵for (y 0; y 2; y){if (board[x][y] ){board[x][y] X;if (CheckWin(board, ROW, COL) X){board[x][y] O; //一旦落子就直接跳出while循环后面都一样Sleep(500);return 0;}else{board[x][y] ; //还原}}}}if (board[1][1] ){ //如果中间可以落子在中间落子board[1][1] O;Sleep(500);return 0;}else{ //如果四个角可以落子在四个角上落子。for (x 0; x 2; x 2){for (y 0; y 2; y 2){if (board[x][y] ){board[x][y] O;Sleep(500);return 0;}}}}x rand() % row; //四个边的中间随机落子0—2y rand() % col;if (board[x][y] ){board[x][y] O;Sleep(1000);break;}printf(\n);}}static int IsFull(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;}//用户赢了 BLACK_PIECE X//电脑赢了 WHITE_PIECE O//平局, Q//继续, C//结果判断 玩家赢 or 电脑赢 or 平局char CheckWin(char board[ROW][COL], int row, int col){int i 0;for (; i row; i){//判断一行是否相同if (board[i][0] ! board[i][0] board[i][1] board[i][1] board[i][2]){return board[i][0];}}for (i 0; i col; i){//判断一列是否相同if (board[0][i] ! board[0][i] board[1][i] board[1][i] board[2][i]){return board[0][i];}}if (board[0][0] ! board[0][0] board[1][1] board[1][1] board[2][2]){return board[0][0];}if (board[0][2] ! board[0][2] board[1][1] board[1][1] board[2][0]){return board[1][1];}//平局if (IsFull(board, row, col) 1){return Q;}//继续return C;}main.c理清思路搭建好运行的框架。1.游戏菜单选择玩/不玩2.打印棋盘3.玩家落子4.打印棋盘5.电脑落子6.打印棋盘7.…8.显示胜负9.返回游戏菜单选择玩/不玩#include chess.hvoid Menu(){printf(\n);printf(----------三子棋游戏----------\n);printf(\n);printf(******************************\n);printf(* 1.Play *\n);printf(* 2.Exit *\n);printf(******************************\n);printf(\n);printf(Please Enter Select:);}void Game(){char board[ROW][COL] { 0 };//记录棋盘char ret 0;InitBoard(board, ROW, COL);ShowBoard(board, ROW, COL);//打印棋盘while (1){PlayerMove(board, ROW, COL);//玩家走ShowBoard(board, ROW, COL);//打印棋盘//判断输赢ret CheckWin(board, ROW, COL);if (ret ! C){break;}ComputerMove(board, ROW, COL);//电脑走ShowBoard(board, ROW, COL);//打印棋盘//判断输赢ret CheckWin(board, ROW, COL);if (ret ! C){break;}}if (ret X){printf(----------玩家赢!----------\n);}else if (ret O){printf(----------电脑赢!----------\n);}else if (ret Q){printf(----------平局!----------\n);}}int main(){int select 0;int quit 0;srand((unsigned int)time(NULL));while (!quit){Menu();scanf(%d, select);switch (select){case 1:Game();while (!select);break;case 2:printf(Game Over!\n);break;default:printf(Enter Error!\n);break;}}system(pause);return 0;}测试结果更多有趣的经典小游戏实现专题共享给大家C经典小游戏汇总python经典小游戏汇总python俄罗斯方块游戏集合JavaScript经典游戏 玩不停java经典小游戏汇总javascript经典小游戏汇总以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持乐购源码。