建材秒知道
登录
建材号 > 设计 > 正文

游戏机制需要设计模式吗

孝顺的日记本
勤劳的自行车
2022-12-31 21:41:46

游戏机制需要设计模式吗

最佳答案
忐忑的秋天
无奈的乌龟
2025-08-08 08:10:29

需要。

游戏开发是一个软件工程,他的特点是需求极易变化。

对于任何一个软件工程,我们要从代码的组织方式上来提高其可读性(别人也很容易理解),安全性(不能经常出bug),易用性(逻辑复杂,思路太偏,使用上各种麻烦),健壮性(要能良好的处理意外情况),可维护性(是否容易修复与修改),可拓展性(是否容易添加功能),封装和复用性(一段代码不要到处拷贝粘贴)

对于游戏项目来说,除了上面的问题,我们更要注意其可拓展性,因为游戏的需求每天都可能发生变化,所以在写游戏逻辑的时候一定要尽可能的考虑多种情况,考虑到以后的修改是否方便等。

因此,我们需要尽可能降低代码的耦合性,做到不同的功能尽可能不要互相影响。不过,这里的降低耦合不仅仅是指自己写的模块间的耦合,还有考虑与别人写的模块的耦合,尽可能做到不要过分依赖别人的模块,这样别人代码的一点修改不至于造成我们代码的大规模修改。

最新回答
靓丽的大船
整齐的指甲油
2025-08-08 08:10:29

先设计类啦,类的内部在嵌套一个牌类,牌类的成员无非就那几个:花色、大小、名称

类有那些判断牌类型的函数,比如判断是对子,三代,联队,连子,飞机,炸弹。。。。。。

你要压过别人的牌,就首先得判断牌类型,函数已经定义好了,还得判断你的牌是否打过对方,这又需要函数来解决,具体思路你按自己打牌的规矩来设计呗

希望采纳

包容的小懒猪
虚拟的酸奶
2025-08-08 08:10:29

《游戏编程模式》(Robert Nystrom)电子书网盘下载免费在线阅读

链接:https://pan.baidu.com/s/1QKXo7ywof9LV7e0h-9l6ow

提取码:vvf2

书名:游戏编程模式

作者:Robert Nystrom

译者:GPP翻组

豆瓣评分:8.8

出版社:人民邮电出版社

出版年份:2016-9-1

页数:306

内容简介:

游戏开发一直是热门的领域,掌握良好的游戏编程模式是开发人员的应备技能。本书细致地讲解了游戏开发需要用到的各种编程模式,并提供了丰富的示例。

全书共分20章,通过三大部分内容全面介绍了与游戏编程模式相关的各类知识点。首部分介绍了基础知识和框架;第二部分深入探索设计模式,并介绍了模式与游戏开发之间的关联;第三部分介绍了13种有效的游戏设计模式。

本书提供了丰富的代码示例,通过理论和代码示例相结合的方式帮助读者更好地学习。无论是游戏领域的设计人员、开发人员,还是想要进入游戏开发领域的学生和普通程序员,都可以阅读本书。

作者简介:

Robert Nystrom是一位拥有2 0 年以上职业编程经验的开发者,而他在其中大概一半的时间从事游戏开发。在艺电(El e c t r o n i c Arts)的8年时间里,他曾参与劲爆美式足球(Madden)系列这样庞大的项目,也曾投身于亨利·海茨沃斯大冒险(Henry Hatsworth in the Puzzling Adventure)这样稍小规模的游戏开发之中。他所开发的游戏遍及PC、GameCube、PS2、XBox、X360以及DS平台。但他引以为傲的,是为开发者们提供了开发工具和共享库。他热衷于寻求易用的、漂亮的代码来延伸和增强开发者们的创造力。Robert与他的妻子和两个女儿定居于西雅图,在那里你很有可能会见到他正在为朋友们下厨,或者在为他们上啤酒。

目录

精明的画板
沉默的橘子
2025-08-08 08:10:29
对于一个大一的学生来说,目测你的基础已经不错了,坚持努力下去应该会有不错的成就。独立游戏是个很大的话题,首先先明确想要自己一个人做还是找小团队一起合作。自己一个人做的话,设计、程序、美术、音乐等等就都得会。如果组团队做,可以重点攻坚其中1到2个方向。我主要说说技术方面。你在编程方面已经有所积累,至少算法方面应该是吧,这对于编程来说是个不错的开始。开发游戏的话,对基本的数据结构和算法要求还是很高的,再有就是软件结构的设计,这个需要较长时间的积累,最好多看看其他的游戏类工程是怎么做的,游戏和那种业务流软件的一个不同在于,游戏程序对实时性要求很高,会有一些为了性能而出现的不同的代码模式。最基本的一个东西,编程语言,看你希望的开发平台,不同平台会使用不同的开发语言,这个要熟练掌握(不是能写算法、玩具例子那么简单就行,需要知道如何用这种语言开发大型工程)。关于开发平台,多说两句。如果想要自己的程序便于大家在任何平台使用,推荐Web相关的技术,如HTML5/JavaScript(用canvas元素,如果需要GPU加速的底层3D API,canvas有WebGL绘制环境(OpenGL ES 2.0的浏览器版))。如果希望更方便开发,Unity3D是个很好的选择,是个集游戏引擎与运行平台于一体的东西,而且这个东西牛逼的地方在于所有平台都支持(PC、Mobile、Web)。如果开发手机上的原生app,推荐学习cpp以及那个平台上官方语言,这样可以用cpp开发,然后用官方语言做一个壳。如果是PC上的游戏,还是推荐cpp。另一个就是数学/物理,当然这个要看你要做什么游戏。基本的东西是几何相关的东西,基本上是个游戏都用得到。如果有不确定性(绝大部分游戏应该都需要)在里面,基本的概率分布要深刻的理解。如果要自己做物理效果(碰撞,弹性,形变等),除了需要搞定相关的物理(刚体物理,柔体物理(这个通常很麻烦),流体物理(这个也很麻烦)等),还需要搞定数值计算方法,自己做物理这个水很深,不建议自己做,用现有的物理引擎最好。如果想要做到很好的3D画面,还需要学习计算机图形学,这里会有很多的光学,很多的立体几何,一坨线性代数的东西还有各种形式的积分。而且实时图形系统的开发对编程能力要求也非常高,除了普通程序的要求以外,还要能掌握高性能的数值密集型的代码开发(这个对于物理相关的开发也一样)。另外还需要掌握至少一个GPU加速的图形接口的使用(OpenGL,Direct3D等)以及对应的shader代码的编写。同样,如果想做到很好的画面效果,建议用现有的渲染引擎,自己做水也太深。总体上来说,2D游戏和3D游戏所需的技能还有很大差别,2D游戏在技术上的要求相对简单很多。还有就是,独立游戏可能有服务器端得比较少。如果真的需要,这方面的开发相对来说和通常的业务流软件的服务端比较相似,所以不是太复杂。不过会有很多游戏逻辑需要在服务端处理,多客户端的信息实时同步可能会成为一个比较有难度的问题。还有就是各种客户端请求的验证,反作弊用,这个一开始应该不会涉及到,不扯了。总的来说,游戏开发作为程序开发最难的一种形式之一,技术方面需要非常多的积累,这个需要时间去积累。可以先从那种非常小的小游戏(先是扫雷、贪食蛇这类休闲游戏,然后做塔防类游戏不错……)做起,练手用。基本功扎实了以后可以考虑进入3D。游戏美术方面呢,2D和3D也是很不一样的。3D游戏的美术很复杂,各种模型网格的创建,各种贴图纹理的绘制。如果有人物,还需要人物动画,这又是一大块。美术我不专业,不多说了,希望哪位专业的来补充一下。2D的相对好很多,只要能画好画,基本上就能做了。游戏音乐方面,主要是作曲,用mid的话也不错,但现在好像这么做的很少了。演奏要看作的曲子的复杂度了。除了音乐还有音效,这个我不懂,不说了。设计嘛,这个是制作游戏的核心。从你的表述来看,应该是玩过不少游戏了,那应该多少能体会到各种游戏的设计模式。把自己的想法,参考现有的一些模式,规划好,做出来原型。设计这里有一个很重要的细节:开发工具要能尽可能提供高效的迭代方式,游戏的完成度是一点一点打磨出来的,而这个打磨过程的长短很大程度上取决于工具是否好用。

满意请采纳

忧郁的自行车
称心的眼睛
2025-08-08 08:10:29

引言:如今各种各样的经营类游戏也流行了起来,这些经营的游戏通常是模仿生活中的各种事件,在游戏中来发挥自己的才能。而全面战争特洛伊就是这样的经营的游戏,那么在这个游戏中需要怎样的使用外交交换资源赚钱呢?赚钱的方法有是哪些呢?

一、资源转换

其实在游戏中的外交交换资源就是相当于在如今的金融市场中的各种期货股票等金融工具。金融中很重要的一个方式就是对冲,对冲就是通过购买相反性质的股票来实现风险的相互抵抗,也就是将风险在这种抵抗中解决掉,那么就是说无论在各种风险中,总的收入都不会有太大的影响。而在这个游戏中,这些外交交换资源也是一样的道理,各种各样的资源都代表着各种各样的收益和风险,那么这时候就要利用对冲的思想配置不同的资源来进行风险的抵抗,最终来获得收益。

二、游戏的设计模式

其实在不同的游戏玩的时候的思路都不一样,不同种类的游戏其实在玩的时候方式还是有很大差别的,比如这类游戏其实更多的是利用玩家的思维策略,从而将自己在游戏中的地位拉升,它没有什么正面的冲突,但是却需要游戏者设立或通过各种各样的关卡,从而增加自己的各种属性值,以这种方式来获得游戏中的胜利。但也有一些游戏是以团战和个人的方式打败了对手之后才能够获得游戏内的胜利,这样游戏通常会以枪战或者是各种各样的战争为背景进行的。

三、合理选择

有一些游戏就属于智力通关类游戏,游戏过程就像在完成一个故事一样,通过完成了故事的每一道关卡最后的胜利,所以当然早期流行的小游戏其实就是一些手部操作的游戏,这些游戏只要能够通过键盘的操作来完成各种各样的动作,躲避各种各样的障碍,那么就能够通关。我们要注意选择那些益智类的游戏,不要选择那些通过大量的花钱才能够获得胜利的游戏,这些游戏的本质就是让人上瘾以及花费大量的金钱,其实是非常不值得的。

壮观的柜子
大胆的大门
2025-08-08 08:10:29

【 观察者模式应用场景举例 】

比如在玩 极品飞车 这款游戏 每一个车手到达终点的时候 都会在其它车手的屏幕上显示 某某人以多少时间到达终点的提示 其实这就是一个典型的观察者模式的应用 观察者模式即是典型的双向一对多的应用场景下用一的一端来通知多的一端

【 观察者 模式解释】

类型 行为模式

定义了一种一对多的依赖关系 让多个观察者对象同时监听某一个主题对象 这个主题对象的状态发生改变时 会通知所有的观察者对象 使它们能够自己更新自己

【 观察者 模式UML图】

【 观察者 模式 JAVA代码实现】

新建抽象发布通知父类

package carer_subjectimport java util ArrayListimport java util Listimport carer_observer carer_observerpublic interface carer_subject_parent {    public void set_state(String state_string)    public String get_state()    public void add_observer(carer_observer carer_observer_ref)    public void sub_observer(carer_observer carer_observer_ref)    public void notityAllCarer()}

新建发布通知实现类

package carer_subjectimport java util ArrayListimport java util Listimport carer_observer carer_observerpublic class carer_subject_sub implements carer_subject_parent {    List<carer_observer> list_observer = new ArrayList<carer_observer>()    private String state    public void set_state(String state_string) {        this state = state_string    }    public String get_state() {        return state    }    public void add_observer(carer_observer carer_observer_ref) {        list_observer add(carer_observer_ref)    }    public void sub_observer(carer_observer carer_observer_ref) {        list_observer remove(carer_observer_ref)    }    public void notityAllCarer() {        state =  到达终点         for (int i =   i < list_observer size() i++) {            list_observer get(i) show_info()        }    }}

新建观察者接口

package carer_observerimport carer_subject carer_subject_parentpublic interface carer_observer {    public void show_info()}

新建观察者实现类

package carer_observerimport carer_subject carer_subject_parentpublic class carer_observer_imple implements carer_observer {    private carer_subject_parent carer_subject_parent_ref    public carer_subject_parent getCarer_subject_parent_ref() {        return carer_subject_parent_ref    }    public void setCarer_subject_parent_ref(            carer_subject_parent carer_subject_parent_ref) {        this carer_subject_parent_ref = carer_subject_parent_ref    }    public carer_observer_imple(carer_subject_parent carer_subject_parent_ref) {        super()        this carer_subject_parent_ref = carer_subject_parent_ref    }    public void show_info() {        System out println(carer_subject_parent_ref get_state())    }}

新建客户端运行类

package run_mainimport carer_observer carer_observer_impleimport carer_subject carer_subject_parentimport carer_subject carer_subject_subpublic class run_main {    public static void main(String[] args) {        carer_subject_parent carer_subject_parent_ref = new carer_subject_sub()        carer_observer_imple carer_observer_imple_ref  = new carer_observer_imple(                carer_subject_parent_ref)        carer_observer_imple carer_observer_imple_ref  = new carer_observer_imple(                carer_subject_parent_ref)        carer_observer_imple carer_observer_imple_ref  = new carer_observer_imple(                carer_subject_parent_ref)        carer_observer_imple carer_observer_imple_ref  = new carer_observer_imple(                carer_subject_parent_ref)        carer_subject_parent_ref add_observer(carer_observer_imple_ref )        carer_subject_parent_ref add_observer(carer_observer_imple_ref )        carer_subject_parent_ref add_observer(carer_observer_imple_ref )        carer_subject_parent_ref add_observer(carer_observer_imple_ref )        carer_subject_parent_ref sub_observer(carer_observer_imple_ref )        carer_subject_parent_ref set_state( 到达终点 )        carer_subject_parent_ref notityAllCarer()    }}

程序运行结果如下

到达终点到达终点到达终点

以一对多的方式进行对一方状态的改变而去通知多方 观察者模式也叫发布/订阅模式 一方进行发布 而多方进行订阅 和生活中看报纸一样 你喜欢订城市晚报 就会发给你

【 观察者 模式 MyEclipse 项目JAVA代码实现】

lishixinzhi/Article/program/Java/gj/201311/27277