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

网站建设和seo的工作好不好698元网站建设

网站建设和seo的工作好不好,698元网站建设,宝安沙井天气,设计本装修效果图基本框架 三个文件: 其中.cpp文件用于游戏具体函数设计&#xff0c;.h文件为游戏的函数声明&#xff0c;test.cpp文件用于测试游戏运行。 需要用到的头文件&#xff1a; #include <stdio.h> #include <stdlib.h>//rand&srand #include <time.h>//时间相…

基本框架

三个文件:

其中.cpp文件用于游戏具体函数设计,.h文件为游戏的函数声明,test.cpp文件用于测试游戏运行。

 需要用到的头文件:

#include <stdio.h>
#include <stdlib.h>//rand&srand
#include <time.h>//时间相关

框架运行

#include"game.h"
void menu()
{printf("*********************************\n");printf("********      1. play    ********\n");printf("********      0. exit    ********\n");printf("*********************************\n");
}
void game()
{}
int main()
{int input;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;
}

运行结果:

棋盘

棋盘是一个3*3的平面,可以用二维数组接收,编译器不支持变长数组,我们可以用define定义数组的下标(行和列),之后有大用。

#define COL 3
#define ROW 3

打印:

 为什么没有对齐呢?这是因为字符数组初始化为0等价于\0,而\0是不会显示出来的,所以,我们再添加一个初始化函数。

 初始化函数

因为游戏可以反复游玩,我们不妨设置一个初始化函数,将棋子置于初始状态('  '字符)。

void init_board(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] = ' ';}}}

可以发现这次棋盘很标准了,但有点刻意的风味,如果想要一个10*10的棋盘,又要重新设计吗?应对此种情况,我们试着改进棋盘。

棋盘改进

void display_board(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){//printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);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");}}
}

 看着挺复杂其实很简单,只要找出重复的部分再进行循环和判断就能打印出你想要的样子!

 玩家下棋

玩家下棋有两个注意点,判断坐标是否合法和坐标是否被占用。为此我们需要设计一个循环语句。坐标范围从1开始而不是从0开始是因为让玩家觉得合理。

void player_move(char board[ROW][COL], int row, int col)
{int x;int y;while (1){printf("请输入要下棋的坐标:>");scanf("%d %d", &x, &y);if (y <= col && x <= row){if (board[x-1][y-1] == ' '){board[x-1][y-1] = '*';break;}else{printf("该坐标被占用,请重新输入\n");}}else{printf("坐标非法,重新输入\n");}}
}

测试: 

 电脑下棋

需要用随机函数rand生成随机数和srand设置初始点使之电脑能随机在棋盘上下棋。

srand放在主函数里,循环体前,只需执行一次。 

void computer_move(char board[ROW][COL], int row, int col)
{while (1){int x = rand() % 3;//0~2int y = rand() % 3;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}

胜负评判

接着需要我们评判双方获胜条件,即三子连成一条线的情况。

这里我们直接无脑评判就行,如果三处相同且不为空格则说明一方胜利

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][0] != ' '){return board[i][1];}}//列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' '){return board[0][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 (is_full(board, row, col) == 1){return 'Q';}//继续return 'C';
}

这里有个取巧的方法,可以直接用我们棋子所代表的字符作为返回值进行判断。

是否平局

平局需要单独判断,我们可以封装一个函数,遍历看棋盘是否已满就行了。

static int is_full(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++){if (' ' == board[i][j]){return 0;}}}return 1;
}

这里的static是只对本文件可见,因为它只用于我们的胜负评判。

接下来我们对主函数的game函数再增添胜负评判,每次落子之后进行评判,根据对应的返回值输出相应的结果。

运行结果:

完整代码

//game.c
#include "game.h"
void display_board(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){//printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);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");}}printf("\n");
}
void init_board(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 player_move(char board[ROW][COL], int row, int col)
{int x;int y;while (1){printf("请输入要下棋的坐标:>");scanf("%d %d", &x, &y);if (y <= col && x <= row){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 = rand() % 3;int y = rand() % 3;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}static int is_full(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++){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][0] != ' '){return board[i][1];}}//列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' '){return board[0][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 (is_full(board, row, col) == 1){return 'Q';}//继续return 'C';
}
//.h
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define ROW 3
#define COL 3//初始化棋盘
void init_board(char board[ROW][COL], int row, int col);
//打印棋盘
void display_board(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);
//判断游戏状态
char is_win(char board[ROW][COL], int row, int col);
//test.c
#include"game.h"
void menu()
{printf("*********************************\n");printf("********      1. play    ********\n");printf("********      0. exit    ********\n");printf("*********************************\n");
}
void game()
{char board[ROW][COL] = { 0 };init_board(board, ROW, COL);display_board(board, ROW, COL);char ret;while (1){player_move(board, ROW, COL);display_board(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C')break;computer_move(board, ROW, COL);display_board(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C')break;}if (ret == 'Q'){printf("平局\n");}if (ret == '*'){printf("玩家胜\n");}if (ret == '#'){printf("电脑胜\n");}
}
int main()
{int input;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;
}
http://www.laogonggong.com/news/55724.html

相关文章:

  • 用博客网站做淘宝客手机端网站开发书籍
  • 做视频素材网站广告设计创意图片
  • 做基础网站主机要用ssh做的简单网站
  • cpa网站怎么做dz论坛识别手机网站自动跳转
  • 开发网站语言做网站的什么行业好出单
  • 怎么避免网站开发后门h5制作步骤
  • 购物网站建设珠海做c语言的题目的网站
  • 江门模板建站源码网页设计什么软件
  • 网页设计视频网站建设平顶山市住房和城乡建设局网站
  • 华强北手机网站建设做链接哪个网站好
  • 模板和网站的区别公司网站开发联系方式
  • 发布网站后不可能存在的文件夹是建一个英文网站需要多少钱
  • 营销型企业网站优化的作用html修改成wordpress主题
  • apache怎么配置网站中国信用网企业查询系统
  • 网站开发之ios知识扩展重庆正云环境网页制作
  • 宁波网站建设建站厂家网页设计制作导航栏
  • 设计网站首页怎么创建自己的网站平台
  • 建网站的公司深圳app后期维护与运营成本
  • 温州新公司做网站wordpress 食品
  • 江苏建站系统常德seo公司
  • 滨海新区做网站wordpress代码高亮插件
  • 天水 网站建设wordpress菜单新窗口打开
  • 广东官网网站建设公司网站设计做什么的
  • 网站开发报价单 excel台州企业网站模板建站
  • 北京微网站建设设计服务如何去掉WordPress的标志
  • 网站建设简单吗系统开发师
  • 东莞外贸公司建网站易书网上书城网站建设方案
  • 相亲网站绑定微信怎么做公司网站改版方案
  • 网站设计案例方案wordpress运行死慢
  • 中小企业网站用什么技术游戏模型外包网站