惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threatpost
Latest news
Latest news
N
News | PayPal Newsroom
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Securelist
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
Cisco Talos Blog
Cisco Talos Blog
云风的 BLOG
云风的 BLOG
AWS News Blog
AWS News Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
美团技术团队
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
博客园 - 聂微东
V2EX - 技术
V2EX - 技术
T
Troy Hunt's Blog
SecWiki News
SecWiki News
S
Secure Thoughts
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed

博客园 - Super Sky

2016年了 14年了,离上一篇2年了,做个记号 忙完这段时间后要做的事情 android比赛 计算机前沿技术造就亿万富翁 模板里面的时间(网上找的) javamail 转 异常 关于异常 xml生成和解析 转载 ibatis 转ibatis多表操作 转载 联合查询 in ibatis 我想出国读硕士了 迅雷在哪里,迅雷在这里 盟军敢死队 用c语言开发游戏 快乐的痛 笑着哭 所谓机遇 顽固文件删除
二维游戏开发的点滴
Super Sky · 2011-06-27 · via 博客园 - Super Sky
 

现在写这些文字,是担心过几天就忘了,写不出来了。这一年来记性极差,一件事情一转头就忘了。可能是因为老了。

上次的那个游戏已经过去一段时间了,很久不碰了。有一些经验,还是值得记下来给大家看看。有人说开发一个游戏很难,有人说很简单。实际上从一无所有开始开发起来,确实很难。几十年前,卡马克说子弹退壳这个效果都想了很久,现在所有的资料都可以从网络查到。现在和以前的一大进步就是有了网络,想要的东西都可以查的到。除了特别曲高和寡核心的东西。我开发的这个游戏上实际上是一个RPG游戏,这种游戏源代码遍地都是,所做的只是改编一下就是,实际上没有什么技术含量。过程中利用了HotEditMotionWelder两个工具,抛开这两个工具所自带的代码,自己独立写的代码其实不过30%40%。这两个工具使用的是java,所以更大的工作量在于javac的移植上。真正麻烦的部分是仿真实现java的基本类上。人家的代码都是千锤百炼过,我自己写的代码则不知道什么时候出现错误。这个游戏开发的一个收获一是对自己有了信心。有些事情想起来是挺难,比如从02年我一直想开发的一个游戏一直到现在都没开发出来,主要是真的没动手去做。任何事情其实都不难。只是时间上的长短。二是建立了一堆底层java的模拟库,关键是测试过了。以后再移植的时候就简单了。

二维游戏开发其实不难,三维才有点难度。实际上开发的人多了也不难,君不见那些出书的人两星期就可以写一个5关的程序。读完Directx RPG游戏开发,基本上对这个过程有了了解。开发一个世界级游戏,精致画面,足够智能。这才是一个有竞争力的游戏。那游戏开发难在什么地方,难在它足够复杂。以前我就体会到,普通试题和竞赛题有什么区别,区别在于普通题目问题到结果之间是直线或近似直线,而竞赛题是曲线而至是环线。到达目标需要绕半天,大部分人包括我没有足够的耐心绕下去,半路就颓然而废。同样游戏的复杂性在于规模大而散,事物之间联系过于紧密。Maybe有人觉得开发网站相对较简单,简单在于其页面对网站功能做了恰当的划分。当一个东西的规模足够小的时候,任何人都能做好它。我不喜欢山寨机的界面开发,原因在于,改动一个地方,其他的许多地方都要改。就像我写的程序一样。大部分历史的进步就是为了偷懒。规模还不大的时候,非结构化程序设计,中等规模的时候,结构化程序设计,大规模的时候面向对象,就是为了分离。如今细节多了,开始面向方面的程序设计。那我们看一看游戏中需要什么?

试想这样一个游戏场景。我点开一个游戏,游戏先出现公司标志,然后进入主菜单,我点开始游戏,进入游戏画面。在游戏画面中点ESC键,出现游戏中菜单。游戏中有蓝蓝的天,白白的云,炎炎的阳光,绿绿的草,青青的水,高高的建筑,还有漂亮的女人和萎缩的主人公。主人公找到一个女人开始搭讪,“Hello”,“Yes Sir”。美女说,我的发卡掉了,你帮我去找。于是主人公去找。主人公还可以跑到人家里翻箱倒柜。还可以打怪练级。怪物还能掉下好东西。捡到一个绣花针,二话不说插进耳朵里。主人公吹着口哨走在乡间的小路上,前面一块突兀的石头挡住了去路。旁边一块路牌写着请走这里,主人公走过去,掉进了一堆大便里。满屏花花绿绿,游戏提示,生死何足道,待从头,收拾旧山河。

从中可以统计一下游戏中的必要因素。游戏状态管理。LOGOGAMINGMENULOADINGMENUINGAME。这可以用一个变量来存储。如果更复杂,需要建立一个状态机。地图管理。地图分层。天空、云朵、草地、动态水。建筑。角色,美女、人偶。对话框。任务。道具管理。装备。冤死的敌人。障碍物。陷阱。底层还有图像处理、声音、网络等等等等。有了这一些是不是就感觉到事情简单了很多。那个写TCP/IP协议的人说,这个东西很简单么,照着协议说明写就可以了。不涉及一些很技术的东西的话,游戏也很简单照着剧本写就是。游戏中还有一个重要的东西就是脚本。实际上不是为了适应变化的话这东西是不需要的,金点时空实现的第一版游戏就没有脚本罢。或者单独的任务放在一个dll里面,CS就是这样做的吧。这样的坏处就是让程序员难受了点。

困了,下次再写。