printf(“坐标被占用,请重新输入”);
}
}
else
printf(“输入坐标非法,请重新输入\n”);
Displayboard(board, ROW, COL);
}
}
注意:这里需要生成随机数,并且引用相应的头文件
void ComputerMove(char board[ROW][COL], int row, int col)
{
int x, y;
printf(“\n”);
printf(“女朋友下棋:\n”);
while (1)
{
x = rand() % row;
y = rand() % col;
if (board[x][y] == ’ ')
{
board[x][y] = ‘#’;
break;
}
}
Displayboard(board, ROW, COL);
}
生成随机数:
头文件:
效果如下
结局共有三个:女朋友赢,你赢,平局
根据四种返回值来判段
你赢-- ‘*’
女朋友赢–’#’
平局–‘Q’
继续–‘C’
char isWin(char board[ROW][COL], int row, int col)
{
//1.判断输赢
int i;
for (i = 0; i < row; i++)//判断行是否相等
{
if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != ’ ')
{
return board[i][0];
}
}
for (i = 0; i < row; i++)//判断列是否相等
{
if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ’ ')
{
return board[0][i];
}
}
if (board[2][0] == board[1][1] && board[0][2] == board[2][0] && board[2][0]!=’ ')//判断对角线
{
return board[2][0];
}
if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] != ’ ')
{
return board[0][0];
}
//2.判断平局
if (isFull(board, row, col) == 1)
{
return ‘Q’;
}
else return ‘C’;
}
平局:
女朋友赢:
玩家赢:
最终的所有的代码如下:
=================================================================
七夕到了,没有女朋友怎么办?没事~ 写一个小游戏,让女朋友陪你玩猜数字~
在一定数值范围内,游戏随机生成一个数字,玩家输入比随机数大的数字时,程序会提醒,数值大于目标数,反之亦然。通过不断试错,最终找出目标数字。此游戏可以重复玩。
设立一个menu(),菜单函数
void menu()
{
printf(“***********”);
printf(“1.play*”);
printf(“0.exit*”);
printf(“***********”);
}
因为游戏可以重复玩,所以需要执行一次,再进行循环。因此选择do…while()语句
#include<stdio.h>
#include<math.h>
void menu()
{
printf(“***********”);
printf(“1.play*”);
printf(“0.exit*”);
printf(“***********”);
}
int main()
{
int t;
do
{
menu();
printf(“请选择:》”);
scanf(“%d”, &t);
switch (t)
{
case 1:
game();
break;
case 0:
printf(“退出游戏”);
break;
default:
printf(“选择错误”);
break;
}
}while(input);
return 0;
}
菜单如图:
💡int rand(void) :返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
💡RAND_MAX :是一个常量,它的默认值在不同的实现中会有所不同,但是值 ≥ 32767。
使用该函数,需要引头文件 #include<stdib.h>
💡 srand 函数是随机数发生器的初始化函数。
它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的 rand() 函数会出现一样的随机数,如: srand(1); 直接使用 1 来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为程序中往往并不需要经过参数获得的数据。
💡需要引用头文件 #include<time.h>
💡此时生成了随机数,但是如果输入数字的时间过快,可能会输出相同的数字,而且是递增的。
所以srand((unsigned int)time(NULL))位置需要调整到主函数内。即:
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
…
💡解决了生成随机数的问题,但是rand()函数生成的数字是0到32767,对于猜数字游戏来说,范围太大。将范围调整成1~100。
想要输出给定范围之内的随机数,需要使用 rand() % (b - a + 1)+ a,显然,rand()% (b - a + 1)的范围是[0,b - a],再加上a之后的范围就是[a,b]下面的代码是生成[0,100]]范围内的随机数。
void game()
{
int ret = 0;
ret = rand()%100+1;
int guess = 0;
printf(“%d\n”, ret);
printf(“猜数字游戏\n”);
while (1)
{
scanf(“%d”, &guess);
if (guess > ret)
{
printf(“女朋友:猜测过大,请重新猜”);
}
else if (guess < ret)
{
printf(“女朋友:猜测过小,请重新猜”);
}
else
{
printf(“恭喜你,猜对啦!╰(°▽°)╯”):
}
}
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf(“***********\n”);
printf(“1.play*\n”);
printf(“0.exit*\n”);
printf(“***********\n”);
}
void game()
{
int ret = 0;
ret = rand()%100+1;
int guess = 0;
printf(“猜数字游戏\n”);
while (1)
{
printf(“女朋友:请猜数字>”);
scanf(“%d”, &guess);
if (guess > ret)
{
printf(“女朋友:猜测过大,请重新猜\n”);
}
else if (guess < ret)
{
printf(“女朋友:猜测过小,请重新猜\n”);
}
else
{
printf(“女朋友:恭喜你,猜对啦!╰(°▽°)╯\n”); break;
}
}
}
int main()
{
int input;
srand((unsigned int)time(NULL));
do
{
menu();
printf(“请选择:》\n”);
printf(“\n”);
scanf(“%d”, &input);
switch (input)
{
case 1:
printf(“女朋友:准备开始游戏拉!\n”);
game();
break;
case 0:
printf(“退出游戏\n”);
break;
default:
printf(“选择错误\n”);
break;
}
} while (input);
return 0;
}
最终的所有的代码如下:
是不是感觉超级甜的鸭!!!!!
================================================================
七夕到了,没有女朋友怎么办?没事~ 写一个小游戏,让女朋友陪你玩扫雷~
首先创建:
game.c的源文件–>游戏函数的实现
test.c的源文件–>测试使用
game.h的头文件–>游戏函数的声明
一共需要创建两个二维数组:
如果要实现9*9的数组雷区,则实际要创建11 *11的数组雷区,为了防止数组越界。
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
int i, j;
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
{
board[i][j] = set;
}
}
}
void game()
{
char mine[ROWS][COLS] = { 0 };//存放雷的信息
char show[ROWS][COLS] = { 0 };//存放排查雷的信息
//初始化棋盘
InitBoard(mine, ROWS, COLS ,‘0’);
InitBoard(show, ROWS, COLS,‘*’);
//展示棋盘
DisplayBoard(mine, ROWS, COLS);
DisplayBoard(show, ROWS, COLS);
}
void DisplayBoard(char board[ROWS][COLS], int rows, int cols)
{
int i, j;
for (i = 0; i < 10; i++)
{
printf("%d ", i);
}
printf(“\n”);
for (i = 1; i < ROWS-1; i++)
{
printf("%d ", i);
for (j = 1; j < COLS-1; j++)
{
printf("%c ", board[i][j]);
}
printf(“\n”);
}
printf(“\n”);
}
最外层的行列可以让玩家容易分清楚是在第几行第几列
void SetMine(char board[ROWS][COLS], int row, int col)
{
int count = EAST_COUNT;
while (count)
{ //1.生成随机下标
int x = rand() % row + 1;
int y = rand() % col + 1;
if (board[x][y] != ‘1’)
{
board[x][y] = ‘1’;
count–;
}
}
}
0 1 2 3 4 5 6 7 8 9
1 1 0 0 0 0 0 0 1 0
2 0 0 0 0 0 0 0 0 0
3 0 0 0 1 0 0 0 0 0
4 1 0 0 0 1 1 0 0 0
5 0 0 0 0 0 1 0 0 0
6 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0
9 0 1 0 1 0 0 0 0 0
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-XW2Cfth5-1713785383291)]
[外链图片转存中…(img-MJvOtvCk-1713785383292)]
[外链图片转存中…(img-3DDuZKQJ-1713785383292)]
[外链图片转存中…(img-xxOOcePM-1713785383293)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)