Table of Contents
回顾
恋词复习
- discourse n.论文;演讲;谈话;语篇; v.演讲,讲述
- notorious adj.臭名显著的,声名狼藉的,众所周知的
- denote v.意思是;预示;代表
- embody v.体现;使具体化;代表;包括;包含
- deputy n.代理人;代表 adj.副的;代理的
心理班会
收钱做事做了个PPT。他们说风格很我。 存一下链接:PPT。
Flappy Bird
明天就要讲了,今天最后发现还有几个重要的点可以讲。
- 关于P1、P2管道的初始化问题。即初始化
opening_height
,这里其实非常巧妙。
Windows和Linux的RAND_MAX值不一样!rand()有区别
p1.center = (int)(1.2 * (NUM_COLS - 1));
p1.opening_height = rand() / ((float) INT_MAX) * 0.5 + 0.25;
p2.center = (int)(1.75 * (NUM_COLS - 1));
p2.opening_height = rand() / ((float) INT_MAX) * 0.5 + 0.25;
如代码所示,这里有个点想说一下。关于rand()
的最大值在
RAND_MAX
在stdlib.h
中- Windows平台:
#define RAND_MAX 0x7FFF
,即32767
。 - Linux平台:
#define RAND_MAX 0x7FFFFFFF
,即2147483647
。
- Windows平台:
所以上面rand()
中的数值介于0~2147483647
,又INT_MAX
数值为2147483647
。
所以$\frac{rand()}{(float) INT'MAX}$介于0~1
之间的小数,所以$\frac{rand()}{(float) INT'MAX}* 0.5 + 0.25$ 的值就介于
00.5+0.25~10.5+0.25之间,即
$\frac{1}{4}$~
$\frac{3}{4}$之间,即意味着开口高度
opening_height所占控制台高度初始化的值虽然随机,可是随机在了
$\frac{1}{4}$~
$\frac{3}{4}$`,妙!
- 关于返回开口上端与下端的函数(在画管道的时候有用)
int get_orow(vpipe p, int top) {
return p.opening_height * (NUM_ROWS - 1) -(top ? 1 : -1) * OPENING_WIDTH / 2;
}
在这里用到了:
// Draw vertical part of upper half of pipe. //画出管道上半部的垂直部分。
for(i = ceiling_row + 1; i < get_orow(p, 1); i++) {
if ((p.center - PIPE_RADIUS) >= 0 &&
(p.center - PIPE_RADIUS) < NUM_COLS - 1) {
chtostr(vch, c);
mvprintw(i, p.center - PIPE_RADIUS, c);
}
if ((p.center + PIPE_RADIUS) >= 0 &&
(p.center + PIPE_RADIUS) < NUM_COLS - 1) {
chtostr(vch, c);
mvprintw(i, p.center + PIPE_RADIUS, c);
}
}
upper_terminus = i;
上面说过opening_height
是所占控制台高度的几分之己,所以管道是这么设计的,并且管道是这么画的。
一切都很明了,我就不说了。
- 第三点就是
ncurses
库的使用。这个库的诞生太大意义了,真的为c语言开发设计了很大的方便。具体函数看之前写的这篇文章吧->https://tanxy.typlog.io/2021/20210402。
就这样,拜拜。噢对,关于FLAPPY-BIRD
讲解我还做了一个幻灯片->FLAPPY-BIRD