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

网站制作成app互联网营销课程体系

网站制作成app,互联网营销课程体系,网站登记备案,免费发布推广的平台有哪些目录 引言: 1.游戏规则: 2.实现步骤: 2.1实现菜单: 2.2创建棋盘并初始化: 2.3绘制棋盘: 2.4玩家落子: 2.5电脑落子: 2.6判断胜负: 3.源码: 结语&…

目录

引言:

1.游戏规则:

2.实现步骤:

2.1实现菜单:

2.2创建棋盘并初始化:

2.3绘制棋盘:

2.4玩家落子:

2.5电脑落子:

2.6判断胜负:

 3.源码:

结语:


引言:

《三子棋》是一款古老的民间传统游戏,又被称为OOXX棋、黑白棋,井字棋,九宫棋等。游戏分为双方对战,双方依次在九宫格棋盘上摆放棋子,率先将自己的三个棋子连成一条线的一方则为胜利者。

1.游戏规则:

三子棋是一种两人对战的游戏,棋盘是一个3x3的方格矩阵。玩家和电脑轮流在空白的方格中落子,一方执X,另一方执O。当玩家在横向纵向对角线上连成三个相同的棋子时,该玩家获胜,反之,电脑获胜。如果棋盘填满而无法连成三子,游戏结束,双方平局。

2.实现步骤:

想要完整的实现三子棋代码,我们首先必须在脑海里构建出一个大致的框架,然后再去一步步实现它里边的细节。

  1. 实现进入游戏的菜单界面
  2. 创建棋盘并初始化
  3. 绘制棋盘(打印棋盘)
  4. 玩家落子
  5. 电脑落子
  6. 判断胜负

2.1实现菜单:

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

2.2创建棋盘并初始化:

首先,我们需要创建一个3x3的二维数组来表示棋盘,但考虑到这样不灵活,那么我们可以使用宏定义的方式来使我们的代码变得更加易于维护。

#define ROW 3//行
#define COL 3//列
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] = ' ';}}
}

2.3绘制棋盘:

最终呈现在玩家眼里的棋盘应该是由分割线和空位置组成的。

void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){//先打印数据int j = 0;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");}
}

2.4玩家落子:

当玩家下棋时,他眼里的坐标只有1,2,3行,而在计算机中,数组是通过下标访问的,是从0开始的,所以在写代码时应该将玩家输入的坐标减去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] = 'X';break;}else{printf("坐标被占用,请重新输入!\n");}}elseprintf("坐标非法,请重新输入!\n");}
}

2.5电脑落子:

利用rand函数生成的随机数再模个行和列输入坐标实现落子,电脑落子也要判断落子点是否被占用。

void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑下棋\n");int x = 0;int y = 0;while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = 'O';break;}}
}

2.6判断胜负:

🎈我们规定:

  • 玩家赢返回 "X"
  • 电脑赢返回 "O"
  • 平局返回 "Q"
  • 以上三种情况都不是即游戏继续返回 "C"
//未分出胜负并且所有元素都不为空格则为平局
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;
}//玩家赢 X
//电脑赢 O
//平局 Q
//游戏继续 C
char IsWin(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[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){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 (IsFull(board, row, col)){return 'Q';}return 'C';
}

 3.源码:

为了让代码逻辑更清晰,更易于调试,我们可以将整个三子棋代码分为三个文件。

  1. 主函数(main.c):实现游戏的进入和退出功能。
  2. 游戏实现函数(game.c):思考游戏的逻辑并构建函数,通过调用一系列函数来实现整个游戏。
  3. 游戏实现头文件(game.h):定义宏并声明游戏实现函数中的各个函数。

🎈(main.c)

#include "game.h"
void menu()
{printf("*******************\n");printf("****  1.play   ****\n");printf("****  0.exit   ****\n");printf("*******************\n");
}void game()
{char ret = 0;char board[ROW][COL];//创建二位数组//开始的时候,数组的内容应该全部是空格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;}ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//判断输赢ret = IsWin(board, ROW, COL);if (ret != 'C'){break;}}if (ret == 'X'){printf("玩家赢!\n");}else if (ret == 'O'){printf("电脑赢!\n");}else{printf("平局!\n");}
}
int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf("%d", &input);switch(input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择!\n");break;}} while (input);return 0;
}

 🎈(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 = 0;for (i = 0; i < row; i++){//先打印数据int j = 0;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 = 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] = 'X';break;}else{printf("坐标被占用,请重新输入!\n");}}elseprintf("坐标非法,请重新输入!\n");}
}void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑下棋\n");int x = 0;int y = 0;while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = 'O';break;}}
}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;
}//玩家赢   返回"X"
//电脑赢   返回"O"
//平局     返回"Q"
//游戏继续  返回"C"
char IsWin(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[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){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 (IsFull(board, row, col)){return 'Q';}return 'C';
}

🎈(game.h)

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.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 ComputerMove(char board[ROW][COL], int row, int col);//判断输赢
char IsWin(char board[ROW][COL], int row, int col);

结语:

通过本篇博客,我们学习了如何使用C语言实现三子棋游戏。通过实现菜单、创建棋盘并初始化棋盘、绘制棋盘、玩家落子、电脑落子、判断胜负等步骤,我们成功完成了这个有趣的项目。希望本篇博客对初学者和有一定编程经验的佬佬都能有所帮助,最后祝大家玩得愉快呀!

http://www.tj-hxxt.cn/news/6871.html

相关文章:

  • 广州市网站设计公司网站推广优化外链
  • 电影网站开发教程成都网站seo外包
  • 电子商务网站怎么做推广一个产品的市场营销策划方案
  • 网页设计结课论文青海seo关键词排名优化工具
  • 做旅游攻略的网站代码世界杯比分查询
  • 电气建设网站三十个知识点带你学党章
  • 做外贸网站怎么做广告公司推广渠道
  • 宜昌 网站建设2345网址导航官网官方电脑版
  • 织梦网站后台怎么登陆海外自媒体推广
  • 浙江省住房城乡建设厅官方网站如何进行网站的宣传和推广
  • 网站备案号查询网淘宝seo 优化软件
  • 广东品牌网站建设怎么在百度推广自己的公司
  • 站长之家网址查询湖南seo推广多少钱
  • 给你一个网站你如何做优化南宁seo怎么做优化团队
  • 建设外汇网站乔拓云网站注册
  • 中国域名网官网查询seo的推广技巧
  • 精益生产网站开发方案百度关键词点击排名
  • 天津建设注册执业中心网站重庆seo按天收费
  • 计算机专业论文网站开发百度云登录入口官网
  • 甘肃网站制作公司有哪些优化网站首页
  • 专业网页制作平台seo搜索引擎优化案例
  • 建设网站公司专业怎样做引流推广
  • 给企业做网站的好处网站收录查询系统
  • 产品推广策略石家庄seo顾问
  • 香港股市的做空网站他达拉非片和伟哥区别
  • 利用大平台做网站手机百度快照
  • 新闻网站抓取做舆情监测重庆seo推广运营
  • 三站一体网站公司百度平台app
  • 无锡宜兴网站建设企业网站seo方案案例
  • wordpress文章设置seo经典案例