Changkun's Blog欧长坤的博客

Science and art, life in between.科学与艺术,生活在其间。

  • Home首页
  • Ideas想法
  • Posts文章
  • Tags标签
  • Bio关于
Changkun Ou

Changkun Ou

Human-AI interaction researcher, engineer, and writer.人机交互研究者、工程师、写作者。

Bridging HCI, AI, and systems programming. Building intelligent human-in-the-loop optimization systems. Informed by psychology, sociology, cognitive science, and philosophy.连接人机交互、AI 与系统编程。构建智能的人在环优化系统。融合心理学、社会学、认知科学与哲学。

Science and art, life in between.科学与艺术,生活在其间。

282 Blogs博客
171 Tags标签
Changkun's Blog欧长坤的博客

在 Mac 中安装 opencv-python

Published at发布于:: 2014-07-29   |   Reading阅读:: 1 min
前段时间手贱升级到了 Yosemite Developer Preview 版,实在是太费电,想降级,结果发现升级时没有备份,简直是残废= =,遂重装系统,隔了很久,今天才想起来还要装个OpenCV(惭愧…很久没写OpenCV了…),这学期一直在写Python,Python快速开发简直赞,所以想用Python来些OpenCV了…… 不觉发现OpenCV已经更新到2.4.9了,遂看了一上午的OpenCV的官方文档,对比了一下Python和C++的接口,感觉很不错。 不过安装教程也是奇葩,好像万年不更新了… 好吧进入正题,下面是傻瓜式的安装教程 如果你已经有了CMake环境,那么直接跳到第3步 1、安装Homebrew(类似于Ubuntu的apt-get) 1 ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" 2、安装CMake 1 brew install cmake 3、安装OpenCV 在下载的OpenCV源码文件夹内,执行如下命令,如果CMake有错,那么请安装Xcode中的Command Line Tools(Xcode5以后的版本自带了,如果Xcode都没有你怎么会想到安装OpenCV..orz): 1 2 3 4 5 mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON .. make sudo make install 4、配置Python路径 在~目录下 1 vim .bash_profile 在.bash_profile中添加,其中python2.7视个人python版本而定。 1 export PYTHONPATH=/usr/local/lib/python2.
Read More阅读更多 »

计算机科学和数学的那点儿破事儿

Published at发布于:: 2014-07-08   |   Reading阅读:: 1 min
1928年的国际数学家大会在波诺尼亚举行,会上希尔伯特又提粗了他的一个另一个著名问题——所谓的判定问题:找出一个算法来判定一个给定的命题是否为其他命题的逻辑推论。 该问题的趣味性在于以下施诗:数学的哥哥分支可以一律用公里体系呈现出来,其中的鼎力为前面公理的逻辑结果。像希尔伯特所寻求的这样的算法,能使数学家集中注意力于他们工作的令人高兴得部分,即明确表达公里并称述有趣的结果,而将从公理中退出的这些结果的费力的工作留给算法。 然而该问题远非是上面的如意算盘。1992年,波斯特取得了关于该问题的实质性的进步,他证明了命题逻辑——处理呗成为关联词的语言元素的逻辑部分有效地接纳了这种算法,即所谓的真值表方法。然后希尔伯特提出了将该结果扩展也处理量词的逻辑部分——即谓词逻辑。 该问题由美国的丘奇于英国的图灵于1936年分别独立地加以解决。结果是否定的(从中可以看出,对证明的寻求仍旧构成了做数学的中心部分):希尔伯特所寻求的这种算法是不存在的。但这一事实的证明以一种实质性的进展为先决条件:尽管算法存在性的证明能够仅仅通过展示为先决条件:尽管算法存在性的证明能够仅仅通过展示具有所期望的性质的算法而完成,但是不存在性的证明需要除去每一个可能的算法,因此需要给出算法这一概念的完整刻画。 这样一个模糊、直觉的概念竟然能容纳精确地、形式的刻画,这一事实是令人惊讶地发现。这一点是通过一系列的对算法加以定义的尝试实现的,最终所有的定义被证明是等价的。而确实是图灵的方法最终使数学家意识到,该定义已经被发现。当今他的定义可以被翻译成似乎是平凡的术语——算法是可以用任何一种所谓的通用语言翻译成计算机程序的方法。 的确,1936年计算机还不存在。然而,计算机的进展正是基于图灵引入了通用计算机——通过执行一个程序能够完成每一个可计算函数——这一概念,确切地说,是基于从仅能够完成固定计算的专门计算机,例如计算器,能够完成任何可执行计算——例如计算机——的转变。 图灵得到了判定问题的否定结果,通过将停机问题——即判定一个给定的程序是否将最终终止它的计算并停止于事先输入的数据——翻译成逻辑语言。这一问题可以很容易地被证明是不可判定的,从下面的意义上来说:没有程序能判定它,通过使用经典的对角线法——由康托在集合论中首次引入,后来罗素用于他的悖论,哥德尔用于他得不完全性定理的证明中,因此这一方法为图灵所熟知(也为丘奇所熟知,他用先死的方式解决了这一问题,只是使用他关于算法的等价定义——lambda演算)。 判定问题的解决方法给出了各个领域中关于不可判定性证明的一种方法,通过恰当地翻译成停机问题或其他相似性的问题。从数学的角度来看,该方法的最有趣的应用是希尔伯特第十问题的否定:能否找出一个有整数(正的和负的)系数的多项式(含有一个或多个变量)是否有整数的零点——即通过多项式等于零而得到的丢叛徒方程是否有整数根的算法。 在1900年国际数学家大会时,希尔伯特第十问题的特殊情形的肯定解答就为人所知了。例如,找出最大公因数的欧几里得算法能被用于处理一次丢番图方程,因为a1x1+…+anxn=b有整数解,当且仅当a1,…,an的最大公因子能整除b。此外搞死的二次互反律能使人们处理二次丢番图方程。 1968年,阿兰·贝克尔给出了一个结果——三次或更高次多项式方程解的有效上街,该结果能被用于处理椭圆方程的情形,为此他赢得了1970年度菲尔兹奖。这一事实显示出了希尔伯特第十问题,莫德尔猜想于费马达定理之间存在内在联系。贝克尔的结果后来被扩展到处理任意含有两个变量的丢番图方程。 解决这些特殊情形的困难按时了希尔伯特问题的答案是否定的,因此一般判定算法是不存在的。马丁·戴维斯、希拉里·普特兰、茱莉亚·鲁滨逊和尤里·马蒂亚瑟维奇给出了这一事实的证明。1960年,他们当中的前三位说明了如何将停机问题翻译成丢番图方程——由于加入了指数函数而变得丰富——语言(任一给定程序的行为由一个方程描绘,因而该程序停止当且仅当该方程有一个解),后来1970年马蒂亚瑟维奇从中去掉了指数函数。 一个改进的马蒂亚塞维奇的结果说明了:有九个变量的丢番图方程的情形已经是不可判定的,但是还不知道这是否是最佳可能结果。事实上,贝克尔猜想:有三个变量的丢番图方程就已经是不可判定的了。

拙谈人工智能的未来

Published at发布于:: 2014-06-24   |   Reading阅读:: 1 min
序 从上个学期开始正式接触所谓“人工智能”,到这个学期差不多快一年了,陆陆续续逐步从感知机到SVM,从HMM到DL,逐步感受到这门学科的巨大深坑。我就来说说我的认识好了。 最初大一的时候第一次听说人工智能时是因为周伟老师(周老师确实厉害,我觉得应该是教过我的老师里面最有水平、最敬业的老师之一了),当时是和他谈到专业方向的问题,他随口提了一下他是做人工智能的。 不过当时大一计算机的皮毛都没接触到,C语言都还学得很残,也没有太在意这件事。直到后来当我接触计算机视觉之后,再后来随着对问题的深入才注意到,实际上原来这些东西我早有耳闻。 一、计算的复杂性 最开始的时候接触的是一门叫做计算复杂性理论的学科, 学到有关计算层次的东西,其中最最基础的一个东西叫做有限状态自动机,但后来才发现这玩意儿是一种非常弱的模型,只能处理正则文法正则表达式的东西,显然是不可能处理我们希望的所谓人工智能。 于是后来就出现了确定性下推自动机,但是这东西是一种上下文无关语言,尽管它后来给出了非确定性模型,能够处理的问题比确定性更广泛,但是仍然很鸡肋。最后到图灵机,不过很遗憾的事就是随着NP理论完善,图灵机也是有它自身的缺陷。 举个简单的例子,我们人脑能够处理的事情显然是指数级甚至阶乘级的复杂度甚至更复杂的问题,但是图灵机智能处理P类问题,而NP等于P吗?我个人还是很倾向于不等于的。因此,图灵机也就到P类问题截至了,还能继续突破吗?有人是这么评价图灵机的:图灵机奠定了人工智能的基础。但是,这个说法靠谱吗?实际上图灵机外面还有一些不可计算的问题,被称作不可判定问题,比如说停机问题(本质上就是罗素悖论)。 二、体系结构的硬伤 后来就接触到了计算机的结构体系——冯诺依曼体系,冯诺依曼干了什么事情呢?冯诺依曼提出了计算机的体系结构,其实就是一种实现通用图灵机的计算设备。 这种体系结构有一个很大的毛病,那就是这是一种串行的计算设备,无论你怎么改进,一个时刻永远只能处理一条指令,就这一点,几乎就给在这点上实现人工智能进行了第一道封喉。 另一方面,存取结构也存在巨大障碍尽管大脑记忆的存取方式尚不明确,但是我们能够明确的是,记忆至少是一种随机的非线性的存取结构。但是硬盘呢?尽管架构师们如何改进他们的内存硬盘架构,但是始终摆脱不了这样的尴尬——存储器始终是线性的,存取方法永远是索引的…(硬伤…这就叫硬伤…) 三、统计学的胜利 难道就没有什么办法了吗?这时候统计学的使用开始变的至关重要,尽管最初是非统计的方法应用较早,当时计算机科学家们数学功底一般,天真的以为能够找到一个解析解来解决问题。但后来科学家们很快就意识到,统计能够获得更好的效果,我们待会儿来看看是什么原因。 所以现在倡导的大数据的战略模式,就如同当年社交网络的诞生一样,似乎一夜之间所有的商业公司都开始拼了命的搜集用户隐私数据。一个很重要的基础就是:总体=样本。当这两个概念可以划等号的时,估计就没有了任何意义,因为我们在做决策的时候,依托现在的计算量,直接给出的就是全样本,只要特征选取正确,误差处理合理,则总能给出合理的预测。因为我们天真的认为,事物的变化总是有规律可循的。 一个我们实实在在能够感受到的例子就是语音识别技术,谷歌的Google Now、苹果的Siri、微软的Cortana,这些产品的背后用得不是别的,是数学,更精确一点,是统计学。一个非常基础的解决方案,就是HMM。甚至,在人机交互中有这样的观点:我们是否可以考虑会通过一些User Input来消除适当的计算量。 另一个例子是百度有个深度学习研究院,前阵子学术界的大牛吴恩达也加入其中,可见现在这套理论的火热程度。但是深度学习的本质上只是一种深层的神经网络,当时只不过计算量奇大,收敛速度也不能忍,早在上个世纪七十年代就被学术界给抛弃了。但是09年的时候,有位大牛做了一点点小的改进,于是把这堆死灰复燃了,而且,依据这套东西,学者们迅速改进,短短几年时间,Google做出了依托YouTube海量样本的惊艳产品——让计算机领悟了猫的概念。 为什么统计学会胜利?一个非常重要的原因就得益于这样一个人类行为:人脑是基于经验的。我们可以不假思索的对某些事物做出判断,就是因为我们在脑海中积累了大量的对于某件事物的分类信息。于是我们为何不把经验引入计算机体系当中呢?于是,便有了今天。(说一个打脸的事,百度依托它的这套系统,对这届世界杯进行了预测,不过这次葡萄牙的表现,也是妥妥的打脸了) 四、总结 所以,人工智能到底发展到什么地步了?前途有多大? 首先,谷歌苹果微软等涉足科技的公司做出来的产品看起来那么的智能,其实他们的本事简单得出奇——只是全样本下的数据分类而已。图灵机只是一种计算模型,它的数学本质在于集合论,基础靠的是ZFC公理系统,而图灵机这种基础计算模型的基础可以追溯到ZFC公理系统,但是在这个公理系统下,有着哥德尔定理在其决定性的压制。当然后来还诞生了诸如范畴论之类的东西,当然这些都是后话了。在这么多硬伤的状态下,人工智能还有多少前景? 其次,现在人工智能的实现,只不过是上个世纪六十年代就被数学家们玩烂了的东西,不过现在摩尔定律当道,解决了当时看似不可能的计算效率,才得以进步。这些东西,本质没有变,体系没有变,结果当然也不会有所改变。倘若不久的将来,摩尔定律也到头了,计算机科学的发展也可能到达第一个低谷了。 不仅如此,数学家们当时还给出了我们没办法处理全样本时的一系列解决方案(样本估计总体),这些方案在日后存储设备跟不上数据的生产速度时,计算机科学家们肯定会有一次重拾这一堆死灰,稍加改进,从而又会引发下一个巅峰吧。 再有,我很喜欢下面这个例子:当人类发明第一个梯子可以爬上树的时候,登月还有很远很远,更重要的是,整个方向就是错误的,梯子并不能登月。 现如今二十一世纪已经过去了十多年,真正的革命性突破还没有出现,但是,电池技术干翻了化学,可以预见的芯片技术将干翻物理,而人工智能也会干翻数学。回想一次次的理论大爆炸的起点,第一次是牛顿和莱布尼兹的微积分,第二次是伽罗华的群论,第三次则是勒贝格和它引领的测度理论,第四次会是什么呢? 总而言之,想要实现所谓高并发、高复杂度、随机存取等一系列复杂结构的人脑智能,有生之年,只能期待下一个伽罗华似的人物来革新整个数学基础体系了,到那时,无论是学术界,还是工业界,都将为之振奋。 进一步阅读的参考文献 [1]《计算理论基础(第二版)》Harry R.Lewis 等著 [2]《人工智能:一种现代方法(第三版)》 StuartRussell 著 [3]《算法导论(第三版)》Thomas H. Cormen 著 [4]《机器学习》 Tom Mitchell 著 [5]《Naive Set Theory》 Paul R. Halmos 著 [6]《用户界面设计——有效的人际交互策略(第五版)》 Ben Shneiderman 等著 [7]人工智能史 http://zh.wikipedia.org/wiki/人工智能史 [8]人工智能正在迈向技术的奇点吗?http://www.zhihu.com/question/24078012 [9]深度学习:推进人工智能的梦想 http://www.csdn.net/article/2013-05-29/2815479

Mac下新安装的MySQL无法登陆root用户解决方法

Published at发布于:: 2014-05-18   |   Reading阅读:: 1 min
也不知是何原因,新安装好的MySQL,如果尝试用mysql -u root -p登陆就会出现这样的错误,但是root用户根本就没有设置密码。 1 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 下面是解决方案: 1、先在系统偏好设置中关闭MySQL服务; 2、在终端中输入: 1 2 sudo su mysqld_safe --skip-grant-tables --skip-networking & 这时便能越过权限表,直接登陆MySQL了。 3、新建一个终端,输入 1 mysql -u root 4、 在MySQL中修改root用户密码即可: 1 2 mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’; mysql> FLUSH PRIVILEGES; 下面是在Mac中安装MySQLdb的方法: 由于要在Python里使用MySQL,但是Python内建的库中没有操作MySQL的玩意。所以得单独装一个,在安装下面的内容之前你首先得装一个MySQL。 在这里下载MySQLdb for Python,现在的最新版本是1.2.3,下载 MySQL-python-1.2.3.tar.gz 文件。(大视窗就直接 MySQL-python-1.2.3.win32-py2.7.msi 安装把) 在Finder直接双击压缩包或者 tar zxvf 解压之后,打开里面的 site.
Read More阅读更多 »

Matlab 2013a for Mac 帮助文档卡死解决方案

Published at发布于:: 2014-04-28   |   Reading阅读:: 1 min
有两种方法,不过都有自己的缺点。 方法1: R2013a在命令窗口中输入: 1 com.mathworks.mlwidgets.html.HtmlComponentFactory.setBrowserProperty('JxBrowser.BrowserType','Mozilla15'); 缺点:会使得Menubar菜单消失。 如果想还原运行的上面命令: 1 com.mathworks.mlwidgets.html.HtmlComponentFactory.setBrowserProperty('JxBrowser.BrowserType','Safari'); 方法2: 在防火墙中禁止matlab访问网络,这样不需要任何改动就可以避免帮助文档卡死。 缺点:需要matlab进行网络访问则会失效。

Put color on Mac terminal

Published at发布于:: 2014-04-22   |   Reading阅读:: 1 min
Mac中的ls命令可以使用-G参数彩色化输出的文件列表,需要配置LSCOLORS环境变量定义颜色,具体配置方法可以输入man ls查看。 不过,我查到这篇文章:http://linfan.info/blog/2012/02/27/colorful-terminal-in-mac/ 这篇文章的博主推荐安装Linux使用的GNU Coreutils替换Mac的ls命令,因为: Coreutils提供了配置工具,定义颜色代码更加方便; Coreutils包含的不仅仅是ls,同时作为Linux用户,他更习惯于使用GNU的各种shell工具。 (好吧,其实我也是一样) Coreutils的安装与配置方法如下: 通过Homebrew安装Coreutils 1 brew install xz coreutils 注:Coreutils并不依赖于xz,但它的源码是用xz格式压缩的,安装xz才能解压。 生成颜色定义文件 1 gdircolors --print-database > ~/.dir_colors 在~/.bash_profile配置文件中加入以下代码 1 2 3 4 5 if brew list | grep coreutils > /dev/null ; then PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH" alias ls='ls -F --show-control-chars --color=auto' eval `gdircolors -b $HOME/.dir_colors` fi gdircolor的作用就是设置ls命令使用的环境变量LS_COLORS(BSD是LSCOLORS),我们可以修改~/.dir_colors自定义文件的颜色,此文件中的注释已经包含各种颜色取值的说明。 grep高亮显示关键字: 这个很简单,加上–color参数就可以了,为了使用方便,可以在~/.bash_profile配置文件中加上alias定义。 1 2 3 alias grep='grep --color' alias egrep='egrep --color' alias fgrep='fgrep --color' Vim语法高亮: 在Vim中输入命令:syntax on激活语法高亮,若需要Vim启动时自动激活,在~/.
Read More阅读更多 »

论文都是逼出来的

Published at发布于:: 2014-04-04   |   Reading阅读:: 1 min
美赛成绩出来了,应该算是相比去年来说算是进步了很多吧。 去年苦逼的只拿到了Successfully Participation,今年查到成绩的时候还是小激动了一下:Meritorious Winner。 不过后来听到居然有大神拿到了Outstanding Winner,瞬间感觉自己仍然还是弱渣一枚,做什么都是渣,欣喜感荡然无存= =。 说来也奇,今年比赛的时候我和队友居然都错误的把一个四天的比赛认为只有三天,结果提前了24小时就提交了论文,现在想想觉得也很惊悚。 事实上距离比赛结束(2月10号)才两个月不到的时间,但我已经完全想不起来比赛论文写了什么东西了。 查完成绩后回寝室看了看这两篇论文,感觉差距还是超级的大,大一满怀论文信手拈来的那种激情已经完全不存在了。 遂先回过头来看大一的那篇《The Ultimate Brownie Pan》,无论从排版上的品位还是最后模型的建立,都只觉得稚嫩与无知。 刚才重读了今年的这篇论文《A Study in Keep-Right-Except-To-Pass Rule》(你有没有觉得这篇名字的命名借鉴了Sherlock..回答正确..=-=)更多的是在理论上的一些思考,甚至我现在再回过去读这篇论文发现已经不太能看懂自己的观点了。当然,今年这片在整片论文的排版上下了很大的功夫,直接导致了我这两个月都毫无写论文的欲望。 于是我慢慢理解了那些评委面对上万份的论文,究竟耐下了多少性子审核了这么大一堆论文。因为我自己再回过头去看我自己的论文(30多页),都觉得毫无耐心,几乎是一路翻看过去的。 大一大二这两年论文写了不少,真正获得认同的文章却没有几篇,综合起来看,凡是激情澎湃洋洋洒洒敲下来的论文,基本上都属于废材系列,没有一篇是别人同意靠谱的。相反这些在短时间内逼出来的文章,倒是含金量不少?说不准了。 好吧,想想自己还是弱渣一枚,滚去图书馆看书去了..

Python QuickStart

Published at发布于:: 2014-03-27   |   Reading阅读:: 1 min
Python Version: 2.7 We use python for rapid development. Mainly using the matrix operations, so we quickly introduce python collection type and control structure. List 1 2 3 4 >>> wow=[] >>> wow.append(1) >>> wow.append('nice hat') >>> wow python has arryay data type, which similar to c/cpp/java/…, can contain only one type of data. This array type is faster than list when you are looping. Dicthinaries 1 2 3 4 >>> wow={} >>> wow['name']='euryugasaki' >>> wow[123]=456 >>> wow Set 1 2 3 4 5 6 7 8 >>> Set1 = [1,2,3,4,5,6,7,8,9] >>> pSet1 = set(Set1) >>> pSet1 >>> pSet2 = set([4,5,6,7]) >>> pSet2 >>> pSet1-pSet2 >>> pSet1|pSet2 >>> pSet1&pSet2 if 1 2 3 4 5 >>> val=10 >>> if val<9: print "hehe" >>> if val<9: .
Read More阅读更多 »

谈谈对编程语言的一般性认识

Published at发布于:: 2014-03-22   |   Reading阅读:: 1 min
前段时间做了个无聊的事情,算了算我大概学会使用了多少门编程语言,最后的结果是:十二门。(C, C++, Objective-C, Mathematica, Maple, Linux Shell, Java, Matlab, Lua, Python, assembly, R.) 然而细细一想又觉得很不靠谱,因为真正我自己觉得可能算是精通的的语言只有两门:Mathematica(我把它简称为MM) 和 Objective-C(我把它简称为OC)。 OC学起来很快,它和C++、Java这些面向对象的语言十分类似,不过,差距也显得比较突兀,我自己的学习顺序是:C -> C++ -> Java -> OC,好在我在学习OC之前对Java有了一个较为全面的了解,加之对C++一些肤浅的理解,算是稍微理解了一些OC的范式与模板了。 OC采用的是一种叫做“Messaging Structure”而非"Function Calling"的机制。我们可以对比一下下面的代码: 1 2 3 // Function Calling (c++) Person *person = new Person; person-&gt;walk(parameter1, parameter2); 1 2 3 #pragma mark Messaging Structure (oc) Person *person = [Person new]; [person walkWith:parameter1 and:parameter2]; 他们一个比较本质的区别在于,使用Messaging Structure的语言,运行时所应执行的代码是由运行环境决定的,而使用函数调用的语言,则是由编译器决定的。如果调用的函数是多态的,那么运行时就需要一种叫做“Virtual Table”的机制来检查到底应该执行哪个寒素实现。采用消息结构的语言,不论是否多态,总是在运行时才会去查找所需执行的方法。其实,编译器都不会去关心接受消息的对象是什么类型。接受消息的对象问题也需要再运行时处理,其实这样的一个过程就是我们所熟知的“Dynamic Binding”。 OC的重要工作都是由运行期组件而非编译器完成的。举个例子,运行期组件里面含有全套内存管理的方法,运行期组件本质上就是一种与开发者所编代码相链接的一个所谓的"Dynamic Library",其代码能把开发者编写的所有程序粘合起来。这样的话,只要更新相应的运行期组件,马上就可以获得性能的提升,而那些很多工作都是处于编译期完成的语言(比如C++),想要获得类似的性能提升,就需要重新编译了。 下面配一张动态绑定这一特性,c++的OOP和其他语言的OOP的态度。

写 App & 与打砖块:无尽版

Published at发布于:: 2014-03-20   |   Reading阅读:: 1 min
→ → 明早没课嘿嘿嘿嘿 第一次写app是打砖块,因为好像人生中第一个玩的游戏就是打砖块= =,所以看了点知识就开始下手了,感触比较深刻的是不真机调试有些bug还真不知道。。今天晚上趁着写FlappyFlat脑子比较热,熟悉了一下以前写的源码,顺便就改了改代码,算是把目前已知的Bug清理完毕了。算是比较完整的版本了。。目测以后不会去屌这个了。。 今天第二次写app,是现在这股FlappyBird热,看到别人写app,突然自己也想试一试,再加上寒假整个荒废,干脆写一个来祭奠逝去的寒假。 构思了约莫十分钟,后来越写越奇葩,越写越觉得要处理的东西多,比如说重力啊,块在上下过程运动时候的旋转啊,管子间距的随机生成啊,渲染管子在视图层的运动啊等等。 但是感触最较多还是编程本身,语言仅仅只是语法,各类API就好比单词,所谓开发经验,估计就是所谓的API掌握的熟练度了,这次代码逻辑上实现估计不过一个小时可能,除开在脑子里纠结混乱的逻辑,估计真正编码时间应该只有半个小时不到。那还有两个小时花在哪里去了呢。。没错,查文档= =记不住API真是太糟糕了。虽然花了三个小时,但是Bug仍然存在,重力方面好像我自己想的模拟方法达不到原版的那种粘滞感,估计是摸你得太真实了把,不过短期内不想碰它了= = p.s. 还是老实系统搞一遍好了,高级特性神马的完全就没有用到啊,这种简单玩意儿都要花这么长时间,弱成渣啊。 版本号:0.2.0 (无尽版) 更新以下功能: 增加社交化功能,统计历史砖块数,显示您击败了全球多少小伙伴; 随机生成的关卡难度,砖块打得越多,小球速度越大,难度越高; 两次都没有击中砖块时,惩罚玩家,增加随机多个砖块; 有一定几率触发智能模式:闪现,此模式下砖块具备闪现能力,砖块当预测到自身将被击中时,有一定几率完成闪现; 有一定几率触发智能模式:无尽,此模式下砖块具备无尽能力,每当有砖块被击中时,有几率增加随机多个砖块; 更多玩法求提意见。 历史版本: 版本号:0.1.1 修复若干Bug 版本号:0.1.0 初步完成
17 18 19 20 21 22 23 24 25
© 2008 - 2026 Changkun Ou. All rights reserved.保留所有权利。 | PV/UV: /
0%