Silverlight C# 游戏开发:未写代码先设计
2010-01-13 15:01
323 查看
本文只有两个主题:
1、游戏设计清晰的必要
2、循环逻辑的代码设计
游戏设计:
未写代码先设计,这是一个非常重要的建议,如果在写代码前还不知道要开发一个什么游戏,那么会遇上很多问题,这些问题包括:
代码编写异常艰难
半路重构
工作量无法估计
预算严重超支
……
如果第一次开发游戏,那么就容易有两种情况,第一,游戏就那样还用的着设计吗,第二,无从下手,到底该怎么设计,第一种肯定考虑不周全,这是大多数情况,第二种比第一种更悲惨,启示无论那种情况,把问题罗列出来,到一起回答就可以解决很多,比如说,可以尝试回答如下问题:
游戏主题是什么?
是什么类型的游戏,RPG?SLG?FPS?MMO?
有没有剧情?
是单机的还是网络的?
单机的话,单人还是双人的?
网络的话,是局域网还是互联网?
游戏风格是什么样的?
如何操控?
2D还是3D?
打算让玩家玩多久到头?
都是什么玩家玩?
应用技术是那些?
目标终端是否可承载?
能够满足玩家什么需求?
……
确切来说,以上的问题仅仅是游戏设计的一个小部分,按照经验,可能为一个或者多个问题要研究很久,举例来说,游戏类型将制约代码的主要逻辑,比如说剧情类的游戏就必须要需要一个剧情脚本,而相应的策略游戏相比剧情脚本更加需要智能脚本,这样的情况下,你的代码和处理就需要有很多的考虑。
比如以前我们在开发网络游戏的时候,有一个项目地图是一个整体,不需要独立的地图编辑器去编辑,只需要在3DMAX中将物体名称起好,所有的行为对应到一张Excel表,如果是这样的一种模式,地图编辑工具就不需要花太大力气……
可能所在的团队有策划的支持,可以省去很多力气,然而最佳的情况下是开发者就是策划,哈,也许会着砖头吧。
代码设计
首先得了解游戏运行的机制,在考虑更加深层次的东西,任何游戏都是一个循环体,就如下图所示:
GameLoop
上面是一个最简单的代码设计,只需要在Game类中执行相应的逻辑即可,但是是否想过这样肯定不行,如果按照这个样子写下去,那么就不是一个完整的游戏,最多只是一个展示品,要做成一个完整的游戏,就得在主要循环里加入更多的行为,最好的方法莫过于先构想流程:
![](http://pic002.cnblogs.com/img/nowpaper/200912/2009122718220777.jpg)
按照上面的流程图,那么循环代码可能是这样的:
可是问题又来了,无端的循环是不是造成了系统浪费,确实,无论在什么技术上都是在考虑如何解决不必要的开销,而且我们用的Silverlight来开发,c#又是这么面向对象的语言,这么写太不高级,引入高级编程理论该如何做呢,这个部分以后再说,在这里抛砖引玉,看看下图也许会有启示:)
1、游戏设计清晰的必要
2、循环逻辑的代码设计
游戏设计:
未写代码先设计,这是一个非常重要的建议,如果在写代码前还不知道要开发一个什么游戏,那么会遇上很多问题,这些问题包括:
代码编写异常艰难
半路重构
工作量无法估计
预算严重超支
……
如果第一次开发游戏,那么就容易有两种情况,第一,游戏就那样还用的着设计吗,第二,无从下手,到底该怎么设计,第一种肯定考虑不周全,这是大多数情况,第二种比第一种更悲惨,启示无论那种情况,把问题罗列出来,到一起回答就可以解决很多,比如说,可以尝试回答如下问题:
游戏主题是什么?
是什么类型的游戏,RPG?SLG?FPS?MMO?
有没有剧情?
是单机的还是网络的?
单机的话,单人还是双人的?
网络的话,是局域网还是互联网?
游戏风格是什么样的?
如何操控?
2D还是3D?
打算让玩家玩多久到头?
都是什么玩家玩?
应用技术是那些?
目标终端是否可承载?
能够满足玩家什么需求?
……
确切来说,以上的问题仅仅是游戏设计的一个小部分,按照经验,可能为一个或者多个问题要研究很久,举例来说,游戏类型将制约代码的主要逻辑,比如说剧情类的游戏就必须要需要一个剧情脚本,而相应的策略游戏相比剧情脚本更加需要智能脚本,这样的情况下,你的代码和处理就需要有很多的考虑。
比如以前我们在开发网络游戏的时候,有一个项目地图是一个整体,不需要独立的地图编辑器去编辑,只需要在3DMAX中将物体名称起好,所有的行为对应到一张Excel表,如果是这样的一种模式,地图编辑工具就不需要花太大力气……
可能所在的团队有策划的支持,可以省去很多力气,然而最佳的情况下是开发者就是策划,哈,也许会着砖头吧。
代码设计
首先得了解游戏运行的机制,在考虑更加深层次的东西,任何游戏都是一个循环体,就如下图所示:
GameLoop
while( Game.State != emGameState.Exit) { switch(Game.State) { case emGameState.Init: Game.Init(); break; case emGameState.Loop: Game.Loop(); break; case emGameState.Exit: Game.Exit(); break; } }
上面是一个最简单的代码设计,只需要在Game类中执行相应的逻辑即可,但是是否想过这样肯定不行,如果按照这个样子写下去,那么就不是一个完整的游戏,最多只是一个展示品,要做成一个完整的游戏,就得在主要循环里加入更多的行为,最好的方法莫过于先构想流程:
![](http://pic002.cnblogs.com/img/nowpaper/200912/2009122718220777.jpg)
按照上面的流程图,那么循环代码可能是这样的:
while( Game.State != emGameState.Exit) { switch(Game.State) { case emGameState.Init: Game.Init(); break; case emGameState.Menu: Game.Menu(); break; case emGameState.Starting: Game.Starting(); break; case emGameState.Loop: Game.LoopLogic(); break; case emGameState.Rest: Game.Rest(); break; case emGameState.Exit: Game.Exit(); break; } }
可是问题又来了,无端的循环是不是造成了系统浪费,确实,无论在什么技术上都是在考虑如何解决不必要的开销,而且我们用的Silverlight来开发,c#又是这么面向对象的语言,这么写太不高级,引入高级编程理论该如何做呢,这个部分以后再说,在这里抛砖引玉,看看下图也许会有启示:)
![](http://pic002.cnblogs.com/img/nowpaper/200912/2009122718321684.jpg)
相关文章推荐
- unity3D 游戏开发之工程代码框架设计思路MVC
- Silverlight C# 游戏开发:未写代码先设计
- MMORGP大型游戏设计与开发(客户端架构 part1 of vgui)
- 项目管理、设计开发、代码管理、bug管理工具介绍
- Silverlight C# 游戏开发:草动系统(二)随风而动
- unity3f游戏开发之游戏设计中运营重用体系
- 学习网页开发与网站设计必看的【代码逆袭】书
- SDL游戏开发教程09(代码迁移到VC8)
- 游戏开发中的ECS设计模式初探
- 游戏开发视频教程_基于MFC设计的MINI快跑游戏
- 游戏开发笔记(十)——移动功能设计
- SharePoint无代码工作流设计开发实例——交通费报销流程(二)
- 《游戏脚本的设计与开发》-第一章总结 文字脚本的功能扩展和一个游戏测试
- 走读iphone游戏开发示例代码
- 模块化设计,面向接口开发。不断重构设计和代码,一个大幅提高开发效率的好方法:不断重构既有代码和设计,为复用准备。同时也是优化。
- MMORGP大型游戏设计与开发(客户端架构 part16 of vegine)
- 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十二)重构 – 让代码插上翅膀自由飞翔
- 【iOS-Cocos2d(2.x) 游戏开发之一】自定义CCSprite中-(id) init 重写需注意& 2.x版本中注册触屏事件代码&简述cocos2d/x/Unity3D引擎使用感想!
- 脚本指令《游戏脚本的设计与开发》-第一章 读取和解析一个脚本文件