[转载]SDL 用法:Pirates Ho! 的诞生

2024-01-14 12:18
文章标签 用法 转载 诞生 sdl ho pirates

本文主要是介绍[转载]SDL 用法:Pirates Ho! 的诞生,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SDL 用法:"Pirates Ho!" 的诞生
从头开始创建一个 Linux 游戏

Sam Lantinga 和 Lauren MacDonell
Loki Entertainment Software 首席程序员
2000 年 2 月

内容:
构思游戏
研究
越来越快乐!
工具
结束语
参考资料
关于作者


Simple DirectMedia Layer (SDL) 的作者 Sam Lantinga 和 Lauren MacDonell 发布了这个系列的第一篇文章,在这些文章中,他们记录了从头设计和构建 Linux 游戏的过程。在本文中,作者说明了他们如何开始游戏的构思过程。

一切都是在某个星期天下午开始的,当时我们沿着州际 5 号公路从 Stockton 驾车回家。就在 Santa Nella 的南边,我们开始讨论编写我们自己的计算机游戏的可行性。由于有人请我们撰写关于在游戏开发中使用 SDL 的系列文章,我们才有了这个想法,而这是其中的第一篇。由于有一些游戏开发的实际经验,我们认为要熟悉和了解某个过程的唯一方法是亲身体验它,并且用文档记录下各个阶段。接着就是总结我们已经采取的预备步骤,以及游戏开发至今为止我们得到的建议。

构思游戏
6 小时的路程给了我们足够的时间开始激发脑力。首先,我们考虑要编写哪种游戏。街霸?冒险游戏?策略游戏?我们参与角色扮演游戏的历史很长,并且成绩出色,因此我们认为开发冒险游戏应该很有趣。

那么就引出了下一个问题:哪种类型?是科幻冒险?中世纪幻想?探宝历险?提到“探宝历险”时,突然冒出了一些灵感的火花。我们开始想像那种震撼的感觉:大把的金币从指尖滑落……,风帆在头顶拍打,空气中弥漫着盐和海水的味道……,恐惧地看着一个人走在甲板上,独脚海盗船长向远处眺望……。几分钟之后,我们已陷入了沉思中,毫无疑问我们的方向已定。

我们讨论了激烈的舰对舰战斗的各种情形,而那种世界下角色扮演游戏的可行性引起了我们的兴趣。我们边驾驶边讨论了一些游戏的具体细节。我们需要一个全面计划。一个经典计划,并且它要集角色扮演和战术战斗于一身,那就是寻宝。游戏中有几位海盗船长,而玩家将扮演其中一位,每个海盗船长都有一部分寻宝图,而他必须想办法收集其余部分的地图并得到宝藏。

Pirates Ho! 地图草稿
Pirates Ho! 地图草稿

到家之前,假设已经变更了好几次。最初,宝藏是最终目标,但如果宝藏可以带领玩家去寻找新的或更刺激的财宝,那又会如何呢?或许,它是神秘的炼金术配方,可以使铅变成金子?或者是通向另一个空间的门户?可能的情况是无穷无尽的,所以我们决定研究所有海盗电影、书籍,特别是可以弄到手的游戏。因为我们希望获得一些历史和文学方面的观点,以及现有游戏中可能与我们相似的构思。

研究
到家之后,我们做的第一件事就是访问 CompUSA 来寻找游戏。我们找到几个关于海盗的游戏,它们自称包括了战斗、策略和角色扮演成分。我们有一点失望,因为游戏公司似乎事先窃取了我们的灵感,但我们很快就恢复了信心。因为在从 Stockton 回家的途中,我们就进行了激烈的争辩,是使游戏世界符合现实和历史,还是构造一个虚幻的世界,它包括美人鱼、海妖、巨大的旋涡以及类似的东西。我们所看到的正在销售的游戏似乎是符合现实/历史的,所以我们决定走相反的路,使我们的游戏尽可能有幻想。

在购买了一个我们找到的游戏后,我们把它拿回家,只是希望发现它并不如看上去那么好玩。这个海战游戏并没有很好地开发,也没有涉及到角色扮演的成分。很快,我们便认定我们可以使某些部分变得更好。我们搜索了 Internet,以查找其它海盗游戏的演示版及其评论,用它们来帮助确定我们游戏的范围。了解了其它游戏在评论家眼中的亮点和败笔,我们就对当前游戏尚未满足的要求有了一些认识。

我们租借了可以在当地录像带商店中找到的每一部海盗电影来继续进行研究。它们包括 Treasure IslandCutthroat IslandKidnapped,当然还有现代经典片 Muppet Treasure Island。根据这些影片,我们可以找到海盗电影的一些感觉:故事情节、场景、以及现代观众心目中的海盗形象和声音。这些是我们的游戏要考虑的因素。

越来越快乐!
我们在一个素不相识的人家中举行的意大利聚餐会上,惊奇地发现了游戏开发迄今为止最重要的一件事。我们应朋友之邀,而他又是个游戏程序员,所以我们就带上草稿和草图,希望他能花几分钟时间提供给我们一些新的想法。没想到主人和大多数宾客都是游戏程序员、QA 测试人员或热情的玩家,他们都有一些想法可以与我们分享。

我们一开始比较犹豫地提出了我们原来的构思,并解释了我们的想法。但却得到了热情的回应。每个人都有最中意的游戏愿意与我们分享,他们的想法对我们的计划是很好的补充,并且其中也不乏一些建设性的建议。现在,最关注的是游戏应该充满情调。一些使游戏增加情趣的建议包括添加一些随机的有趣事件,如在格斗期间添加一些船员的说明,以及在游戏中不同人物之间建立一组关系。

由于这是一个角色扮演的游戏,定制人物和船员相当重要;人们希望可以使他们的人物个性化,并且可以与船员中的人物交流。每个人都喜欢逻辑问题的构思,并建议可以有多种方法获胜。他们还希望有旁门左道的方法可以玩游戏,并且可以帮助完善人物。

当我们征求游戏的技术方面的反馈时,我们学到了最有价值的一课:在开始操心游戏的内部工作之前,先构建想法和故事。我们的新朋友告诉我们,不管代码如何巧妙复杂,一个不变的事实就是人们喜欢好的故事情节。

工具
我们在设计游戏世界和玩家界面时所遇到的第一个问题是“它看上去像什么?”。游戏开发的第一阶段就是概念艺术图;有一天晚上,我们很晚未眠,草拟出人物和环境的形象。我们从一开始就认定三维环境要比二维好,并且知道要有逼真的地图以及寻宝图。还需要想办法生成人物的图片,通过改照片或者徒手绘制。一旦有了关于外观的灵感,就必须找到适当的工具。幸好,我们家中已经有了 Bryce3D 和 Fractal Design Painter4 的副本,这样就可以在家中进行创作了。

构建游戏时作者的桌面
Pirates Ho! 地图草稿

我们开始研究已经拥有的软件能力,并且在大量讨论和预算分析后,最终购买了包括 Bryce4、Poser4 和 Canoma 在内的软件包(请参阅本文后面的参考资料)。目前,已经成功创建了非常好的 18 世纪风格的游戏世界地图,以及一些三维岛屿,但仍必须想出处理小镇、船只、人物以及其它一些可视元素的算法。我们仍在讨论是否要投资买一部数字像机。

结束语
迄今为止,我们认为已经开了个好头。当然,希望在实现了我们的想法以后有些事可以改变 -- 毕竟,事物很少按人们的意志发展。

在开发过程的最初部分,我们学到了一些东西,并希望它们会有所帮助。首先,不要指望某个下午坐在电脑前,就可以写游戏。这也许适合某些人,但我们大多数人必须 -- 或至少应该 -- 首先创建好的构思。开始时,尽可能多地创建一些构思。如果可以的话,听听别人对您的构思有什么看法 -- 越多越好!

一旦确定了一些构思,尽量多做一些调查,看看市场上是否有同类产品,以及还有哪些需要没有满足。考虑一下,如果您是这个游戏玩家,那么需要什么,有什么期望;是要将游戏卖给别人,还是只想打发空闲时间,搞清楚这一点非常重要。同样,还要查看一些能从中获取灵感的书籍、电影、游戏等。当然,我们不是暗示您去剽窃什么,但从其它资料中汲取灵感并没有错。此外,彻底探索要工作的领域,就可以了解到玩家希望什么样的行为模式、人物、故事情节和场景,以及有什么创新能够带给他们惊喜。也许,还可能发现这个想法已经实现了,那么就可以在创建游戏的新构思时享受别人的劳动成果了。

要选择正确的工具,应考虑一些事情。首先,应根据要创建的事物选择工具,决不能反着干。换句话说,不要跑出去买回一大堆软件,结果让它们永远躺在书架上。想清楚要做什么,然后到处找一找适合这项工作的东西。其次,我们认为不是每个人都舍得花钱买那些我们刚好能负担得起的好软件。我们不会推荐特定软件包,但可以介绍几个好的 Internet 站点(请参阅参考资料),可以在这些站点上找到各种共享软件和低成本应用程序。另一种选择就是在决定购买某个公司的整个软件包之前,先尝试下载和研究该软件的演示版本。

我们仍在学习中,希望您可以从我们的成果中学到一些东西,但这决不是开发游戏的唯一方法。我们认为这个游戏仍有值得改进的地方。只要知道如何实现目标,我们并不介意对游戏做改动。在探索过程中,您将会找到自己的方法。如果发现确实有值得借鉴的地方,我们也乐于听到。

祝好运!

参考资料

  • 请访问 Pirates Ho! 网站
  • 丰富的共享软件资源:
    • http://www.sharewarejunkies.com/:用于几种不同平台的共享软件,以及这些软件的评价
    • 各种软件下载(有各种价格)
    • 一个组织得很好的 Windows、Mac 和 Linux 图形、编程和其它软件包集合
  • 用于三维设计的软件:
    • Bryce4:用于设计三维世界,生成图像,并使其栩栩如生,抽取三维图像
    • Canoma:用于根据扫描的照片或数字照片快速创建逼真的三维模型,但不必具备很多的三维技术
  • SDL:使 Linux 有趣,在 developerWorks:Sam 向您介绍 SDL,以及它的工作原理
  • 介绍 SDL API
  • SCiTech 图形库
  • 下载一些 Linux 上最好的游戏:
    • Maelstrom
    • Hopkins F.B.I.
    • Descent 2
    • Civilization: Call To Power
    • MythII: Soulblighter
    • Railroad Tycoon II
  • 游戏开发者新闻组
  • MythII: Soulblighter 的评论,在 LinuxWorld 杂志中
  • "Games users play",在 LinuxWorld 杂志中
  • "A whole new civilization built on Linux",在 LinuxWorld 杂志中

关于作者
Sam Lantinga 是 Simple DirectMedia Layer 库的作者,现在是 Loki Entertainment Software 的首席程序员,这家公司致力于生产最畅销的 Linux 游戏。他与 Linux 和游戏打交道开始于 1995 年,从事各种 DOOM! 工具移植,以及将 Macintosh 游戏 Maelstrom 移植到 Linux。

Lauren MacDonell 是一位技术作家,并且是一位业余艺术家。她和 Sam 正在合作开发海盗角色扮演游戏 "Pirates Ho!"。在工作、写书或跳舞之余,她照管着热带鱼。

这篇关于[转载]SDL 用法:Pirates Ho! 的诞生的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/605128

相关文章

javascript fetch 用法讲解

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇... 目录1. 基本语法1.1 语法1.2 示例:简单 GET 请求2. Response 对象3. 配置请求

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

《SQLServer中的PIVOT与UNPIVOT用法具体示例详解》这篇文章主要给大家介绍了关于SQLServer中的PIVOT与UNPIVOT用法的具体示例,SQLServer中PIVOT和U... 目录引言一、PIVOT:将行转换为列核心作用语法结构实战示例二、UNPIVOT:将列编程转换为行核心作用语

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

Java中的内部类和常用类用法解读

《Java中的内部类和常用类用法解读》:本文主要介绍Java中的内部类和常用类用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录内部类和常用类内部类成员内部类静态内部类局部内部类匿名内部类常用类Object类包装类String类StringBuffer和Stri

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils