Skip to content

Instantly share code, notes, and snippets.

@Gaubee
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Gaubee/9485322 to your computer and use it in GitHub Desktop.
Save Gaubee/9485322 to your computer and use it in GitHub Desktop.
给世辉定制的编程技能快速有效的入门方案。旨在学习编程核心思想与编程界的知识,保证每个时间段都能学到独立有效的知识与实践能力

首先对于汪世辉学编程这件事情我是表示各种呵呵。

当然他说要学习编程并不代表要成为程序员。

而应该说是一定程度上去了解编程界的各种潜规则,所以不能把他当成程序员去培养,而是从培养互联网公司的CEO的角度去了解编程界的各种领域的概念,当然有时候了解是需要代码实践的,但这不会像做业务一样烦人。

有几点要注意的:

  • 不要盲目的写代码,而是通过展示一些精简的核心代码来阐述原理,确保不踩傻逼坑。
  • 了解的方向主要是Web开发方向,桌面编程做适当了解不过于深入
  • 如果有API的学习,确保是为了学习API设计的原理与所针对的底层知识概念。

第一天,主要任务是安装工具。我选择让他先接触Github与Google,而不是以往一般先接触编程语言。 是为了确保能先掌握开发者工具的使用,放长线掉大鱼。另外Github是国外最大的编程社区,这里能了解到世界级项目的构建——《论做一个世界级顶层CEO的自我修养》

按顺序完成以下任务(1小时):

  1. https://raw.github.com/Gaubee/blog/gh-pages/hosts 这里的内容复制到你电脑的hosts文件里面。百度:“修改 hosts” 会有教程 (PS:做这个是为了让你能用Google搜索,学习编程的话Google完爆百度,维基百科是非常好的书籍)
  2. Google Chrome浏览器安装起来
  3. 注册一个Github账户 http://github.com
  4. 下载git for window http://msysgit.github.io/

可选:

  1. 注册Google账户
  2. 安装Github for window http://windows.github.com/

PS:一开始“设计模式”不要深入,看个名字自己意淫一下意思就可以了。

Github、维基百科等国外网站在国内的访问有时候会有一定阻碍,得不停的刷新页面。所以我在Git客户端的选择并没有推荐他直接使用Github for Window这种便捷的工具。而是选择git for window这种通用的工具。这样能有机会接触到关于git命令行的简单使用,如此也能使用国内的Git in 开源中国的工具 http://git.oschina.net/

第二课的任务主要是培养编程思想。这是编程世界中最核心最有用东西。

和数学思想不一样,数学在逻辑思维上追求深度。而编程思想追求广度

目光必须长远,代码必须优雅简单可行。

在编程的时候,就是在读自己代码的时候,你是参与者也是旁观者,代码质量的好坏决定这个项目的可持续性。所以我非常讨厌二次开发,改代码是最累人的活。

现在想不管什么编程语言,想练习抽象思维。

需求是:

设计LOL游戏

分析:

LOL的英固定雄基本的信息有天赋被动技能,以及一张属性表。

这里属性表都是一个名字匹配一个数值(PS:非数值的可以用数值来代替,比如“郑仲”就可以用“2”号来替代)

而技能与天赋,这是用来影响英雄的东西,这是设计的难点,本质上来说这是一种无法交易的物品。因为都在物品栏或者技能栏中点击使用(或者被动),所以我们现在统称为“物品”。再看与它想关的数据,可能涉及到地图坐标,比如“眼”;可能涉及到英雄属性,比如“小红”;可能涉及到英雄的动作,比如“沙漏”。也就是说它能涉及到一场战役中的各种东西。所以,物品是不能用单纯的数据库存储的。而要用一个对应的代码块来代表这些奇异的功能。

暂时分析到这边,接下来讲一下游戏内部运作的方式

绝大部分游戏都有一个fps值(除了扫雷之类的没必要),而这又是联机游戏,也就是说帧数(fps)的走动和数据的改动是分开的,需要时间戳来校准同步。。

一场战役中游戏地图、英雄信息独立在内存中计时走动,而后调用显卡把数据给去取显示,几微秒后再显示一次,才有了动画。所以暂时不搞这显示问题。


而联机游戏中各个玩家的电脑中数据是相通的。唯一不同的是你有权限上传你英雄的数据。

所有人都是把数据发到服务器上再通过服务器统一收集再转发给所有人,这就叫**观察者模式(设计模式)**,这里面门道非常多,暂时不讲。

时间戳是非常重要的概念,所有电脑数据同步就是考这个时间戳来实现,ping也是通过这个来计算的。

就像你通过回声计算井有多深一样:发送一个带时间戳的数据到LOL服务器,服务器返回你发的数据,对比发送点的时间,就可以计算出延迟ping。

有了各个电脑上的延迟时间,才能实现补帧:比如我告诉你,

  1. 一秒前(2.0秒)吴明英开始笑了,那么补帧就是,我被笑声惊呆了,
  2. 虽然你没有“我被惊呆”这个数据(因为你延迟了一秒),但是你补帧了,因为理论上在0.5秒后我会被惊呆,而这时你自身的时间是(3.0),所以你补的是我惊呆后0.5秒的动作(PS:每个动作都是设计好的,都有一个时间长度,所以能计算这个时间点对应的样子)。
  3. 一秒后,“我被惊呆”这个数据从服务器发过来,没错,但依旧要进行校准,记住,每个数据都有时间戳,有了这个时间戳才能校准你的补帧。
  4. 因为你的补帧是:在2.5秒的时候“我被惊呆”,而正确的数据是2.6秒,很小的差距,可能是我突然后仰了拉开了和吴明英的差距,所以时间长了一点,
  5. 但是你没有收到“我后仰了”这个数据(2.1秒时),这就叫掉帧,所以你会发现突然卡了一下,因为动画要演绎这0.1秒的差异。

动画的数据又是依靠3D图形的触发:

比如说,和小兵对A,就开始执行打击动作:(英雄编号、动作-A、时间戳)

当你的到碰到小兵的身体时,触发扣血:(小兵编号、动作-属性血50

时间戳)

这里“碰到小兵的身体”的触发在图形编程中叫做“碰撞检测”。别看那是一把刀和一个怪,实际上就是一个长方体和另外多个长方体检测触碰,小兵的手、头、脚、身体都有相应的虚拟模型,这是用来计算的,都是长方体,这样计算会很简单。


完成以下任务:

登录Github,用Github进行回复,回复时注明想关的回复信息(哪个问题什么的)

  1. 简述德玛的Q的运作方式,影响到哪些数据,什么时候发送什么数据给服务器?
  2. (可选)技能=>发送数据给服务器,中间都要经过哪些数据处理(比如数据的格式处理(制作弹药)、获取服务器对象(指定目标)、获取发送器(炮筒))?具体的处理流程是什么?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment