Silverlight C# 游戏开发:未写代码先设计

Silverlight C# 游戏开发:未写代码先设计,第1张

概述本文只有两个主题: 1、游戏设计清晰的必要 2、循环逻辑的代码设计   游戏设计: 未写代码先设计,这是一个非常重要的建议,如果在写代码前还不知道要开发一个什么游戏,那么会遇上很多问题,这些问题包括: 代码编写异常艰难 半路重构 工作量无法估计 预算严重超支 …… 如果第一次开发游戏,那么就容易有两种情况,第一,游戏就那样还用的着设计吗,第二,无从下手,到底该怎么设计,第一种肯定考虑不周全,这是大

本文只有两个主题:

1、游戏设计清晰的必要

2、循环逻辑的代码设计

 

游戏设计:

未写代码先设计,这是一个非常重要的建议,如果在写代码前还不知道要开发一个什么游戏,那么会遇上很多问题,这些问题包括:

@H_301_21@代码编写异常艰难 @H_301_21@半路重构 @H_301_21@工作量无法估计 @H_301_21@预算严重超支 @H_301_21@……

如果第一次开发游戏,那么就容易有两种情况,第一,游戏就那样还用的着设计吗,第二,无从下手,到底该怎么设计,第一种肯定考虑不周全,这是大多数情况,第二种比第一种更悲惨,启示无论那种情况,把问题罗列出来,到一起回答就可以解决很多,比如说,可以尝试回答如下问题:

@H_301_21@游戏主题是什么? @H_301_21@是什么类型的游戏,RPG?SLG?FPS?MMO? @H_301_21@有没有剧情? @H_301_21@是单机的还是网络的? @H_301_21@单机的话,单人还是双人的? @H_301_21@网络的话,是局域网还是互联网? @H_301_21@游戏风格是什么样的? @H_301_21@如何 *** 控? @H_301_21@2D还是3D? @H_301_21@打算让玩家玩多久到头? @H_301_21@都是什么玩家玩? @H_301_21@应用技术是那些? @H_301_21@目标终端是否可承载? @H_301_21@能够满足玩家什么需求? @H_301_21@……

确切来说,以上的问题仅仅是游戏设计的一个小部分,按照经验,可能为一个或者多个问题要研究很久,举例来说,游戏类型将制约代码的主要逻辑,比如说剧情类的游戏就必须要需要一个剧情脚本,而相应的策略游戏相比剧情脚本更加需要智能脚本,这样的情况下,你的代码和处理就需要有很多的考虑。

比如以前我们在开发网络游戏的时候,有一个项目地图是一个整体,不需要独立的地图编辑器去编辑,只需要在3DMAX中将物体名称起好,所有的行为对应到一张Excel表,如果是这样的一种模式,地图编辑工具就不需要花太大力气……

可能所在的团队有策划的支持,可以省去很多力气,然而最佳的情况下是开发者就是策划,哈,也许会着砖头吧。

 

代码设计

首先得了解游戏运行的机制,在考虑更加深层次的东西,任何游戏都是一个循环体,就如下图所示:

 

可能觉得,这和Silverlight游戏开发有什么关系呢,这不是客户端游戏的开发做法吗?在游戏诞生的那天起,它本身就是一个循环,在程序中更加是一个循环体,这个基础理论是都适用,我们了解了循环机制,就可以依据这个流程设计代码,上面就够了吗?让我们展开来看看:

 

上面只是写了一个大概,如果你打算开发一个游戏的话,需要考虑的更多,如果转换到最简单的伪代码的话则是:

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类中执行相应的逻辑即可,但是是否想过这样肯定不行,如果按照这个样子写下去,那么就不是一个完整的游戏,最多只是一个展示品,要做成一个完整的游戏,就得在主要循环里加入更多的行为,最好的方法莫过于先构想流程:

 

按照上面的流程图,那么循环代码可能是这样的:

 

                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#又是这么面向对象的语言,这么写太不高级,引入高级编程理论该如何做呢,这个部分以后再说,在这里抛砖引玉,看看下图也许会有启示:)

 

 

总结

以上是内存溢出为你收集整理的Silverlight C# 游戏开发:未写代码先设计全部内容,希望文章能够帮你解决Silverlight C# 游戏开发:未写代码先设计所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1039192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存