当前位置: 首页 > news >正文

做网站那个平台好广告关键词排名

做网站那个平台好,广告关键词排名,wordpress 中文视频教程,网站建设流程规划目录 一、环境配置 二、功能模块 1.打印菜单 2.初始化并打印棋盘 3、行棋 3.1玩家行棋 3.2电脑行棋 4、判断是否和棋 5.判赢 三、代码实现 1、test.c文件 2、game.c文件 3、game.h文件 一、环境配置 本游戏用到三个文件,分别是两个源文件test.c game.c 和…

目录

一、环境配置

二、功能模块

        1.打印菜单

2.初始化并打印棋盘

3、行棋 

        3.1玩家行棋

        3.2电脑行棋

4、判断是否和棋 

5.判赢

三、代码实现

        1、test.c文件

        2、game.c文件

        3、game.h文件


一、环境配置

        本游戏用到三个文件,分别是两个源文件test.c  game.c 和一个头文件game.h。

        主函数main()在test.c文件中,游戏实现所需要的函数在test.c中被引用,而函数的实现主要是在game.c文件中完成。game.h文件中包含了程序所需的所有头文件并且包括对实现游戏功能的所有函数的声明。

        之所以使用3个文件是因为,三子棋的实现需要多个模块的相互串联,多个文件各司其职,这样可以更好的处理各个模块间的逻辑,这样也增加了代码的可读性,而且还利于调试。

二、功能模块

1.打印菜单

void menu()
{printf("********************************\n");printf("*****        1.play        *****\n");printf("*****        0.exit        *****\n");printf("********************************\n");
}

  运行结果: 

 玩家选择(1/0)决定是否进入游戏。

 2.初始化并打印棋盘

InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] = ' ';}}
}
/* 通过创建一个char类型的二维数组对其进行初始化 */
char board[ ][ ] = { 0 };       
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j;for (i = 0; i < row; i++){j = 0; for ( j; j < col; j++) //打印   |   |   {printf(" %c ", board[i][j]);if (j < col - 1){printf("|");}}printf("\n");j = 0;for ( j; j < col; j++)//打印---|---|---{if (i < row - 1){printf("---");if (j < col - 1){printf("|");}}}printf("\n");}
}

 运行结果:

 其中,上述棋盘的大小可以根据用户需求自行调整。

 棋盘大小调整方式:在game.h文件中,对宏的定义进行更改即可完成棋盘大小的修改。

#define ROW 3
#define COL 3

3、行棋 

3.1玩家行棋

void PlayerMove(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;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] = '*';//玩家使用*下棋break;}else{printf("坐标被占用,请重新输入\n");}}else{printf("坐标非法,请重新输入!");}}
}

3.2电脑行棋

void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑走:>");while (1){//生成随机坐标int x = rand() % row;int y = rand() % col;//下棋//判断坐标是否被占用if (board[x][y] == ' '){printf("%d %d\n", x + 1, y + 1);//输出电脑下棋的坐标board[x][y] = '#';//电脑使用#下棋break;}}
}

         电脑和玩家每走一步棋,都会打印出新的棋盘,以便于玩家观察空子的位置。

4、判断是否和棋 

int IfFull(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;//棋盘满了
}

        在game.c文件中通过IfFull函数实现对棋盘上空位的判断,防止一个位置多次下棋。

        如果棋盘所有格子都下完之前,还没有分出胜负 ,则代表和棋,以上代码为判断棋盘上面是否有空格子。

5.判赢

char IfWin(char board[ROW][COL], int row, int col)
{//判断行for (int i = 0; i < row; i++){for (int j = 2; j < col; j++){if (board[i][j - 2] == board[i][j - 1] && board[i][j - 1] == board[i][j] && board[i][j] != ' '){return board[i][j];}}}//判断列for (int j = 0; j < col; j++){for (int i = 2; i < row; i++){if (board[i - 2][j] == board[i - 1][j] && board[i - 1][j] == board[i][j] && board[i][j] != ' '){return board[i][j];}}}//判断右交叉for (int i = 2; i < row; i++){for (int j = 2; j < col; j++){if (board[i - 2][j - 2] == board[i - 1][j - 1] && board[i - 1][j - 1] == board[i][j] && board[i][j] != ' '){return board[i][j];}}}//判断左交叉for (int i = 1; i < row - 1; i++){for (int j = 1; j < col - 1; j++){if (board[i - 1][j + 1] == board[i][j] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' '){return board[i][j];}}}//判断平局int full = IfFull(board, row, col);if (full == 1){return 'Q';}//游戏继续return 'C';
}

        每下一步棋,都会对棋盘的每行、每列、左交叉、右交叉做出判断,看是否有三个一样的旗子相连,如果有代表下棋者获胜,否则继续下棋,直至下满棋盘。

        return board[ i ][ j ] ;的奥妙之处就在于,无论是玩家获胜还是电脑获胜都会返回与其相同的棋子,不需要再重新进行判断取胜的棋子是哪一方,如果返回'*',证明玩家获胜,game()函数得到'*',判定玩家获胜,输出:“玩家获胜!”;如果返回'#',证明电脑获胜,game()函数得到'#',判定电脑获胜,输出:“电脑获胜!”

        如果通过IfFull()函数判断棋盘已经下满,就会给test.c文件中的game()函数中返回'Q’,game()函数得到'Q'便知道二者微分胜负,输出:和局。

        否则,return ’C',game()函数得到‘C’,游戏继续。

三、代码实现

1、test.c文件

#include"game.h"
char ret = 0;//ret用来存放比赛结果
void menu()
{printf("********************************\n");printf("*****        1.play        *****\n");printf("*****        0.exit        *****\n");printf("********************************\n");
}void game()
{//存储数据 - 二维数组char board[ROW][COL];//初始化棋盘 - 初始化空格InitBoard(board,ROW,COL);//打印棋盘 - 本质是打印数组的内容DisplayBoard(board, ROW, COL);//玩家 电脑 走旗while (1){//玩家下棋PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL); //打印玩家的每一步走棋//判断玩家是否赢得游戏ret = IfWin(board, ROW, COL);//玩家赢了*  电脑赢了#  平局Q  游戏继续Cif (ret != 'C')break;//电脑下棋ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL); //打印电脑的每一步走棋//判断电脑是否赢得游戏ret = IfWin(board, ROW, COL);if (ret != 'C')break;}if (ret == '*'){printf("%c玩家获胜!\n", ret);}else if (ret == '#'){printf("%c电脑获胜!\n", ret);}else {printf("%c     平局!\n", ret);}DisplayBoard(board, ROW, COL);
}int main()
{int input = 0;srand((unsigned int)time(NULL));//配合rand()函数生成随机值,因为只需要调用一次所以放到main()函数中do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:printf("三子棋游戏\n");game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);return 0;
}

2、game.c文件

#include"game.h"//初始化棋盘的函数
InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (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)
{int i = 0;int j;for (i = 0; i < row; i++){j = 0; for ( j; j < col; j++) //打印   |   |   {printf(" %c ", board[i][j]);if (j < col - 1){printf("|");}}printf("\n");j = 0;for ( j; j < col; j++)//打印---|---|---{if (i < row - 1){printf("---");if (j < col - 1){printf("|");}}}printf("\n");}
}//玩家下棋的函数
void PlayerMove(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;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] = '*';//玩家使用*下棋break;}else{printf("坐标被占用,请重新输入\n");}}else{printf("坐标非法,请重新输入!");}}
}//电脑下棋的函数
void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑走:>");while (1){//生成随机坐标int x = rand() % row;int y = rand() % col;//下棋//判断坐标是否被占用if (board[x][y] == ' '){printf("%d %d\n", x + 1, y + 1);//输出电脑下棋的坐标board[x][y] = '#';//电脑使用#下棋break;}}
}//判断棋盘是否已经满了的函数
int IfFull(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 IfWin(char board[ROW][COL], int row, int col)
{//判断行for (int i = 0; i < row; i++){for (int j = 2; j < col; j++){if (board[i][j - 2] == board[i][j - 1] && board[i][j - 1] == board[i][j] && board[i][j] != ' '){return board[i][j];}}}//判断列for (int j = 0; j < col; j++){for (int i = 2; i < row; i++){if (board[i - 2][j] == board[i - 1][j] && board[i - 1][j] == board[i][j] && board[i][j] != ' '){return board[i][j];}}}//判断右交叉for (int i = 2; i < row; i++){for (int j = 2; j < col; j++){if (board[i - 2][j - 2] == board[i - 1][j - 1] && board[i - 1][j - 1] == board[i][j] && board[i][j] != ' '){return board[i][j];}}}//判断左交叉for (int i = 1; i < row - 1; i++){for (int j = 1; j < col - 1; j++){if (board[i - 1][j + 1] == board[i][j] && board[i][j] == board[i + 1][j - 1] && board[i][j] != ' '){return board[i][j];}}}//判断平局int full = IfFull(board, row, col);if (full == 1){return 'Q';}//游戏继续return 'C';
}

3、game.h文件

//头文件的包含
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//符号的定义
#define ROW 3
#define COL 3//函数的声明//初始化棋盘函数
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 ComputerMove(char board[ROW][COL], int row, int col);
//判断游戏结果  玩家赢了*  电脑赢了#  平局Q  游戏继续C
char IfWin(char board[ROW][COL], int row, int col);
//判断棋盘是否已经下满
int IfFull(char board[ROW][COL], int row, int col);


感谢你的阅读,希望对你有所帮助~

欢迎批评指正,共同进步!


文章转载自:
http://dethrone.dkqr.cn
http://immunize.dkqr.cn
http://newswriting.dkqr.cn
http://rsj.dkqr.cn
http://kiltie.dkqr.cn
http://benefic.dkqr.cn
http://activable.dkqr.cn
http://scissors.dkqr.cn
http://sarka.dkqr.cn
http://telescript.dkqr.cn
http://situla.dkqr.cn
http://facultyman.dkqr.cn
http://tallness.dkqr.cn
http://foreplay.dkqr.cn
http://scaup.dkqr.cn
http://manifestative.dkqr.cn
http://weensy.dkqr.cn
http://unwreathe.dkqr.cn
http://kengtung.dkqr.cn
http://atherogenic.dkqr.cn
http://subluxate.dkqr.cn
http://honorarium.dkqr.cn
http://shellless.dkqr.cn
http://lanate.dkqr.cn
http://dehire.dkqr.cn
http://skat.dkqr.cn
http://reprehensibly.dkqr.cn
http://irene.dkqr.cn
http://backpat.dkqr.cn
http://indigosol.dkqr.cn
http://zagreb.dkqr.cn
http://incomplete.dkqr.cn
http://preterlegal.dkqr.cn
http://neontology.dkqr.cn
http://navalist.dkqr.cn
http://spherule.dkqr.cn
http://frit.dkqr.cn
http://moocher.dkqr.cn
http://stedfast.dkqr.cn
http://stuck.dkqr.cn
http://sherwani.dkqr.cn
http://mizz.dkqr.cn
http://anticline.dkqr.cn
http://misguide.dkqr.cn
http://prussian.dkqr.cn
http://confederacy.dkqr.cn
http://thief.dkqr.cn
http://penitence.dkqr.cn
http://cuatro.dkqr.cn
http://pentlandite.dkqr.cn
http://antifeudal.dkqr.cn
http://headily.dkqr.cn
http://rubasse.dkqr.cn
http://muscatel.dkqr.cn
http://roughscuff.dkqr.cn
http://catapult.dkqr.cn
http://unfindable.dkqr.cn
http://lacerna.dkqr.cn
http://hike.dkqr.cn
http://nebulated.dkqr.cn
http://daughterhood.dkqr.cn
http://carib.dkqr.cn
http://fougasse.dkqr.cn
http://merriness.dkqr.cn
http://myriapodan.dkqr.cn
http://vaccy.dkqr.cn
http://faciolingual.dkqr.cn
http://corvine.dkqr.cn
http://vigilant.dkqr.cn
http://huisache.dkqr.cn
http://allpowerful.dkqr.cn
http://teetotum.dkqr.cn
http://spaciously.dkqr.cn
http://roughstuff.dkqr.cn
http://economo.dkqr.cn
http://jeon.dkqr.cn
http://corpuscle.dkqr.cn
http://shank.dkqr.cn
http://lowriding.dkqr.cn
http://garbiologist.dkqr.cn
http://sockdolager.dkqr.cn
http://unavoidably.dkqr.cn
http://fulgid.dkqr.cn
http://seminomata.dkqr.cn
http://adduction.dkqr.cn
http://playlet.dkqr.cn
http://stalinsk.dkqr.cn
http://astroarchaeology.dkqr.cn
http://axel.dkqr.cn
http://semilog.dkqr.cn
http://gneissose.dkqr.cn
http://exercise.dkqr.cn
http://darpanet.dkqr.cn
http://swampland.dkqr.cn
http://ambipolar.dkqr.cn
http://orexis.dkqr.cn
http://lento.dkqr.cn
http://strophe.dkqr.cn
http://calorescence.dkqr.cn
http://areostyle.dkqr.cn
http://www.hrbkazy.com/news/70679.html

相关文章:

  • 做曖网站百度怎么注册自己的店铺
  • 佛山网站制作好处海口做网站的公司
  • 淄博学校网站建设公司外贸网站建设公司
  • 珲春网站建设宁波seo怎么做推广渠道
  • 手机能看禁止网站的浏览器seo整站优化哪家专业
  • 广东建设监理网站搜狗排名优化工具
  • 揭阳制作公司网站百度问答怎么赚钱
  • 网站开发软件设计文档模板做一个简单网页
  • 重庆城乡建设委员会满足seo需求的网站
  • 如何让自己做的网站让别人看到营销推广投放
  • 幼儿园网站建设介绍商铺营销推广方案
  • 手机微网站开发十大软件免费下载网站排行榜
  • 河南省住房和城乡建设部网站首页做seo推广一年大概的费用
  • wordpress 分类目录模板seo搜索引擎优化知乎
  • cms建站程序哪个好企业seo排名外包
  • 做的好的商城网站百度下载app
  • 国外做的比较好的购物网站百度在线客服问答
  • 怎么做百度seo网站站长工具
  • 网站wordpress错误客户管理软件哪个好用
  • 郑州做网站的公司有哪些怎样做市场营销策划
  • 鞍山信息港招聘信息网网络营销的优化和推广方式
  • 网站内页百度不收录360优化大师app下载
  • 如何创建自己公司网站网络营销的核心是什么
  • 英文互动网站建设百度推广教程视频教程
  • 网站建设常州青之峰热点新闻最新消息
  • 美国室内设计网深圳seo优化推广公司
  • 中国建设银行公司网站官网培训计划方案
  • WordPress首页怎么打开seo有哪些经典的案例
  • 武汉高端品牌网站建设如何查询百度收录情况
  • access2003做网站一级域名二级域名三级域名的区别