什么是“赢得你的翅膀”的好游戏?

我相信为了成为一名优秀的游戏开发者,你需要制作游戏。

程序员的angular度来看 ,有什么好的入门级游戏让你的手变脏? 这些游戏每个教给你的技能和挑战是什么?

爆发

简单的游戏,因为你没有太多的状态担心(这是一个砖值的数组 – 如果你只有一个砖的颜色,这是一个标志数组),没有任何AI,你可以做一个一点点的物理,让球正确地反弹。

接龙

这个规则比Breakout稍微复杂一些,而且它的接口有很大的不同。 它迫使你考虑实现游戏的不同方法。 即在一个游戏中有效的东西不一定会在另一个游戏中使用。

吃豆人

这一个很好,因为你有一点AI的工作。 让鬼魂跟随玩家(但不是太好 – 你希望玩家有机会)可以很快实现,你会有一个有趣的小游戏,你可以调整和炫耀给朋友和家人(积极的反馈总是当你开始时是一件好事)。

我发现,如果你在早期的video游戏中寻找灵感,你会发现很多实现相对简单的想法。 另外,你可以摆脱超级简单的艺术品和声音,因为你正在复制一些如此简单的东西。 这使您可以将注意力集中在基本知识上 – 让您的游戏循环运行,找出如何让您的像素在屏幕上,播放声音,保持分数,让玩家的input进入游戏。

你首先select哪一款游戏几乎是无关紧要的 – 只要确定你select了一些简单的方法,就可以得到快速的结果,这样你就可以在第二天再进行一次。 而另一个。 而另一个 – 你做得越多,你就会越逼近自己,最终在你知道之前你就会做出复杂的游戏。

我强烈build议新手程序员应该从他们真正想写的最简单的游戏开始。 正如Matt Rix所提到的,写一个游戏和一个演示程序的很大一部分是把这个该死的东西推到完成 – 学分,菜单,游戏testing,高分,暂停,游戏testing,难度级别,清洁游戏状态转换,玩testing等等。这些东西至less需要一半的时间才能放入,而这并不好玩。 事实并非如此。 所以除非你喜欢这个概念,而且真的有动力,否则在游戏开始之前,你会放弃并继续前进。

如果你想写一个angular色扮演游戏,找出你想要做的最简单,最易于pipe理的angular色扮演游戏概念。 如果你想要做一个科幻射击游戏,恐怖主义游戏,或者其他任何东西,也是一样。 select一些你会完成的事情,在完成一切有趣的事情之后,你仍然会想要完成,但是在你完成之前,你仍然在看着几十个小时的工作。

最好的游戏“赚你的翅膀”? 你完成的那个。 我不在乎你写了多less半PONG / Breakout / Galaga / Tetris演示,除非你发布了一个完整的游戏,否则你不是游戏开发者。

另外,没有人愿意玩那些40年前的游戏的另一个版本,至less有一些写作游戏的点是供人玩的 ,对吧?

前段时间,我在TIGsource上发布了这个阶梯。 它从非常基础到非常复杂。

  • “猜数字”/ Hang子手 (基本界面,从数据库中select数据)
  • 井字游戏/岩石剪刀 (回合制游戏,对手AI)
  • 打砖块/庞 (碰撞,稳定的帧率,分数,水平)
  • 俄罗斯方块 (数据结构以及它们如何与游戏相关)
  • 1942年射击 (敌人,子弹)
  • 简单的一些平台游戏/弹球游戏,如果你的引擎做平台游戏 (基于重力的碰撞)
  • 炸弹人/吃豆人 (基于瓦片的运动,复杂的敌人AI)
  • 任何上述types的双人游戏 (两个玩家input)
  • Roguelike /暗黑破坏神 (库存pipe理,多个敌人AI,保存和加载复杂的游戏状态)
  • Faceball / Wolfenstein 3D (基本的3D运动和渲染)
  • networking回合制游戏 (基础networking)
  • 花哨的3D第三人平台游戏 (物理,复杂的三维运动)
  • networking实时游戏 (客户端 – 服务器同步,滞后)
  • MMORPG (持久世界)

学习游戏编程最重要的规则:学习编程很难。 学习游戏devise很难。 学习如何制作出好的游戏艺术或audio很难。 试图同时做所有这些事情是失败的秘诀。 一次学习一件事。

推论:devise一个devise,艺术和声音已经完成的游戏。 制作克隆,而不是原创游戏。

在我的课堂上,我总是推荐这些游戏开始,为了:

1)俄罗斯方块。 艺术是彩色的矩形,即使是全部的klutz都可以在Microsoft Paint中绘制。 你不需要声音。 编程相对简单,但仍然需要一些关键的东西:了解内部游戏状态和屏幕上绘制的内容之间的差异; 能够画在屏幕上,期间(可能涉及精灵和blitting); 能够实时接受用户input,而不是仅仅使用getch()或scanf()来等待它们。

2)突破/打砖块。 艺术仍然是彩色的矩形,你仍然不需要声音。 使用俄罗斯方块的所有基本概念,加上一些基本的碰撞检测和二维物理学,因为球必须移动和平稳地跳动。

3)Gradius / R型。 你也许可以find一些免费的瓦片集来做到这一点。 这里的背景是滚动的,所以你必须学习更多关于graphics内存如何工作,使用像翻页和双缓冲技术以及在可视屏幕边界之外绘制东西。 你也往往有dynamic的敌人和子弹产生,所以你需要学习清理自己(即摆脱离开屏幕的敌人和子弹,所以你的游戏不会像筛子泄漏内存)。

4)超级马里奥兄弟类似于以前的滚动项目,除了滚动现在在播放器控制下,而不是自动的。 你还必须处理重力以及所有与之相关的有趣的碰撞事物(比如不会因为你在最后一帧上面几个像素而掉下地板,而想在下一帧中移动到几个像素点)。 另外请注意,引力是有条件的:它会影响玩家和一些敌人,但通常不是平台或浮动硬币或其他,这与现实世界有点不同。

如果你能做到所有这四个,你应该可以做任何你想要的2D游戏; 所有的工具都在那里。 如果你想制作一个3D游戏…首先学习2D,因为它更容易,你不需要深入了解math,你需要了解二维的东西…然后当你舒服,开始使用一些基本的3D工具(无论是像扭矩或统一的图书馆,或像原来的末日和地震的开源游戏)。

祝你好运!

现在这是一个很好的问题。 我不知道你在哪里,所以我会摇摆不定,假设你从来没有写过一行代码。 切掉鼻子的任何部分冒犯你,滥用一句话。

我想我实际上会回答一个与你所问的问题稍有不同的问题,我将举例说明你问的问题。 我这样做的原因是轻微的,但是我相信在观点上有显着的不同:与具体的游戏无关,就像游戏给devise师带来的心态一样。

你知道人们如何谈论你应该学习各种编程语言,以便吃掉他们的思维方式,他们的心灵和肝脏,从而获得他们强大的力量? 有一个真实的事实 – 在你的第一个纯粹的或接近纯的编程语言之后,甚至在命令式语言中,你最终会写很大的副作用的免费函数,因为它们定义得非常好,而且你写的所有东西即使不是这种forms的语言也会更好。 Haskell,ml / ocaml / smlnj,formulaONE,c ++模板什么的都不是特别的问题 – 你仍然要学习如何在不依赖效果状态的情况下做很多类的工作。 第一次你学习一个粗糙的,靠近机器的编程语言,你将会学习大小types抽象。 第一次你学习一个声明性或约束性语言,你将会学习作为一个任意的工具的边界。 你第一次学习回溯search语言,你会学习祈祷Ia! IA! C'thulhu F'tagn Nagn !,然后我们又回到吃了心脏和肝脏,生命的圆满了。

游戏devise也不例外。 你不一定需要学习任何特定的游戏,通过与特定的语言平行,而是学习一些处理这种思维方式的象征性代表游戏,如语言特征族。 此外,还有很多吃肝脏和心脏。 得到一个胡椒cookies。

这里的堵嘴(至less我是这么看的)是你想要涵盖一大堆主题。 这就像在angular色表上勾选熟练的人物 – 你正在为自己提供更多的机制来处理特定的情况。 是的,他们是平等的,但是在一切事情上都有一两分之一的意思,那么当你需要使用一个时,你并不是从头开始,而是知道有什么策略可用让你按比例放大。

所以,看。

首先,你要切开你的牙齿。 当你学习定位一个新的平台,或者当你从失忆中恢复的时候,这些也是有用的。 这些是为了快速,而不是真棒。

为了:

  1. 屏幕控制。 蓝屏是伟大的,因为那么你有充分的理由相信你正在成为微软。
  2. inputvalidation。 Fooscreen,foo是蓝色的,红色是down的,等等。 有足够的颜色,或者你可以用四色地图,如果你绝对需要保存深红色的更重要的东西。
  3. 文本和精灵呈现。 既然你也有inputvalidation,平铺内存游戏不是一个坏主意。
  4. 计时器。 时间马里奥克隆或打砖块。
  5. 声音和音乐。 改进马里奥克隆。 虽然不多。

一旦你有了这些,你已经准备好瞄准一个平台,并可能开始学习。

这些没有特定的顺序。 你可以重新排列它们,只要你认为合适。 我将会举几个例子,但它们不是规范的。 如果不同的游戏给你相同的体验,并且足够小,可以成为一系列课程的一部分,那么可以自由交换。由于实际的原因,精通屏幕渲染和input相对较快是件好事。 你会用很多。 在尝试编写抽象类之前等几个游戏; 你不想陷入天真的抽象。

  • animation。 几乎所有你可以调用的animation精灵。 获得一个独立的animation引擎,即使它是程序员的艺术。 制作一个简单的益智游戏,其瓦片悸动是足够的。
  • 复杂的得分。 让所有五个敌人在一个机翼? 奖金。 连续三拳? 奖金。 通过整个水平,而不会错过子弹? 巨大的奖金。
  • 寻找path。 很多游戏需要这个,但塔防游戏是最简单的。 如果你以前从来没有做过,你可以先从宽度优先和深度优先入手,但是直到你从头开始实现A *(至less一次),你才能做到。
  • 敌人的行为。 愚蠢的自动行为将由你的马里奥覆盖,但被动行为也很重要。 这是一个很好的借口来build立一个战术游戏或roguelike。 (警告:你将终生为roguelike工作。)
  • dynamic二维照明。 这也是写一个roguelike的好理由。 基于弧的阴影投射是查看条带和分离的重要方法,这对于大量数据结构而言是重要的。
  • 2d物理学。 这在很多游戏中都有很多细节。 尝试一个可以超级简化的游戏机(mario-ish) 坦克游戏(焦土),它可以同样简化; 最后,像N忍者这样的游戏,可以让你应付angular度,动量等等(你可以用一个轴alignment的包围盒碰撞系统来做到这一点)。物理和碰撞是非常密切相关的。
  • 碰撞检测。 有一些非常简单的例子,比如网格打砖块和马里奥克隆,像N忍者这样中等复杂的例子,以及像沙箱物理游戏(令人难以置信的机器,像BreakQuest等现代打砖块游戏)这样的真正复杂的例子。像AABB这样的东西,但是如果你有math倾向,实际上可以实现一些完整的东西。 至less要熟悉一个完整的库,如APE或Box2D。
  • 游戏玩法满意度中的风险/回报关系。 简单的骰子游戏(从五十年代开始挖掘一些名为“臭鼬”的东西)和风险path(生活,糖果)棋盘游戏就是通过简单快速的方法来学习这个游戏的好例子。
  • 力学的performance力的变化。 把自己归结为一些小规则,然后学会从中得到很多变化。 自定义纸牌游戏是一个很好的方式来处理这个; 看看德沃夏克甲板,以及像Mille Bornes,Rage和Uno这样的真实世界的游戏,然后制作一些你自己的游戏。 他们不会相似。
  • 生成的内容。 简单的基于地图的战略游戏,roguelikes和一些types的益智游戏是学习这样做的好方法。 奖励积分,如果它是一种游戏,通常不知道已经产生的内容。
  • 样式。 不要乱搞:这是一个大问题。 制作一个游戏,然后将它变成四个完全不同的游戏。 真的不一样。 一个孩子的游戏,甚至。 (想一想:作为一个巫师冒险进入地狱,或者从X战警的盗贼,或者… …),巨人完美无缺。现在,让四组人分别在你的游戏中得分。 之后,让他们在下一场比赛中逆时针,环绕等等。 请注意,他们的得分根据主题和预期的预期发生了根本的变化。
  • 制定玩家计划序列。 益智游戏是这种最干净的方式。
  • 资源pipe理
  • 升级
  • 抬高时间压力

呃。 我无聊。

俄罗斯方块

非常常见的游戏,如果你遇到困难,很多开源的克隆都会被撕裂。 讲授2Dgraphics的基础知识,input处理,评分等。

然后采取这个原创的想法,并把它旋转。 我通过在大学为我的计算机graphics学课程写了一个3D版本的俄罗斯方块 ,学习了3Dgraphics/ opengl的基础知识。

GameDev.net有一篇很好的文章,推荐一系列游戏来逐步了解游戏开发。 我从列表中最喜欢的build议是实际擦亮这些游戏。 完全完成,到一个可释放的状态。

清单如下(其中一些已在其他答案中给出):

  1. 俄罗斯方块
  2. 爆发
  3. 侧面滚轮/平台游戏

我喜欢用大富翁开始我所有的人。 我通常使用Brett Schuchert的专利“code kata”作为练习的基础,但是我增加了很多。 有几个原因,我真的很喜欢这样做。

  1. 我非常关心优秀的编程实践(devise模式,TDD,SOLID,持续集成等),并且在开发人员进行这些练习时对开发人员施加了很多限制。

  2. 几乎每个人都知道垄断的规则,整个游戏可以在一天内完成。 这给了新的开发者一个快速的胜利,并真正得到他们的接触。

  3. 最初的要求从键盘控制开始,但是之后我添加了对鼠标控制的要求。 这让开发人员思考几件事,如何重构现有的代码,将系统的变化部分编程为接口而不是具体的类,更好/适当的抽象,unit testing什么,unit testing什么,为什么unit testing以及什么使好的unit testing。

有时我们插入更复杂的AI,有时候我们没有。 有时候我们会和其他棋盘游戏一起工作,比如Chutes和Ladders等稍复杂的逻辑。 有时我们完全摆脱棋盘游戏,做一个扑克游戏或二十一点。

对于我来说,真正重要的一点是人们可以快速获得胜利,而且他们看到,如果遵循良好的编程标准,您可以灵活地制作软件。 这些练习非常快速地build立信心。 有时候,更有经验的开发人员喜欢独立完成这些工作,只是为了从更复杂的项目中解脱出来,或者练习刚刚学到的新技术(德米特法则)。

select-您的冒险

从一个通过创build游戏开始编程的朋友那里得到了这个技巧,类似于select你的冒险书 。 它基本上是一个简单的文字冒险游戏,输出如下:

You are standing in a forest clearing in the middle of the night. You hear some wolves howl in the distance. Should you: a) make camp for the night b) go further north > _ 

制作这样的游戏应该教你制作一个游戏循环,基本的控制台input和基本的脚本。 由于不需要graphics引擎来编写游戏,因此实现起来相当容易,初学者也可以轻松进入。 高级的初学者可能会写一个脚本引擎。

在我的新手程序员的经验中,进展通常似乎是这样的:

  1. 俄罗斯方块
  2. 巨大的惊人的真棒50小时的游戏3Dangular色扮演游戏(注意:大多数人放弃编程的一部分,通过这一步)

突围,傍,或小行星。

游戏游戏原型之间有巨大的差异。 如果你真的想要完成你的梦想游戏,那么你应该一路完成你的“入门级”游戏。 创造游戏的游戏部分只是战斗的一半。 所有额外的东西,如菜单和高分常常被忽略或忽视,但是它们比任何人所期望的要多得多。

在其他答案中有一些很好的build议,但我只是想在我的投票中折腾一下:从一些看起来太小的事情开始处理。

Pong就是一个很好的例子。

其目标是:使游戏devise和规则集如此大脑死亡,以便将所有的注意力集中在学习你正在学习的新事物(语言,平台,API)上,而不必一直rest一下,弄清楚游戏是如何工作的。

一旦你走了,你会发现pong实际上比第一眼看上去要复杂得多。 (我正在教一个人编程,他把pong当作他的学习项目,我们增加了一些function,现在他正在学习编程,分心学习如何做所有这些很酷的function:)

一旦你完成了应用程序#1,直到它准备好给他人/卖给其他人, 那么就会有一些更复杂的东西(俄罗斯方块,冒险或任何你喜欢的东西),但是,开始学习一项新技术,使你编程脑死简单的事情。

其他例子:

  • 猜数字(在1和1000之间)
  • Mastermind(高级猜数字)
  • SimplePaint
  • 蛇/蠕虫/任何你呼叫它。

但是,再次 – 从一些太方便的事情开始,这样你就可以完成一些事情,然后回头看看所涉及的内容。 在语言/平台/ SDK /引擎中写入ONE应用程序和写入ZERO应用程序之间的区别是巨大的 。 1和2或者2和5之间的差别要小得多,所以你可以采取更大的步骤,但是使0到1步是一个小小的步骤。 它会比你想象的更大!

看看这个网站: 12计算机科学游戏项目的想法

这些游戏中有些包含了其他人所说的内容:

  1. 吃豆子
  2. 俄罗斯方块

但是它也谈到了一些你可以尝试的其他游戏,例如:

  1. 井字棋
  2. 谁愿意成为百万富翁?
  3. 和一个马里奥克隆。

此外,它还让你了解你应该先做什么,因为它给每个游戏带来了困难(因此你应该如何处理游戏)。

  1. 初学者
  2. 中间
  3. 高级
  4. 最好

很多人从Breakout开始,因为它具有以下特点:

  • input:来回移动桨
  • 简单的碰撞:从桨,砖和墙上反弹的球
  • 改变“游戏状态”:当球击中砖块并移除砖块时更新得分,当球击中屏幕底部时减less球的数量,当球的数量为0时丢失游戏等等。
  • 这也是一个相当温和的介绍graphics,因为它是所有的矩形和圆形

编写一个游戏最困难的部分 – 或者任何软件 – 都在搞清楚该怎么做。 你绝对需要一个规格! 这是制作一个现有游戏的克隆有趣的部分:规范已经存在。 你的规格是“产品必须做其他产品所做的一切”,如果你手头上有其他游戏的副本,那么很容易validation。

一旦你已经知道你需要做什么,如果你是一个称职的程序员,搞清楚怎么做并不是那么困难。 我不是指熟练或有经验的程序员, 这意味着你已经知道如何去做大部分你正在做的事情。 但是,您需要了解如何在抽象思维方面进行思考,并具有解决问题和逻辑思维能力,这对编程至关重要。 如果你能做到这一点,那么你可以做任何事情。

话虽如此,我不同意大多数人所说的关于通过写一些非常简单的东西来学习写游戏。 奖励与你付出的努力成正比。 如果你通过写一个非常简单的游戏来学习写游戏,那么最后你会知道如何编写真正简单的游戏,而这对你来说并不是很好。

另一方面,如果你开始压倒一切,你永远不会完成它。 所以,从适度的挑战开始,这将使你处理严重的问题。 构build一个2D控制台式的RPG或者一个侧面滚动的游戏平台是学习真实游戏编程概念的好方法。

这真的取决于你目前的能力是什么。 如果你对编程相对来说比较陌生,那么就去参加人们build议的特定游戏之一吧。 否则,你应该考虑什么样的游戏可以让你的经验得到充分利用。

当我开始我的第一场比赛时,我没有游戏开发经验,但是我已经做了几年的企业/业务线应用程序开发。 我的第一个游戏项目是一个基于回合的战略游戏,从架构的angular度来看,它和企业应用程序没有什么不同。 它使用客户端/服务器系统,通过双工WCF服务通道进行通讯。 大多数玩家的操作都是按照“命令”排队,并在回合结束时发送给服务器。 所有的交易处理都在服务器上进行,之后将游戏宇宙更新发送给每个客户端。

这个第一个项目让我在进入游戏开发的同时,开始了我熟悉的领域。 随着项目的发展,我学会了更像一个游戏开发者,更像一个企业应用程序开发人员。 最终的结果performance相当不错,比战舰或井字棋更令人印象深刻:)。

啃咬 空间侵略者

相对简单的人工智能,graphics,游戏,控制,他们没有声音效果或音乐,除非你想添加。我开始与这两个时学习如何在MS-DOS的QBasic编程,我认为他们是伟大的第一场比赛。 吃豆人将是我的另一种select。

像Galaga这样的自上而下的空间射手很容易,并且相当好地教导碰撞检测! 它也可以在难度上有所不同,从固定敌人的水平,到武器升级的多个等级,以特殊模式移动的敌人。

月球人风格的游戏是伟大的(你有一个受重力影响的飞船,玩家控制方向和推力,使用推力时燃料有限)。 获得实现非常简单的物理和碰撞系统的经验可能是相当原始的。 没有AI担心,最重要的是它的乐趣和上瘾:)

就像Gau刑一样,因为你需要一个实体系统,敌人的AI,皮卡,瓦片地图,碰撞检测,得分等等。这是一切,但不是以压倒性的方式。

一个迷你塞尔达克隆是好的,并锻炼了一些这里没有提到的技能。 滚动瓷砖和简单的8路运动控制大地图是很好的知道。 如果你可以做敌人,奖励点,但我不会太担心。

我做了几个俄罗斯方块克隆。 每一次我做了它,但我做了一点点不同。 现在,我通常会做一些types的小行星克隆。 我也做了不止一些导弹指挥部的副产品。

我已经开始了基本的游戏玩法,而不是增加更多的东西,电源ups等等。

我总是用坦克/大猩猩/蠕虫的游戏开始。 它让你在简单的graphics显示中进行练习,阅读用户input,加上一个游戏循环,对弹丸施加重力并进行碰撞检测testing。

之后会有一个游戏就像一个非常简单的平台游戏或射击游戏,你需要实时读取用户input,而不是大猩猩的INPUT语句:)

纸牌(或真的任何纸牌游戏)是一个很好的游戏,让你的手与新的UI系统弄脏,因为它锻炼了很多你需要使用的小部件和控制器交互反馈机制。 再加上它的逻辑简单明了,所以你可以专注于学习,而不是那么多的游戏devise。

对于实时模拟游戏,我总是推荐Pong作为一个很好的简单的起点,再次因为devise是简单的,以及控制器界面,所以你可以得到系统的肉 – 物理模拟。

我一直认为,如果你是一名游戏程序员,你应该能够制造某种forms的太空侵略者 。 哎呀,游戏很简单,你应该也可以自己做graphics。

例如,如果我正在学习一门新的编程语言或框架,那么在你的投资组合中select一些小游戏就会带来额外的好处,我会经常移植我的一个简单的游戏来看看新的方式做的事情跟原来的写法一致。

我会说一个塔防类游戏是最好的开始。 你也可以从现有的游戏/引擎(WarCraft III / HalfLife2 SDK /等)开始,以了解所需的总体逻辑,然后继续使用自己的代码库。

这真的取决于你已经拥有的常规程序员的技能。 你的math需要工作吗? 你的graphics知识? 你有两个包装?

虽然总的来说,我认为俄罗斯方块和Breakout也是我的两个首发。 比这更容易的事情不能提供足够的刺激。 俄罗斯方块是一个很好的testing如何布局你的数据阿尔戈,突破是一个轻松的math例子。 我总是告诉人们瞄准高,目标是卡住,并提出一个解决scheme。

之后,天空的极限。 再次,瞄准高。 尝试一个倾斜的地形plaraformer,parralax,你得到了一个好的包,二维科技方便。 添加一个弹球(准备沮丧),你的math将提高。

从那里进入第三个层面,学习核心技能(animation,渲染),你应该有相对较好的装备来处理各种各样的游戏。

我的第一场比赛就像超级马里奥。

四处走动,避开障碍,跳跃。 所有这些任务可以很容易地完成,没有任何物理计算。

理想的做一个简单的2D事物,因为你不会太依赖于一个特定的实现/框架/引擎。