Answers:
爆发
轻松进行游戏,因为您无需担心太多状态(这是一堆砖值-如果您只有一种砖颜色,则是一串标志),没有任何AI,因此您可以一点物理原理就能使球正确反弹。
纸牌
规则比Breakout复杂一点,并且与它的接口也有很大不同。它迫使您考虑实现游戏的不同方法。也就是说,在一种游戏中起作用的不一定是在另一种游戏中使用的。
吃豆人
这很不错,因为您可以从事一点点AI的研究。让幽灵跟随玩家(但不是太好-您希望玩家有机会)可以很快实施,并且您将拥有一个有趣的小游戏,您可以对其进行调整并向朋友和家人炫耀(总是会有积极的反馈)一开始就是一件好事)。
我发现,如果您在早期的视频游戏中寻求灵感,就会发现大量相对容易实现的想法。另外,因为您仍在复制如此简单的内容,所以您可以摆脱超简单的图稿和声音。这使您可以首先专注于基础知识-启动并运行游戏,弄清楚如何将像素显示在屏幕上,播放声音,保持得分,并让玩家输入到游戏中。
首先选择哪种游戏几乎没有关系-只需确保选择简单的内容即可快速获得结果,这样您就可以在第二天继续前进并制作另一个。还有一个。还有一个-您制作的越多,您就会越努力,最终您将在不知不觉中制作复杂的游戏。
我强烈建议新手程序员应该从他们实际想写的最简单的游戏开始。正如马特·里克斯(Matt Rix)所提到的,编写游戏与演示的过程很大一部分将可恶的事情推向了完成-积分,菜单,游戏测试,高分,暂停,游戏测试,难度,干净的游戏状态转换,游戏测试等。这些东西至少要花一半的时间,而且不好玩。不是。因此,除非您喜欢这个概念并且真正有动力,否则您将在游戏成为游戏之前放弃并继续前进。
如果你想编写一个RPG游戏,找出最简单,最易于管理的RPG概念,你可以拿出你想做的事,做它。如果您想做一个科幻射击游戏,或一个恐怖主题的平台游戏,或者其他任何事情,都可以。选择您将要完成的事情,在完成所有乐趣之后您仍然希望完成,但是您仍然需要花费数十个小时才能真正完成。
最好的游戏来“赢得翅膀”?您完成了一个。我不在乎您编写了多少半PONG / Breakout / Galaga / Tetris演示,在发布实际完成的游戏之前,您不是游戏开发者。
另外,没有人愿意再玩那些已有40年历史的游戏,至少编写游戏的某些要点是让人玩的,对吧?
不久前,我在TIGsource上发布了此阶梯。它从非常基础到非常复杂。
学习游戏编程的最重要规则是:学习编程很难。学习游戏设计很难。学习如何制作出色的游戏美术或音频非常困难。尝试同时做所有这些事情是失败的秘诀。一次学习一件事。
推论:对已经完成设计,美术和声音的游戏进行编程。制作克隆,而不是原始游戏。
在我的课程中,我总是建议开始以下游戏:
1)俄罗斯方块。艺术是彩色矩形,即使是全部klutz都可以在Microsoft Paint中绘制。您不需要声音。编程相对简单,但仍需要一些关键事项:了解内部游戏状态与屏幕上绘制的内容之间的差异;能够在屏幕上绘制周期(可能涉及精灵和斑点);能够实时接受用户输入,而不仅仅是在需要等待它们的地方使用getch()或scanf()。
2)突围/打砖块。艺术品仍然是彩色矩形,您仍然不需要声音。使用了俄罗斯方块的所有基本概念,加上一些基本的碰撞检测和2D物理原理,因为球必须平稳地移动和弹跳。
3)毕业/ R型。您可能可以找到一些免费的tileset来完成此任务。这里的背景是滚动的,因此您必须使用页面翻转和双缓冲以及在可见屏幕边界之外绘制内容等技术,进一步了解图形内存的工作方式。您还往往会产生动态的敌人和子弹,因此您需要学会自己清理(即摆脱掉留在屏幕上的敌人和子弹,以免游戏像筛子那样泄漏内存)。
4)超级马里奥兄弟(Super Mario Bros)与上一个滚动项目类似,不同之处在于,滚动现在是在播放器控制之下,而不是自动的。您还必须处理重力以及随之而来的所有有趣的碰撞(例如,由于您在上一帧中位于上方几格,并希望在下一帧中移至下方几像素而不会掉落地板) )。还要注意,重力是有条件的:它会影响玩家和一些敌人,但通常不会影响平台或浮动硬币或其他东西,这与现实世界有些不同。
如果您能做到所有这四个,那么您应该几乎可以做任何您想要的2D游戏。所有工具都在那里。如果您想制作3D游戏,请先学习2D,因为它非常容易,您不需要深入地了解数学,也无论如何都需要了解2D内容...然后当您为此,请开始使用一些基本的3D工具(例如Torque或Unity之类的库,或原始Doom和Quake之类的开源游戏)。
祝好运!
现在,这是一个实际的好问题。我不知道你在哪里,所以我要飞向天空,并假设你一生中从未编写过任何代码。砍掉鼻子的任何部位,冒犯您的意思。
我想我实际上要回答的问题与您提出的问题略有不同,并且我将举例说明以满足您就地提出的问题。我这样做的原因是轻微的,但我认为观点会有很大的不同:重要的不是特定的游戏,而是这些游戏带给设计师的思维方式。
您知道人们谈论您时应该如何学习各种编程语言,以便吃饱他们的思维方式,内心和肝脏,从而获得强大的力量吗?这是一个真实的事实-在您使用第一门纯净或近乎纯净的编程语言后,即使是在命令式语言中,您也将最终编写很大程度上副作用免费的函数,因为它们的定义要好得多,并且您编写的所有内容即使不是这种形式的语言也会更好。不管是哪种语言,它都没关系-haskell,ml / ocaml / smlnj,FormulaONE,c ++模板,无论如何-您仍将学习如何在不依赖副作用状态的情况下完成许多工作。第一次学习一种坚固的,机器附近的编程语言时,再来学习大小类型抽象。第一次学习声明性或约束性语言时,您将学习作为自由裁量工具的边界。第一次学习回溯搜索语言时,您将学习祈祷Ia!啊!C'thulhu F'tagn Nagn !,然后我们回到吃心和肝脏,人生的圆圆就圆满了。
游戏设计没有什么不同。您不必一定要与某种特定语言并行学习任何特定游戏,而需要学习一些能够处理这种思维方式的象征性代表游戏,例如语言特征家族。另外,有很多吃肝脏和心脏的东西。拿一个胡椒饼干。
这里的难题(至少在我看来是这样)是您要涵盖大量主题。这就像在字符表上勾选熟练程度一样-您正在为自己提供更多机制来处理给定情况。是的,它们是可以升级的,但是要全面掌握一两个点,这意味着当需要使用一个时,您不会从头开始,并且知道可以使用哪些策略供您扩大规模。
所以,看。
首先,您要剪牙。当您正在学习定位新平台或从健忘症中恢复时,这些功能也很有用。这些是指快速而不是令人敬畏的。
为了:
一旦发现了这些问题,您就可以瞄准平台了,学习就可以开始了。
这些没有特别的顺序。您可以根据需要重新排列它们。每个例子我都会举几个例子,但是它们不是规范性的。如果不同的游戏可以为您带来相同的体验,并且足够小,可以作为一系列课程的一部分,则可以随时将其交换。出于实际原因,精通屏幕渲染和相对快速地输入是很好的;您将大量使用它们。在尝试编写抽象类之前,请等待几局。你不希望在一个天真的抽象被抓获。
嗯 我无聊。
俄罗斯方块
这是非常常见的游戏,如果您遇到困难,很多开放源代码克隆会在那里撕裂。教2D图形,输入处理,评分等基础知识。
然后采纳这个原始想法并将其旋转。我通过为大学计算机图形课编写3D版本的Tetris来学习3D图形/ opengl的基础知识。
GameDev.net上有一篇不错的文章,推荐游戏的发展,以逐步了解游戏开发。从列表中我最喜欢的建议是实际打磨这些游戏。完全完成,达到可释放的状态。
列表如下(其中一些已在其他答案中给出):
我喜欢以“大富翁”开始我所有的家伙。我通常使用Brett Schuchert的Monopoly“代码kata”作为练习的基础,但我会添加很多内容。我真的很喜欢这样做有几个原因。
我非常关心良好的编码习惯(设计模式,TDD,SOLID,持续集成等),并在我的开发人员进行此练习时对其施加了很多限制。
几乎每个人都知道垄断的规则,整个游戏可以在一天内完成。这为新开发人员带来了快速的胜利,并真正吸引了他们的参与。
最初的要求从键盘控件开始,但后来我又增加了对鼠标控件的要求。这使开发人员可以考虑以下几件事:如何重构现有代码,对系统的更改部分进行编程以代替接口而不是具体的类,更好/适当的抽象,要进行单元测试,不进行单元测试,为什么要进行单元测试以及要做什么进行良好的单元测试。
有时我们插入更复杂的AI,有时却没有。有时,我们会与其他棋盘游戏一起使用,这些游戏的逻辑稍微复杂一些,例如“滑道”和“梯子”之类的东西。有时我们会完全脱离棋盘游戏,而去做扑克游戏或二十一点。
对我而言,真正重要的部分是人们会很快获得胜利,他们会看到遵循良好的编程标准,可以灵活地开发软件。这些练习可以很快建立信心。有时,经验丰富的开发人员喜欢自己完成这些操作,只是为了摆脱更复杂的项目或实践他们刚刚学到的新技术(得墨meter耳法则?)。
选择冒险
从一个通过创建游戏开始进行编程的朋友那里获得了这个技巧,与选择冒险书非常相似。这基本上是一个简单的文字冒险游戏,输出如下:
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
> _
制作此类游戏应教会您制作游戏循环,基本控制台输入和基本脚本。由于您不需要图形引擎来编写游戏,因此实现起来非常简单,并且对于初学者来说也很容易进入。高级初学者可能会编写脚本引擎。
根据我与新手程序员的经验,进度通常看起来像这样:
突围,傍或小行星。
游戏与游戏原型之间存在巨大差异。如果您认真完成梦dream以求的游戏,则应在此过程中完成“入门级”游戏。创建游戏的游戏性部分只是成功的一半。菜单和高分之类的所有其他额外事物通常都会被忽略或忽略,但是它们花费的时间比任何人期望的都要多。
在其他答案中也有一些好的建议,但我只想投赞成票:从似乎太微不足道的事情开始。
乒乓就是一个很好的例子。
目标是:使游戏设计和规则集变得脑筋急转弯,以使您可以将所有精力集中在学习正在学习的新事物(语言,平台,API)上,而不必不断休息一下,了解游戏的运作方式。
一旦开始,您会发现pong实际上比刚开始脸红时稍微复杂一些。(我正在教一个家伙编程,他正在使用pong作为他的学习项目。我们添加了一些功能,现在他通过学习如何做所有这些很酷的功能而从学习转向编程:)
一旦您已经完成了app#1的准备工作,直到可以将它出售/出售给其他人,然后进行一些复杂的事情(俄罗斯方块,冒险或您喜欢的任何事情),但是,要开始学习新技术,您编程的事情简直是脑残。
其他例子:
但是,再次-从太简单的事情开始,以便您实际上可以完成一些事情,然后回头看看所涉及的内容。用语言/平台/ SDK /引擎编写一个应用程序与编写零应用程序之间的区别是巨大的。1和2或2和5之间的差异要小得多,因此您可以采取更大的步骤,但将0到1的步骤设置得很小。它会比您想像的还要大!
Flappy Bird
-alike。作为一个专业的程序员,这是一个下午的工作(嗯,一个周末让它变得“不错”),但是,在教另一个编程人员的同时,我们了解到它实际上有很多小麻烦。同样,一个比远更多的经验为零,一旦你有一个,你必须了解如何移动到下一个更好的主意。
查看此网站:12个计算机科学游戏项目的想法
其中一些游戏包括其他人所说的话:
但同时也谈到了您可以尝试制作的其他一些游戏,例如:
此外,它还可以让您感觉到您应该首先尝试做什么,因为它可以给每个游戏带来困难感(并因此提供了应对游戏的计划):
编写游戏或任何软件最困难的部分是弄清楚该怎么做。 您绝对需要一个规格! 这是克隆现有游戏的有趣部分:规范已经存在。您的规格是“产品必须做其他产品所能做的一切”,如果您手头有其他游戏的副本,那么很容易验证这一点。
一旦你想通了什么,你需要做的,搞清楚如何做到这一点真的没有那么困难,如果你是一个称职的程序员。我不是指熟练或有经验的程序员。这意味着您已经知道如何执行大部分尝试要做的事情。但是您需要了解如何以抽象的方式思考,并具有解决问题和逻辑思考的技能,这些技能是编程的基础。如果可以做到,那么您什么都可以做。
话虽如此,我不同意大多数人关于尝试通过写一些非常简单的东西来学习写游戏的说法。奖励与您付出的努力成正比。如果您通过编写一个非常简单的游戏来学习编写游戏,那么最终您将只知道如何编写非常简单的游戏,这对您没有多大好处。
另一方面,如果您从压倒性的东西开始,您将永远无法完成它。因此,从适度的挑战开始,这将使您处理严重的问题。构建2D控制台风格的RPG或侧滚动平台器是学习真实游戏编程概念的非常好的方法。
这实际上取决于您当前的能力。如果您是编程的新手,那就去看看人们建议的特定游戏之一。否则,您应该考虑使用哪种游戏才能充分利用自己的体验。
当我开始制作第一款游戏时,我的游戏开发经验为零,但是我从事企业/行业应用程序开发已有几年了。我的第一个游戏项目是回合制策略游戏,从架构上讲,它看起来与企业应用程序没有什么不同。它使用客户端/服务器系统,并且通信通过双工WCF服务通道进行。大多数玩家操作都作为“命令”排队,并在回合结束时分派到服务器。所有回合处理都在服务器上进行,然后将游戏Universe更新发送给每个客户端。
第一个项目让我在熟悉的领域开始工作的同时,也投入了很多精力。随着项目的发展,我学会了更多地像游戏开发人员,而不是企业应用程序开发人员。最终效果很好,并且比Battleship或Tic-Tac-Toe :)更令人印象深刻。
Moonlander风格的游戏很棒(您的飞船受重力影响,玩家控制方向和推力,使用推力时燃料有限)。获得实施非常简单的物理学的经验,并且碰撞系统可能是非常原始的。无需担心AI,最重要的是它的有趣和令人上瘾的:)
像Gauntlet之类的东西,因为您需要一个实体系统,敌方AI,拾取,平铺地图,碰撞检测,计分等。这一切都可以了,但是并不需要压倒一切。
我的第一场比赛是《超级马里奥》。
四处走动,避开障碍物,跳跃。所有这些任务都可以轻松完成,而无需进行任何物理计算。
采取简单的2D事物的理想选择,因为您不会过多依赖特定的实现/框架/引擎。