论程序猿的数学素养的重要性

嗯……这个槽不吐不行啊www
话说大家都知道Galgame一般都有skip模式,于是在处理ckip模式的时候一般都会省略很多过程,比如Crossfade啊之类的效果都会根本不过渡直接切换啊原本会做的一些中途运算会被跳过啊啥的,某个游戏的程序是这样定义的:当skip模式的时候主函数将脚本里面的int时间变量nTime赋值0,然后在实际的命令函数里面用if文写当时间为0的时候省略掉中途步骤——好了问题出现了,这货居然在主函数里面调用命令函数的时候,时间变量用的是pow函数球2的nTime次方调用233偶真想抽这丫的,就算不考虑执行效率的问题,你初中数学是语文老师教的么233乃数学老师教过你2的0次方是0么233程序猿的数学素养啊

嘛槽点还有好多,比如有个地方有个效果是3个item交替随机变换出现,简单来说就是如果分别给这3个item起名叫A、B、C的话,那么可能这一秒钟是A出现B、C隐藏,下一秒钟可能就是A、C出现B隐藏,在下一秒钟就是B、C出现A隐藏这样,A、B、C的出现和隐藏都是随机,于是在实现这个效果的时候某程序猿就是这样写的(源代码有所精简,这里只写出重要部分):


for (int i = 0; i < 3; i++) {
	float r = rand();
	r /= RAND_MAX;

	if (r > 0.5) {
		sprite[i].visible = YES;
	} else {
		sprite[i].visible = NO;
	}
}

好吧这样写确实能实现最基本的要求——3个item的随机显示/隐藏,但是这里面有好几个槽点啊好不好233
第一:为什么要特地用float做除法球一个0~1之间的小数,然后再拿这个小数和0.5去比较啊虽然这种运算的确也耗不了多少CPU资源但是直接用int球AND 1不就好了233
第二:这样单纯的球法根本无法保证下一次和这一次不是完全相同的Flag——这也就是说由于下一次和这一次显示和隐藏的item完全一模一样看起来就好像画面没动一样啊好不好233
第三:其实仔细看原作的话就会发现,除开每一次得出的Flag都不会和上一次完全相同意外,也不会有3个item的Flag完全相同,也就是说不会有3个item同时全部显示或者全部隐藏的情况,这个问题用这个单纯的算法也完全做不到啊233于是偶实在看不下去了把这段代码改了:


int nextSpriteFlag = rand() % ((1<<3) - 2) + 1;
int currentSpriteFlag = 0;

for (int i = 0; i < 3; i++) {
	currentSpriteFlag += sprite[i].visible<<i;
}

if (currentSpriteFlag == nextSpriteFlag) {
	for (int i = 0; i < 3; i++) {
		sprite[i].visible = ~(nextSpriteFlag>>i) & 1;
	}
} else {
	for (int i = 0; i < 3; i++) {
		sprite[i].visible = (nextSpriteFlag>>i) & 1;
	}
}

恩虽然不敢说这是最好的算法但至少达到目的了而且比原来那个算法还要快得多啊233当然偶承认也确实难读懂一点

嘛这样的槽点实在太多了偶都实在不想再举了,总之一句话:好歹乃也是专业Programmer啊能不能别让Director来挑你代码上的错误啊233

嘛话说进入4月了,各大春季新番也逐渐开始播放了,个人目前在看的番里面大推LoveLive第二季和一周的朋友,LoveLive继承了第一季的颜艺同时节奏跟第一期相比有过之而无不足(就目前的第一话来说),第一季的最大短板——真姬和希碳的棒读在第二季也有了相当大的进步,不推对不起自己是LoveLiver啊ww而一周的朋友虽然没看过原作,但在放送前的节目介绍里面就被打动了——一个人只有一周的记忆,过了这一周所有她的记忆——包括和你在一起的愉快回忆——都会全部被遗忘,这样的她你也愿意做朋友吗?从第一话来看节奏感还算把握的不错,人设和画风也很符合偶的狗胃,期待后面的发展~话说果然顺行性失忆症是个很痛苦的病吧orz

好了最近各种忙的一塌糊涂姑且就先写到这里了w

p.s. 最近樱花开了又到赏樱时节了,于是电视台去采访一大早就在上野公园赏樱花的人,结果采访到一个人问他为什么这么早(早上不到6点)就来,他说我也不知道啊明明大家说好中午来的结果不知道为什么就我的时间改成了早上5点——可怜的泥口前辈233
Bj4x5RlCQAA-BQL.jpg-large
29d09e00

再p.s. LoveLive和必胜客的合作,点Pizza可以获得LoveLive的纸盒——岂有不点之理!
IMG_2914

再再p.s. LoveLive的Solo专辑共9个人的版本全部发售了——于是iTunes store的Anisong区的Album Top 10除了第7名被中二病的OST占了以外其他全是LoveLive!就是不愧是唱歌最烂的希碳wwww
スクリーンショット 2014-04-05 15.07.02

再再再p.s. 社长真淘气系列www
スクリーンショット 2014-03-16 14.30.41
スクリーンショット 2014-02-18 0.07.26

再再再再p.s. 公司有游戏机真好玩系列www
IMG_2927

再再再再再p.s. 樱谋诡计(给桜Trick起这个译名的绝对是天才!)里面春香香和优结婚这个梗怎么看怎么像花吻的这张壁纸啊ww
スクリーンショット 2014-03-12 1.06.34
スクリーンショット 2014-03-30 1.24.46

再再再再再再p.s.(乃够了!)霓虹去的Mac App Store居然首页推荐里面有微信This Is Not Science!
スクリーンショット 2014-03-30 0.50.16

最后的p.s. 钓鱼网站乃敢不敢做的再不负责任一点233
スクリーンショット 2014-03-30 1.01.23

Author: 星野恵瑠

Mac user, Niji-Ota, Chinese, Now working in Japan at MAGES. Inc., Future's aim is that one day my name can be listed in Wikipedia

17 thoughts on “论程序猿的数学素养的重要性”

  1. 目測博主是個強迫症患者,其實那個改不改也沒所謂,反正現在很多電腦的配置不差,應該拖累不了多少速度的。

    或說肉身在霓虹真是好,好想要那個Pizza的盒子(流口水

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

(;;) (:D) (!!!!) (……) (^o^;) (==) (OoO) (=v=o) more »Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).