我想成为一个程序员,我该怎样去做

请善用搜索:编程入门 - 话题精华
■网友
螃汪本来想匿名回答:先去学会搜索。点进来一看问题说明,画图好用心呀,而且这个问题貌似常见但是貌似也不好搜索,所以还是回答一下吧……不过我的水平太低不能作为人师,仅供参考。你的意思是说,你懂最细部该怎么做,但不懂全局的一个实现对不对?如果不对请告诉我啦。嘛,举个例子…比如说做个游戏,那就简单点,生命游戏吧。 康威生命游戏优酷找了个视频。我想成为一个程序员,我该怎样去做
Game of life - 三个简单法则, 创生复杂"生命"http://v.youku.com/v_show/id_XMTQ3NzQzOTk2.html?from=y1.2-1-176.3.4-1.1-1-1-3非常神奇,假设你想要做这个。按照你的问题描述,你应该对具体怎么做一头雾水吧。如果不是就冒犯了啦。其实大家也没多少神奇的能力,懂的说不定不如你多,只是有点经验而已,就拿这个例子来说,程序员如果要写一个生命游戏,大脑里面肯定会有简单划分:游戏的内部逻辑游戏的画面表现两部分的连接大家都会这样的,只不过熟练了以后不用想,马上就能划分了,但是对一个复杂的项目,这种划分是一门很大的学问,貌似架构师就是做这个的?
然后游戏的内部逻辑又有划分:
游戏中对象的储存方式游戏的进行方式然后你看,生命游戏对象的储存方式,很简单嘛,二维数组,是不是一个很“零碎”的细节?你是不是知道?就算你不知道,你查一查也知道啦。(实际上这里面有改进的空间,做出来了以后可以想想)
二维数组,活的格子就表示为 1 ,死格子就表示为 0,这样储存方式就搞定啦!
然后再搞定游戏的进行方式就行了!
如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)(维基百科 康威生命游戏知识共享 署名-相同方式共享 3.0协议)
很简单的规则吧,只要一条一条的不断细分,细分到很简单的一小部分模块就行了,执行这个规则只需要一个双层的 for 循环就行了没错吧?遍历二维数组的每一个元素并且运用这个规则。
当然这里你自己做的时候可能会碰上一个问题,如果碰上了,尝试想明白吧~
至于第二部分,画面表现,那就很多了,我一开始是直接 print 在命令行上面的,之后又做了一个用 HTML5 的绘图 API 表现的。我那时候是真真切切不容置疑的编程初学者啦,不过项目也是放在 GitHub 上面的: lifegame。
这就是方法:思考你现在面临什么问题。比如说:如何才能实现生命游戏。如果你不能解决这个问题,将这个问题拆分成若干个子问题(比如说:游戏逻辑和画面表示),然后利用本方法分别解决这些子问题;如果你能解决这个子问题,就解决它。(比如说:生命游戏状态的储存方式。);如果你觉得这个问题无法分解下去了,但是你还不会,就去学习;如果解决子问题中出错了,没能成功解决,就调试。Recursion!这是写程序的基本法则!普世真理!谁不服从我打死他!
当然问题的划分可能会出错,或者解决小问题的时候出现了细微错误导致结果不正确……这都是正常的啦,然后就是艰苦奋斗 debug 了。
So, 题主,如果你以前没写过生命游戏,要不要尝试写一下?如果写出来了,拓展问题:
生命游戏的初始值,能不能不写死在程序里面,通过读取文件,或者用户交互的方式来完成?现在相比贪吃蛇不在话下了吧……不过贪吃蛇要动态处理用户交互哦。能不能让生命游戏的世界无限大?如果很喜欢玩 lifegame 的话,试试写一个 Wireworld ,并且在上面做一个全加器;如果还不过瘾,做一个 RAM 吧,如果还不过瘾……不要继续下去了。(http://www.quinapalus.com/wi-index.html)有人在 lifegame 里面运行了一个 lifegame,要不要尝试搞懂一下如何用 lifegame 编程?(等等已经堕入邪道了吧——元胞自动机才不是邪道呢!Wolfram 如是说。)https://www.youtube.com/watch?v=xP5-iIeKXE8-----------唉,自己水平那么低,尽想回答入门问题,真正有技术含量的问题根本不敢回答。


推荐阅读