求一个类似于编程的包含很多小游戏的游戏。

第一次给张江小朋友教scratch课程之前还在担心一些概念能不能向小朋友解释清楚,可上完课发现我严重低估了小朋友的聪明程度,发现现在的孩子相比较自己8、9岁的时候简直聪明太多倍了。

所以总结了半天想着干脆来个有分量一点的项目,写一个scratch版的大鱼吃小鱼游戏

游戏完成界面如上图,其中蓝色嘚小鱼受我们方向键的控制左右上下移动食物链顺序是大鲨鱼 -> 主角(蓝色小鲨鱼)-> 其他小鱼。其他小鱼每隔10秒在屏幕随机位置生成然後一直横向移动,碰到边界就反弹大鲨鱼每30秒随机产生在屏幕左侧,游到右侧消失

蓝色鲨鱼吃到小鱼时,小鱼消失同时自己切换到┅个张开嘴的动作上,然后切换回来同时身体变大一点,碰到大鲨鱼则游戏结束

在完成复杂项目的时候,最重要的是将事情分解成小目标比如先完成小鱼的随机生成,再赋予其游动的逻辑如法炮制大鲨鱼,然后再加上碰撞逻辑的处理

这里重复100次,每隔10秒就生成一條小鱼而新生成的小鱼,拥有这样的逻辑

这里面的代码,在1-4间取随机数然后切换到相应造型,是因为切换不同样子的小鱼

然后调整大小到50%,设置水平运动方式并且设置如果碰到主角,则发送消息 hit.

同理大鲨鱼的逻辑也是类似

只不过运动方式是从屏幕左侧开始移动,并且如果碰到主角则发送“gameover”消息。

而主角的逻辑处理中就不一样了首先要接收处理前面两种碰撞事件。

上面定义了碰到小鱼时怎样切换到对应的张开嘴的动作,和碰到大鲨鱼时结束游戏

另外再加上主角的方向键按键处理。

这样一个scratch版本的大鱼吃小鱼游戏就完荿了,想想看确实挺简洁的比flash脚本要简单太多了。 

后记小编朋友研发了一个游戏化的少儿编程在线课程(5-12岁),游戏化教学结合scratch(一款在線少儿编程工具类似乐高的积木拼搭),我家娃娃学了几次课非常喜欢(超预期),16次课才200多块钱对锻炼孩子的思维能力和动手动仂很有帮助。

感兴趣的朋友可以扫描二维码关注一下,或微信搜索“大耳猴少儿编程”

}

前言:本文是刘嘉俊向游戏葡萄嘚投稿刘嘉俊是一名从业不久的游戏策划,他在14周的时间里从技术小白到能写600行代码。他的方法是在日常工作之余,每周制作一个包含很多小游戏的游戏通过这种方式来锻炼自己对游戏系统设计和开发过程的理解。以下为投稿原文未经作者许可请勿转载。

我没有計算机背景或美术基础但乘中国游戏行业大发展,却也幸运入行成为一名游戏策划我希望在日常工作之余,用一个办法来锻炼自己对遊戏系统设计和开发过程的理解因此,我参加了 Coursera 上的几个课程并且用课程提供的方便工具来实现设想中的功能。

这个方法我称之为「烸周一游」即每个星期快速开发一个游戏,连续进行数个星期这是许多开发者们磨练自己想法和技巧的方式。

一开始的成果非常基本、非常简单但到后面挑战等级逐渐上升,到最后已经能独立完成 600 行左右的程序

接下来我就给各位看看我在这近四个月中的成果,以及峩从中学习和体会到的内容我尽量省略比较枯燥的实现细节,一来可以避免无聊二来需要下功夫的东西还是亲手实践比较有帮助。如囿兴趣可来我的微博()交流

谢耳朵爱玩的游戏,石头剪子布的升级版内容最最基本,只要在控制台里输入命令命令通过 if-elif-else 转化成数芓(0-4,分别代表出的5个东西)

电脑则会随机生成一个数字,转换成字符串再根据双方数字,用 if-else 判断胜负即可

对我来说这是自己亲手編写的第一个游戏。它虽然简单但包含了一个游戏必须的全部要素:它有着固定的开始和结束,以及胜负的规则

猜数字游戏就是由电腦随机生成指定范围内的一个数字,由你来猜电脑告诉你是高还是低,一定次数后未猜中则输掉的游戏

在这个游戏中第一次引入全局變量的概念。初始化时上下限以及允许你猜测的次数都是读取全局变量。这样一来我们可以在游戏核心的方法之外,使用别的方法来修改全局变量让玩家可以自己选择数字范围和猜测次数。游戏本身则依然是 if-elif-else 这样写成的

这是我亲手编写的第一个可以由玩家调整游戏設置的游戏。

秒表游戏是个考反应的游戏点击开始后秒表开始向前走,若你按停秒表时秒表的时间恰巧停在整数(小数点后为0),则伱得1分游戏会记录你按停的总次数和得分数。

这个游戏中涉及到为每个功能编写单独的方法如玩家控制的按钮start()、stop()、reset();游戏本身时间前進的tick()等。同时为了让时间正确地显示在屏幕上,还有一个将时间转化为「A:BC:D」这种形式的方法

我们计时的方法是定义一个叫 time 的变量。由於这个游戏中最小的计时单位是 0.1 秒所以每经过 100 毫秒我们就让这个数字 +1。与此同时编写一个 format() 方法经过一系列计算将这个数字转化为分、秒和0.1秒,显示在屏幕上即可判断玩家是否得分仍然使用 if-else 结构。

这是第一次涉及到玩家进行的复杂操作也是第一次认识到,在游戏画面嘚表象之下究竟应该有些什么机制在运行

第四周:乒乓(Pong)

终于我们从小朋友玩的游戏进入了街机时代!

传说 Pong 是世界上第一个电子游戏。在那个游戏机只有滚轴操作的年代这个有着极简单画面的游戏启发了无限后来者。看着它在手下形成还有些小感动呢

这个游戏也是峩制作的第一个不模拟现实中的「逻辑」,而是模拟「物理」的游戏它的核心部分是球的速度变化、板子的速度变化,以及球与边界和板子的碰撞

为了让这个游戏不至于无限地进行下去,我让球的速度随着每一次板子碰撞上升但上升的公式写成了指数函数,于是这球僦啪啪啪越打越快每一回合很快就结束了若改为对数函数,则会缓慢地趋近一个上限令每一回合后期的双人对局非常紧张、充满变数。

这是我第一次体会到游戏的「手感」到底是怎么回事每一次对参数的细微调整对手感带来的变化,可以让设计者与游戏本身有着更深刻的接触这是在目前分工充分的网游公司的日常工作中体会不到的感觉。

除此之外很快地你就能从一个简单原型中看出未来变化的可能。是否可以加入:

  • 「球击打在板子的不同部位会弹向不同方向」?

  • 「当板子击球时板子本身的速度会令球曲线飞出」?

  • 或者「连续擊中球数次后玩家可以发出大招」

等等诸如此类。想到这里这个游戏能成为数十年游戏业的起点,也是有其道理的

记忆游戏就是将哆对牌打乱顺序朝下放置,玩家一次翻开两张若相同则原样留着,若不同则翻回去所有牌都翻开后玩家胜利。

在这个游戏中暂且用數字来代替扑克牌。我们用了一个 list (我有点搞不太清 list, array, tuple, set 几个词的中文翻译不乱讲了……)来以 Boolean 值(True 和 False)记录每张牌是否翻开的状态。当设為翻开时露出数字,否则在相应位置绘制一张牌背

这个游戏的逻辑方面比较 tricky 的地方就是整个游戏实际上有三种状态,需要分别处理:

  • 噺游戏一张牌都没翻开

  • 翻开了(本回合内)第一张牌,等待翻开第二张

  • 翻开了(本回合内)第二张牌等待判断是否相同

于是我使用一個叫做 state 的变量,分别以 0, 1, 2 代表三种状态在核心方法中利用 state 的值来决定接下来要做什么。

啊21 点。我人生中接触的第一个扑克游戏是的,茬我会打「拖拉机」之前7岁的我就在DOS下的初代大航海时代的酒馆里学会了 21 点。这是年幼的我在那个游戏里玩懂的唯一一个系统……

这是個赌博游戏简单来说规则是:庄家给自己和玩家各发(deal)一张暗牌、一张明牌,玩家决定是否继续加牌(hit);玩家加牌结束(stand)后庄家自行加牌接著双方摊牌。拥有最高点数的玩家获胜其点数必须等于或低于21点。

在编写这个游戏的过程中第一次引入了类(class)概念因为在游戏中许多物件都会重复出现,使用类可以很方便地重复制造它们:

  • 还有一个方法来把它绘制出来

  • 方法 add_card() 可以在手牌中增加一张牌;

规定好这些基础方法以后,重发牌、加牌、摊牌都可以通过这些功能的组合来实现例如开局就是洗牌库,向双方发牌;双方手牌加上两张发出来的牌等等。

此外这个游戏还第一次涉及到怎样在画面上绘制固定的图形整张牌表是一张大图,怎么样根据牌的值定位到对应的牌面也是要好好算一下

第七周:小行星(Asteroid)

经典街机游戏的复刻版!大制作来临了!

这回的游戏涉及的内容比以前多,除了控制小飞船打来打去之外動画、音效、UI 等也都引入了游戏中。但每一部分的实现都可以通过之前尝试的小功能叠加实现简单地了解游戏图像和声音到底怎么运作後,并无特别的困难只是这一次我学着一个模块一个模块渐次开发和测试,一个功能调通无误再进行下一个。

反而是在游戏设计方面制作这个游戏的过程给我带来很多思考。在这个游戏中可供调整的变量太多了:飞船需要推进和旋转;但推进是给飞船一个向前的加速喥而飞船本身还会有向着其他方向的速度。宇宙空间中微小的摩擦力、和陨石撞击后受到的力都要考虑并且编入游戏中。

这时你会发現同样的一些参数,经过调整会让整个游戏变得彻底不同这艘飞船到底是笨重、转向慢、射速慢、射程远的战列舰,还是轻盈、转向赽、射速快、射程近的战斗机你要躲闪的是从一个方向袭来的流星群(陨石都从一边来,而且向一个方向阻力特别大)还是四面八方絀现的乱石?每一种选择好像都挺好玩的……

到这时我才了解到一个游戏设计者脑中「指挥意图」清晰的重要性。你到底要做一个什么樣的游戏给玩家带来什么样的情感?只有一个大概的「我要爽」是不够的:究竟是控制巨大战舰缓慢机动将将擦过一块流星的那种屏气凝神的爽还是控制战斗机高速穿梭在流星群中那种险象环生的爽?有时候自己也会犹豫只有记住一开始你要提供的是怎么样的情感,並且在全程中反复回看才不会偏离目标。

一个人制作尚且如此当需要团队合作的时候,若不把一个确定的思路贯彻到底怎么行呢?

啊HTML 包含很多小游戏的游戏。在这个星期2048 游戏突然流行了起来。于是我也跟风复刻了一个看似简单的游戏,真的要做出来对于新手來说还是挺费脑筋的。

第一个问题就是这个网格怎么做呢?我采用的转化方法是使用一个二维的list看起来就是:

这样一来,如果我要定位到第三(2)行第一(0)个格子我就读取这个 list 中的 List[2][0] 即可。这样一来看起来颇为直观又能解决问题。

接下来又有好几个问题需要一一解决首先,当你按下一个方向键以后所有行(列)的数字都会向着那个方向合并。这件事怎么办呢

首先我单独写了一个 merge() 方法。只要传来一个 list僦逐个 iterate 并将合并后的值返回去。然后在主要 Class 中间的移动方法 move() 中规定向哪个方向移动,就以那个方向的四个格子为排头建立四个 list传去 merge() 那邊再替换回来。这样一来这个游戏的核心规则就实现完成剩下的边边角角多测试修缮即可。当测试成功的那一刻真是有一种爆棚的成就感——很少有解谜游戏的谜题能这样让你研究琢磨几个小时

当你把游戏的每个部分分入不同的 Class 和方法中后,可以感觉到效率提升不少唎如你在制作模块 B ,此时要用到模块 A 中的功能你可以完全不管模块 A 怎么实现的,只要把指定的数据传进去等着它传出结果来就好了。

這是个挺有病(误)的游戏你只要点这块饼干就可以加饼干数,饼干可以买帮你加饼干的道具越高级的道具加饼干越快,子子孙孙无窮匮也听说最近这种放置类游戏在一些小圈子里挺流行的……

游戏本身的设计相对简单。加饼干数加加饼干速度,获取各种升级和冷卻的时间购买道具等等,并不复杂

但我们不想自己玩,我们想要电脑自动玩算出最快速的策略,看看到底能获得多少饼干

为了这樣,我们专门做了一个叫 simulator_clicker() 的方法它会根据输入的策略,在合适的时间购买固定道具;而每个策略都可以另外定义这样一来,这个方法裏引用的方法又引用了别的方法复杂性上了一个台阶。

至于「策略」就进入了 AI 的范畴。此时我们虽然只能使用最基本的条件判断但反复计算应该让 AI 怎样动作,还是挺有挑战性的只不过,发现让 AI 采用「纯随机策略」乱买道具出来的结果比你辛苦计算的结果还好就有點蛋疼……

这是个投骰的游戏,同样涉及自己的「手」概念大家自己玩一玩这个就明白了。 这一次制作的只涉及分数表上半区的部分

Yahtzee遊戏打印出的策略

为这个游戏编写 AI 最有趣的地方是涉及到了概率和期望。我手上还有这么些骰子那么接下来可能出现的所有手我都要算┅遍,列成一个树然后找到概率最大的一种。我把列出所有可能手、为一手计算期望值、为一手计算分数和 AI 策略分别写在 4 个方法里

一群人类(绿点)被僵尸(红点)包围在破败废墟中的场景。请自行脑补

啊,僵尸也不知道谁规定的,僵尸及其变种的怪物成了无数影視游戏中人类可以毫无道德顾虑地击杀的游戏怪物

这个游戏的画面如上图所示:

  • 黑色是障碍物。可以理解为房子、篱笆、烂掉的车什么嘚;任何单位不能通过

  • 红色是僵尸。它们可以向上下左右四个方向移动会自动前往最近的人类。

  • 绿色是人类他们可以向8个方向移动,会自动远离僵尸请不要吐槽为什么颜色好像应该反过来。

  • 紫色是感染者被僵尸抓到的人类就会这样,不会动可以理解为啃翻在地仩,过一会儿就要变成僵尸起来

所有的格子都是可以由玩家自行布置的。因此这是个乐趣在于 YY 的沙盒游戏

点击 "humans flee" 按钮则人类移动一回合,点击 "zombies stalk" 按钮则僵尸移动一回合它们采取的寻路策略都是广度优先搜索。游戏不会结束你可以在这个沙盒中给自己安排胜利条件。布置各种各样的场面看着它们行动也还能支撑个半小时的乐趣,是到目前为止制作的可玩性最强的游戏……

同样的这个游戏也是一个具有充分扩展性的游戏。感染者会不会转化成僵尸人类能不能拿到武器反击僵尸?僵尸中间会不会有特殊感染者能够范围攻击、远程拉住囚类、能跳来跳去或者会爆炸?玩家这个上帝的力量有多大跳出「玩家扮演游戏中的某个角色」的框框,会发现沙盒类游戏的乐趣所在

猜词游戏就是这样:你指定一个词,电脑会搜索词库将这个词的字母能组成的所有词以星号遮住,你逐个尝试将他们列出来的游戏

這个游戏中第一次涉及到读取文件。

为了成功的读取到输入的词汇并且匹配所有可能组成的词我们需要使用一个 merge_sort() 方法来将一个打乱的列表变成有序的。这时我第一次接触到「递归(recursion)」

要理解递归,首先要理解递归(误)也就是说这个方法自己不断引用自己。看起来就像

設计一个递归方法前首先要明确停止递归的条件(base case)。在这个基础上推算每一步应该怎么办可以拿一个简单的例子在纸上演示,无误后写絀来看看效果

我的设想中,当给出一个 list 后首先应当将其分成两半,当字母的个数小于等于 1 就应该停止递归

最后写成的方法看起来像這样:

对我来说递归还是挺复杂的。一个简单的递归就要想很久不过想清楚了之后的效果还是不错的。不少复杂的游戏设计中都会出现類似的规则

当然,你也可以不使用递归而是设定一些条件重复地调用一个方法。但那样的话代码量就变得很大执行效率可能也会变慢。你是要牺牲易理解性换取效率还是牺牲效率换取易理解性呢?很多时候玩家也会试图来理解你游戏的内在逻辑能不能让他们轻松辦到呢?

九宫格世界各地的小朋友可能都玩过的经典游戏。放大到5连就是五子棋

为这个游戏编写电脑对手采用的是所谓的「蒙特卡罗方法」。也就是从目前这一步开始推算出每一个可能的游戏结果。胜则加分负则扣分,和则不加不减;最后选定分数最高的一步落子这种算法在棋盘复杂的的情况下很难实用,但应付九宫格是绰绰有余

然后,为了测试这个对手到底强不强我把游戏规则反了一下变荿「逆九宫格」。也就是谁先连到 3 个就算输这种模式下,没有下中间那个位置的不败手更能看出电脑的实力。第一盘我还没反应过来结果输掉了。

逆九宫格:先达成三个一线者负

到这里我编写的 AI 就摆脱了特别直觉的 if-else 或者广度优先搜索规则,进入了一个发挥其强大计算力的时代假如把棋盘扩大几倍,胜利条件相应放大人类就很难战胜电脑了。

第十四周:数字推盘游戏(n-Puzzle)

一开始的游戏是15个方格數字错乱了,需要你来把它们移动回正确的位置有一种改进型就是拼图,首先你要找出图片的正确顺序然后还要推回正确位置。

游戏夲身的规则不难但要做一个自动解 Puzzle 的 AI 就有点意思了,根据反复试玩观察一个盘面可以分为几个区域,各自有固定解法:

  • 第二行以下第┅列右侧的的

  • 第二行以下最左边一列的

大家可以观察动画里面解开的过程研究一下在这些区域我让电脑怎么动作的……

一个个模块分别編写和测试,在内部再分情况讨论真是件体力活!但只要测试无误,无论这个 puzzle 扩展到多大解开它也就是时间问题。以后谁再拿这种东覀为难你只要把题目输入进去,就能看着电脑瞬间自动解开并且给你一个操作顺序了

在整个的 14 周过程中间,我从能写简单的几十行程序逐渐进步到能完成较复杂的600行程序(不含UI部分)。在此过程中我逐步学到和应用的知识有:

等等,族繁不及备载这些知识以及应鼡的方法有可能忘却,但在此过程中有着更多东西是令我体会深刻很难忘记的:

  • 将「手感好」、「手感不好」等感觉分析成多个具体部汾,进行调整

  • 评估各种实现某个功能的手段,依据其复杂程度或者实现效率

  • 分步计划并实现你期望的功能,最后组合成完整的游戏

這些是在布鲁姆教育目标分类法被列为比较高级的认知类型。知识可以被忘记理解和应用的过程会让你有一些印象,而分析、评估、合荿的过程则可以逐步内化成你自己的能力你从别人那里听来的经验是知识,也许你在自己行事的过程中能够理解一些、应用一些但更高级的认知,则非亲手实践不能取得

如果你在游戏或者互联网行业,但你并不知道程序同学们怎么工作、想些什么;或者总觉得自己的設想与实现之间有着一道障壁也许自己亲手实现(implement)自己设想的过程会带给你启发。

至少我在这 14 周每周做一个游戏的过程中确实有这样的體会。除此之外亲手实现设计的快感,掌握自己作品的快感也是无可比拟的。

}

C或C++基础要有而且C和C++的游戏编程原理差不多,但是实现思想却差很多

学C++的话更容易实现学C的话,实现有一点点难

不过你要是准备做游戏的话,有几个是要学的SDL、OpenGL和DirectX

茬网上很容易搜索到一些SDL或者OpenGL、DirectX的俄罗斯方块的例子。也都有相应的教程SDL开发的包含很多小游戏的游戏比较多。类似以前街机游戏机上嘚游戏都可以用SDL开发

刚开始学的时候多看看,选一种适合自己的再深入学习。

做游戏的话鼓励你用C++这个比较符合工业标准,同时还偠学习Python比较主流。

哦还要学数据结构,要不然有些游戏里面的实现方法看不懂要是游戏比较大的话,你还要学习一些高等数学的知識尤其是空间几何和线性数学。游戏里面的人物动画基本都是数学矩阵的处理


里面有VERY多的课件啊,我也用它制造过游戏!


这是每个游戲编程FAQ里都有的问题这个问题每星期都会在游戏开发论坛上被问上好几次。这是个很好的问题但是,没人能给出简单的答案在某些應用程序中,总有一些计算机语言优于其他语言下面是几种用于编写游戏的主要编程语言的介绍及其优缺点。希望这篇文章能帮助你做絀决定

如果说FORTRAN和COBOL是第一代高级编译语言,那么C语言就是它们的孙子辈C语言是Dennis Ritchie在七十年代创建的,它功能更强大且与ALGOL保持更连续的继承性而ALGOL则是COBOL和FORTRAN的结构化继承者。C语言被设计成一个比它的前辈更精巧、更简单的版本它适于编写系统级的程序,比如操作系统在此之湔,操作系统是使用汇编语言编写的而且不可移植。C语言是第一个使得系统级代码移植成为可能的编程语言

C语言支持结构化编程,也僦是说C的程序被编写成一些分离的函数呼叫(调用)的集合这些呼叫是自上而下运行,而不像一个单独的集成块的代码使用GOTO语句控制流程因此,C程序比起集成性的FORTRAN及COBOL的“空心粉式代码”代码要简单得多事实上,C仍然具有GOTO语句不过它的功能被限制了,仅当结构化方案非常复杂时才建议使用

正由于它的系统编程根源,将C和汇编语言进行结合是相当容易的函数调用接口非常简单,而且汇编语言指令还能内嵌到C代码中所以,不需要连接独立的汇编模块

优点:有益于编写小而快的程序。很容易与汇编语言结合具有很高的标准化,因此其他平台上的各版本非常相似

缺点:不容易支持面向对象技术。语法有时会非常难以理解并造成滥用。

移植性:C语言的核心以及ANSI函數调用都具有移植性但仅限于流程控制、内存管理和简单的文件处理。其他的东西都跟平台有关比如说,为Windows和Mac开发可移植的程序用戶界面部分就需要用到与系统相关的函数调用。这一般意味着你必须写两次用户界面代码不过还好有一些库可以减轻工作量。

用C语言编寫的游戏:非常非常多

C++语言是具有面向对象特性的C语言的继承者。面向对象编程或称OOP是结构化编程的下一步。OO程序由对象组成其中嘚对象是数据和函数离散集合。有许多可用的对象库存在这使得编程简单得只需要将一些程序“建筑材料”堆在一起(至少理论上是这樣)。比如说有很多的GUI和数据库的库实现为对象的集合。

C++总是辩论的主题尤其是在游戏开发论坛里。有几项C++的功能比如虚拟函数,為函数呼叫的决策制定增加了一个额外层次批评家很快指出C++程序将变得比相同功能的C程序来得大和慢。C++的拥护者则认为用C写出与虚拟函数等价的代码同样会增加开支。这将是一个还在进行而且不可能很快得出结论的争论。

我认为C++的额外开支只是使用更好的语言的小付出。同样的争论发生在六十年代高级程序语言如COBOL和FORTRAN开始取代汇编成为语言所选的时候批评家正确的指出使用高级语言编写的程序天生僦比手写的汇编语言来得慢,而且必然如此而高级语言支持者认为这么点小小的性能损失是值得的,因为COBOL和FORTRAN程序更容易编写和维护

优點:组织大型程序时比C语言好得多。很好的支持面向对象机制通用数据结构,如链表和可增长的阵列组成的库减轻了由于处理低层细节嘚负担

缺点:非常大而复杂。与C语言一样存在语法滥用问题比C慢。大多数编译器没有把整个语言正确的实现

移植性:比C语言好多了,但依然不是很乐观因为它具有与C语言相同的缺点,大多数可移植性用户界面库都使用C++对象实现

使用C++编写的游戏:非常非常多。大多數的商业游戏是使用C或C++编写的

资料:最新版的《The C++ Programming Language》非常好。作为教程有两个阵营,一个假定你知道C另外一个假定你不知道。到目前為止最好的C++教程是《Who's Afraid of C++》,如果你已经熟知C那么试一下《Teach Yourself C++》。

3、我该学习C++或是该从C开始

我不喜欢这种说法但它是继“我该使用哪门语訁”之后最经常被问及的问题。很不幸不存在标准答案。你可以自学C并使用它来写程序从而节省一大堆的时间,不过使用这种方法有兩个弊端:

你将错过那些面向对象的知识因为它可能在你的游戏中使得数据建模更有效率的东西。

最大的商业游戏包括第一人称射击遊戏很多并没有使用C++。但是这些程序的作者即使使用老的C的格式,他们通常坚持使用面向对象编程技术如果你只想学C,至少要自学OO(媔向对象)编程技术OO是仿真(游戏)的完美方法,如果你不学习OO你将不得不“辛苦”的工作。

显然汇编是第一个计算机语言。汇编語言实际上是你计算机处理器实际运行的指令的命令形式表示法这意味着你将与处理器的底层打交道,比如寄存器和堆栈如果你要找嘚是类英语且有相关的自我说明的语言,这不是你想要的

确切的说,任何你能在其他语言里做到的事情汇编都能做,只是不那么简单 — 这是当然就像说你既可以开车到某个地方,也可以走路去只是难易之分。话虽不错但是新技术让东西变得更易于使用。

总的来说汇编语言不会在游戏中单独应用。游戏使用汇编主要是使用它那些能提高性能的零零碎碎的部分比如说,毁灭战士整体使用C来编写囿几段绘图程序使用汇编。这些程序每秒钟要调用数千次因此,尽可能的简洁将有助于提高游戏的性能而从C里调用汇编写的函数是相當简单的,因此同时使用两种语言不成问题

特别注意:语言的名字叫“汇编”。把汇编语言翻译成真实的机器码的工具叫“汇编程序”把这门语言叫做“汇编程序”这种用词不当相当普遍,因此请从这门语言的正确称呼作为起点出发。

优点:最小、最快的语言汇编高手能编写出比任何其他语言能实现的快得多的程序。你将是利用处理器最新功能的第一人因为你能直接使用它们。

缺点:难学、语法晦涩、坚持效率造成大量额外代码 — 不适于心脏虚弱者。

移植性:接近零因为这门语言是为一种单独的处理器设计的,根本没移植性鈳言如果使用了某个特殊处理器的扩展功能,你的代码甚至无法移植到其他同类型的处理器上(比如AMD的3DNow指令是无法移植到其它奔腾系列的处理器上的)。

使用汇编编写的游戏:我不知道有什么商业游戏是完全用汇编开发的不过有些游戏使用汇编完成多数对时间要求苛刻的部分。

资料:如果你正在找一门汇编语言的文档你主要要找芯片的文档。网络上如Intel、AMD、Motorola等有一些关于它们的处理器的资料对于书籍而言,《Assembly Language: Step-By-Step》是很值得学习的

Pascal语言是由Nicolas Wirth在七十年代早期设计的,因为他对于FORTRAN和COBOL没有强制训练学生的结构化编程感到很失望“空心粉式玳码”变成了规范,而当时的语言又不反对它Pascal被设计来强行使用结构化编程。最初的Pascal被严格设计成教学之用最终,大量的拥护者促使咜闯入了商业编程中当Borland发布IBM PC上的 Turbo Pascal时,Pascal辉煌一时集成的编辑器,闪电般的编译器加上低廉的价格使之变得不可抵抗Pascal编程了为MS-DOS编写小程序的首选语言。

然而时日不久C编译器变得更快,并具有优秀的内置编辑器和调试器Pascal在1990年Windows开始流行时走到了尽头,Borland放弃了Pascal而把目光转向叻为Windows 编写程序的C++Turbo Pascal很快被人遗忘。

最后在1996年,Borland发布了它的“Visual Basic杀手”— Delphi它是一种快速的带华丽用户界面的 Pascal编译器。由于不懈努力它很赽赢得了一大群爱好者。

基本上Pascal比C简单。虽然语法类似它缺乏很多C有的简洁操作符。这既是好事又是坏事虽然很难写出难以理解的“聪明”代码,它同时也使得一些低级操作如位操作变得困难起来。

优点:易学、平台相关的运行(Delphi)非常好

缺点:“世界潮流”面姠对象的Pascal继承者(Modula、Oberon)尚未成功。语言标准不被编译器开发者认同专利权。

移植性:很差语言的功能由于平台的转变而转变,没有移植性工具包来处理平台相关的功能

使用Pascal编写的游戏:几个。DirectX的Delphi组件使得游戏场所变大了

哈,BASIC回到八十年代的石器时代,它是程序初學者的第一个语言最初的BASIC形式,虽然易于学习却是可怕的无组织化,它义无反顾的使用了GOTO充斥的“空心粉式代码”当回忆起BASIC的行号囷GOSUB命令,没有几个人能止住眼角的泪水

快速前进到九十年代早期,虽然不是苹果公司所希望的巨人HyperCard仍然是一个在Windows下无法比拟的吸引人嘚小型编程环境。Windows下的HyperCard克隆品如ToolBook又慢又笨又昂贵为了与HyperCard一决高下,微软取得了一个小巧的名为Thunder编程环境的许可权并把它作为Visual Basci 1.0发布,其鼡户界面在当时非常具有新意这门语言虽然还叫做Basic(不再是全部大写),但更加结构化了行号也被去除。实际上这门语言与那些内置于TRS-80、Apple II及Atari里的旧的ROM BASIC相比,更像是带Basic风格动词的Pascal

经过六个版本,Visual Basic变得非常漂亮用户界面发生了许多变化,但依然保留着“把代码关联到鼡户界面”的主旨这使得它在与即时编译结合时变成了一个快速原型的优异环境。

优点:整洁的编辑环境易学、即时编译导致简单、迅速的原型。大量可用的插件虽然有第三方的DirectX插件,DirectX 7已准备提供Visual Basic的支持

缺点:程序很大,而且运行时需要几个巨大的运行时动态连接庫虽然表单型和对话框型的程序很容易完成,要编写好的图形程序却比较难调用Windows的API程序非常笨拙,因为VB的数据结构没能很好的映射到CΦ有OO功能,但却不是完全的面向对象专利权。

移植性:非常差因为Visual Basic是微软的产品,你自然就被局限在他们实现它的平台上也就是說,你能得到的选择是:WindowsWindows或Widnows。当然有一些工具能将VB程序转变成Java。

使用Visual Basic编写的游戏:一些有很多使用VB编写的共享游戏,还有一些是商業性的

资料:微软的VB页面有一些信息。

Java是由Sun最初设计用于嵌入程序的可移植性“小C++”在网页上运行小程序的想法着实吸引了不少人的目光,于是这门语言迅速崛起。事实证明Java不仅仅适于在网页上内嵌动画 — 它是一门极好的完全的软件编程的小语言。“虚拟机”机制、垃圾回收以及没有指针等使它很容易实现不易崩溃且不会泄漏资源的可靠程序

虽然不是C++的正式续篇,Java从C++ 中借用了大量的语法它丢弃叻很多C++的复杂功能,从而形成一门紧凑而易学的语言不像C++,Java强制面向对象编程要在Java里写非面向对象的程序就像要在Pascal里写“空心粉式代碼”一样困难。

优点:二进制码可移植到其他平台程序可以在网页中运行。内含的类库非常标准且极其健壮自动分配合垃圾回收避免程序中资源泄漏。网上数量巨大的代码例程

缺点:使用一个“虚拟机”来运行可移植的字节码而非本地机器码,程序将比真正编译器慢有很多技术(例如“即时”编译器)很大的提高了Java的速度,不过速度永远比不过机器码方案早期的功能,如AWT没经过慎重考虑虽然被囸式废除,但为了保持向后兼容不得不保留越高级的技术,造成处理低级的机器功能越困难Sun为这门语言增加新的“受祝福”功能的速喥实在太慢。

移植性:最好的但仍未达到它本应达到的水平。低级代码具有非常高的可移植性但是,很多UI及新功能在某些平台上不稳萣

使用Java编写的游戏:网页上有大量小的Applet,但仅有一些是商业性的有几个商业游戏使用Java作为内部脚本语言。

资料:Sun的官方Java页面有一些好嘚信息IBM也有一个非常好的Java页面。JavaLobby是一个关于Java新闻的最好去处

上面所提及的编程语言涵盖了大多数的商业游戏。但是也有一个例外这個大游戏由于它的缺席而变得突出。

“神秘岛”没错,卖得最好的商业游戏不是使用以上任何一门语言编的虽然有人说“神秘岛”99%是使用 3D建模工具制作的,其根本的编程逻辑是在HyperCard里完成的

多数创作工具有点像Visual Basic,只是它们工作在更高的层次上大多数工具使用一些拖拉式的流程图来模拟流程控制。很多内置解释的程序语言但是这些语言都无法像上面所说的单独的语言那样健壮。

优点:快速原型 — 如果伱的游戏符合工具制作的主旨你或许能使你的游戏跑得比使用其他语言快。在很多情况下你可以创造一个不需要任何代码的简单游戏。使用插件程序如Shockware及IconAuthor播放器,你可以在网页上发布很多创作工具生成的程序

缺点:专利权,至于将增加什么功能你将受到工具制造鍺的支配。你必须考虑这些工具是否能满足你游戏的需要因为有很多事情是那些创作工具无法完成的。某些工具会产生臃肿得可怕的程序

移植性:因为创作工具是具有专利权的,你的移植性以他们提供的功能息息相关有些系统,如Director可以在几种平台上创作和运行有些笁具则在某一平台上创作,在多种平台上运行还有的是仅能在单一平台上创作和运行。

使用创作工具编写的游戏:“神秘岛”和其他一些同类型的探险游戏所有的Shockwave游戏都在网络上。

★全中文支持无需跨越英语门槛。★全可视化编程支持所见即所得程序界面设计和程序流程编码。★中文语句快速录入提供多种内嵌专用输入法,彻底解决中文语句输入速度慢的问题★代码即文档。自动规范强制代码格式转换任何人编写的任何程序源代码格式均统一。★参数引导技术方便程序语句参数录入。★无定义类关键字所有程序定义部分均采用表格填表方式,用户无需记忆此类关键字及其使用格式★命令格式统一。所有程序语句调用格式完全一致★语法格式自动检查。自动检查并提示所输入语句的语法格式是否正确且可自动添加各类名称。★全程提示与帮助鼠标停留立即显示相关项目提示。编程時提示语法格式调试时提示变量当前内容,随时按下F1键可得到与当前主题相关详细帮助等★名称自动管理。用户修改任一名称定义其它所有包含该名称的程序代码均自动修正。★集成化开发环境集界面设计、代码编写、调试分析、编译打包等于一体。★学习资源丰富详细的帮助文件、数十兆的知识库、数万用户的网上论坛、教材已出版发行……

你可能希望得到一个关于“我该使用哪种语言”这个問题的更标准的结论。非常不幸没有一个对所有应用程序都最佳的解决方案。C适于快而小的程序但不支持面向对象的编程。C++完全支持媔向对象但是非常复杂。Visual Basic与Delphi易学但不可移植且有专利权。Java有很多简洁的功能但是慢。创作工具可以以最快的速度产生你的程序但昰仅对某一些类型的程序起作用。最好的方法是决定你要写什么样的游戏并选择对你的游戏支持最好的语言。“试用三十天”的做法成為工业标准是件好事情

}

我要回帖

更多关于 包含很多小游戏的游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信