建设项目立项网站,淘宝网站开发实训报告目录,南阳网站建设seo,wordpress博客站点地图思路分析#xff1a; 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数#xff0c;使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、… 思路分析 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、用随机数 让电脑随机生成坐标 3.5、判断玩家和电脑谁赢了 代码实现
game.h文件
#ifndef _GAME_H
#define _GAME_H
#include stdio.h
#include time.h
#include string.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 playermove(char board[ROW][COL], int row, int col);
void ct_move(char board[ROW][COL], int row, int col);
char Iswin(char board[ROW][COL], int row, int col);
#endif
game.c--游戏算法实现
#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;for (int i 0; i row; i){int j;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 col - 1){printf(|);}}}printf(\n);}
}//玩家出棋
void playermove(char board[ROW][COL], int row, int col)
{int x, y;printf(玩家走-:\n);//不到停止条件 一致循环while (1){printf(请输入要下的坐标\n);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(该坐标被占用);}}else{printf(坐标非法,请重新输入);}}
}//电脑出棋
void ct_move(char board[ROW][COL], int row, int col)
{int x, y;printf(电脑走-:\n);//用sand函数 使电脑生成0-2的随机数x rand() % row;y rand() % col;while (1){if (board[x][y] ){board[x][y] #;break;}}
}//看棋盘是否下满了
int isfull(char board[ROW][COL], int row, int col)
{int i ,j;for(i 0;i row;i){for(j 0;j col;j){//如果数组元素中还有 空格 那就返回 0if(board[i][j] ){return 0;} }}return 1;
}//看玩家和电脑谁赢了
char Iswin(char board[ROW][COL], int row, int col)
{int i;//横相等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][0];}}//竖相等for (i 0; i col; i){if (board[0][i] board[1][i] board[1][i] board[2][i] board[1][i] ! ){return board[i][0];}}//从左到右 对角线相等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];}//棋盘满了返回 1 再返回 q 平局if(1 isfull(board,ROW,COL)){return q;}//如果以上条件都不满足返回 c 表示游戏继续进行。return c;
}
test.c---测试文件
#include game.h
// 菜单栏
void menu()
{printf(\n);printf(\n);printf(三子棋1.0\n);printf(1 开始游戏0 退出游戏\n);printf(\n);
}
// 游戏的算法实现
void game()
{char ret;// 数组-存放棋盘信息char board[ROW][COL] {0};// 初始化棋盘 使所有元素为空格Initboard(board, ROW, COL);// 打印棋盘Displayboard(board, ROW, COL);while (1){// 玩家下棋playermove(board, ROW, COL);// 下完再打印一次棋盘Displayboard(board, ROW, COL);// 判断玩家是否赢了ret Iswin(board, ROW, COL);if (ret ! c){break;}// 电脑下棋ct_move(board, ROW, COL);Displayboard(board, ROW, COL);// 判断电脑是否赢了ret Iswin(board, ROW, COL);/** *玩家赢* #电脑赢* c继续游戏* q平局*/// 如果ret 不等于 c 不继续游戏 那就break 退出游戏if (ret ! c){break;}}if (ret *){printf(玩家赢了\n);}else if (ret #){printf(电脑赢了\n);}else if (ret q){printf(平局\n);}
}void test()
{menu();int input;do{printf(请选择\n 1- 开始游戏 0- 退出游戏\n);scanf(%d, input);switch (input){case 1:printf(game start!\n);game();break;case 0:printf(game over!\n);break;default:printf(无效选项请重新选择);break;}} while (input);
}
int main(int argc, char const *argv[])
{// 随机函数srand(time(NULL));test();return 0;
}效果展示