猫史档案馆


【box3教程】 如何做个好游戏?函数!!!!!!

用户:AK亨利佐加DanJamesThomasAK亨利佐加DanJamesThomas查看:11 回复:13 评论:11 创建时间:2022-12-25T19:25:36


emotion_编程猫_翻白眼

如题,想做个好游戏,得学函数!

emm不是什么f(x)=x²+3y/5+∆√5...

是:

function func(x)
{
let i=0;
for(i;i!=x;++i)
{i*=i;}
return i;
}
console.log(func(5));

懂?

但是更好一点的游戏,比如《章鱼游戏》,需要“类”。

类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。

类是 面向对象语言程序设计中的概念,是 面向对象编程的基础。 类的实质是 一种引用数据类型,类似于  byteshortint(char)、 longfloatdouble 等基本数据类型,不同的是它是一种复杂的数据类型。因为它的本质是 数据类型,而不是 数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。 类是 对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的数据类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使 编译器有可能检查对象的非法使用。 类的内部 封装属性方法,用于操作自身的成员。类是对某种 对象的定义,具有 行为behavior),它描述一个对象能够做什么以及做的 方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的 名称属性方法事件。 类的构成包括成员属性和成员方法(数据成员和成员函数)。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“学生”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为 接口。 类的三大特性
  1. 封装性将数据和操作封装为一个有机的整体,由于类中私有成员都是隐藏的,只向外部提供有限的接口,所以能够保证内部的高内聚性和与外部的低耦合性。用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,能够增强安全性和简化编程。
  2. 继承性更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。
  3. 多态性是指同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向父类(基类)的指针,来调用实现子类(派生类)中的方法。
  类与结构体的区别 在  C++C# 语言中, class 和  struct 都可以定义一个类,它们的区别如下:
  1. 从职能观点来看,class 表现为行为;而 struct 常用于存储数据。
  2. C# 中,class 是引用类型,继承自 System.Object 类;struct 是值类型,继承自 System.ValueType 类,不具多态性。但是注意,System.ValueType 是个引用类型。
  3. class 支持继承,可以继承自类和接口;而 struct 没有继承性,struct 不能从 class 继承,也不能作为 class 的基类,但 struct 支持接口继承
  4. class 可以声明无参构造函数,可以声明有参构造函数;而 struct 只能声明带参数构造函数,且不能声明无参构造函数。因此,struct 没有自定义的默认无参构造函数,默认无参构造函数只是简单地把所有值初始化为它们的 0 等价值。
  5. Java / C# 中,实例化时,class 要使用 new 关键字;而 struct 可以不使用 new 关键字,如果不以 new 来实例化 struct,则其所有的字段将处于未分配状态,直到所有字段完成初始化,否则引用未赋值的字段会导致编译错误。
  6. class 可实现抽象类abstract),可以声明抽象方法(抽象函数);而 struct 为抽象,也不能声明抽象函数
  7. class 可以声明 protected 成员、virtual 成员、sealed 成员和 override 成员;而 struct 不可以,但是值得注意的是,struct 可以重载 System.Object 的 3 个虚方法,equals( )、toString( ) 和 getHashTable( )。
  8. class 的对象复制分为浅拷贝深拷贝,必须经过特别的方法来完成复制;而 struct 创建的对象复制简单,可以直接以等号连接即可。
  9. class 实例由垃圾回收机制来保证内存的回收处理;而 struct 变量使用完后立即自动解除内存分配
  10. 作为参数传递时,class 变量是以按址方式传递;而 struct 变量是以按值方式传递的。
我们可以简单的理解,class 是一个可以动的机器,有 行为,有 多态,有 继承;而 struct 就是个零件箱,组合了不同结构的零件。其实,class 和 struct 最本质的区别就在于 class 是 引用类型,内存分配于托管堆;而 struct 是 值类型,内存分配于线程的 堆栈上。由此差异,导致了上述所有的不同点。所以只有深刻的理解内存分配的相关内容,才能更好的驾驭。 当然,使用  class 基本可以替代  struct 的任何场合,class 后来居上。虽然在某些方面 struct 有性能方面的优势,但是在面向对象编程里,基本是 class 横行的天下。 那么,有人不免会提出,既然 class 几乎可以完全替代 struct 来实现所有的功能,那么 struct 还有存在的必要吗……答案是,至少在以下情况下,鉴于性能上的考虑,我们应该考虑使用 struct 来代替 class:
  1. 实现一个主要用于存储数据的结构时,可以考虑 struct。
  2. struct 变量占有堆栈的空间,因此只适用于数据量相对小的场合。
  3. struct 数组具有更高的效率。

吧啦吧啦、阿巴阿巴,总而言之,做游戏,我们只需要类的继承性继承性更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。

比如什么?

假如Bob是个比萨制作机器人,它拥有所有机器人的基础代码,像手的运转啊、走动啊、说话啊(好像不能太用得上,但是对它的主人说几声友好的话啊啥的挺有用的)啥的,都是所有其他的机器人都有(具备)的,也就是说

它继承了其他机器人的代码还有属性。

可这对做游戏有什么帮助?不不不,如果你看看章鱼游戏的基础代码,你就不这么想了。。。

console.clear()
require('./ext.js')
require('./DB.js')
require('./shop.js')
require('./common.js')
require('./NPC行为.js')
require('./环境修改.js')

啊哈哈,我开玩笑的

center_image

//common.js
const ...//定义一些常量例如:
const RequiredPersonsCount = 1; // 至少需要多少人开局
const GameReady = 20; // 预备人数达到后,多久后开始游戏
const MaxPlayerCount = 10; // 达到此人数就开局
const WholeGameInterval = 10; // 整局游戏结束后玩家显摆时间
const NoOneAliveGameInterval = 6; // 玩家全部战败,提前开始下局游戏的间隔
global....//定义全局的东西
class GameManager extends Box3Entity()
{}//游戏属性与最基础的东西,像玩家的控制面版啥的继承玩家的属性(Box3Entity)
class game1 extends GameManager()
{}//定义游戏1,继承GameManager,之后在GameManager里调用
。。。
//以此类推

有疑问评论区里问emotion_doge


回复

上一页1 页 / 共 1下一页
盗码师盗码师

super

点赞0


评论


宁静倒数28天宁静倒数28天

你这么说我也听不懂……我简单说一句,函数其实就类似于

外卖盒

就好比如外卖员给你送外卖

总不能直接拿盒饭过去对吧?

很麻烦!!!!

用外卖盒,省事又简洁

可以随时调出啦看看有没有漏了汤(查看内部代码是否错误)

使用也只需要拿出盒子,不需要分批次拿饭盒(将一串代码合在一起使用,方便,不用来来回回写好几回)

函数也一样

点赞0


评论


卑微OIer卑微OIer

qs说的正确但复杂了()

点赞0


评论


宁静倒数28天宁静倒数28天

名字:变量

特长:统计数据,能够时刻更换

扮演角色:财政部经理

日常:哎,行行行,啊,好好好好。(挂了电话)快快快,动起手来,上头要资料了,0.1秒内不给我算出24除以6我要你们好看!

 

名字:常量

特长:喵古板(字面意思)

扮演角色:隔壁老爷爷

日常:这块地我们都住了2个小时了,历史久远啊,你不能说改就改!我这里有合同的,你这样犯法了你知道吗!

 

名字:对象

特长:多重身份

扮演角色:国际*谍

日常:新身份好了吗?我要过申啊,不然没法执行下一步计划。哦,记得把我以前那个“老李”的身份改成“*八”

 

名字:for循环

特长:打篮球

扮演角色:蓝球添才

日常:准备好鸡了吗?鸡你*美!(反复了大概有3085943268748次)

 

点赞0


评论


busterbuster

这人复制了章鱼游戏( )官方封了吧(

点赞0


评论


植物月光花植物月光花

生成的不错…emotion_doge

点赞0


评论


灵清帝王吃爆一切厕所灵清帝王吃爆一切厕所

还复制章鱼游戏啊?不知悔改()吉吉怎么不给他直接封ip

点赞1


评论


busterbuster

官方来鉴定一下( )他这段代码是不是章鱼的( )( )

点赞0


评论


AK亨利佐加DanJamesThomasAK亨利佐加DanJamesThomas

别啊我号(非贴主)

点赞0


评论


ComsComs

666()上次复制某知名地图还发布了(?)这次又复制章鱼(?)

点赞0


评论


被遗忘的屑被遗忘的屑

对对对,就是章鱼的(最好封久点(

点赞1


评论


145a145a

函数 ✘

一段可以反复使用的代码 ✔

点赞0


评论


ComsComs

你拿章鱼的代码阁这装?)

点赞0


评论