数据结构知识游戏举例讲解
创始人
2025-01-24 02:56:00
0

一、关于数据结构 约瑟夫死亡游戏的代码C++

#include

using namespace std;

template

struct LinkNode

{

T data;

LinkNode*link;

LinkNode( T item)

{

data=item;

link=NULL;

}

};

template

class List

{

public:

List()//构造函数

{

first=new LinkNode;

first->link=first;//头尾相连,循环链表,用它可以让你数到最后一个人的时候,他的下一个人就是队伍的第一个家伙

}

List(T x)

{

first=new LinkNode(x);

first->link=first;

}

List(List&L);

~List(){}

void Insert(int i,T x);

T getHead(){return first->data;}

LinkNode* getfirst(){return first;}

void xiuf(LinkNode* a){first=a;}

LinkNode*Locate(int i);

protected:

LinkNode*first;

};

template

List::List(List&L)//复制构造函数,就是用来复制

{

T value;

LinkNode*srcptr=L.getHead();

LinkNode*destptr=first=new LinkNode;

destptr->data=srcptr->data;

while(srcptr->link!=first)

{

value=srcptr->link->data;

destptr->link=new LinkNode(value);

destptr=destptr->link;

srcptr=srcptr->link;

last=srcptr;

}

};

template

LinkNode* List::Locate(int i)//搜索含数值为i的结点,就是找第i个顶点

{

if(i<0)return NULL;

LinkNode* current=first;

int k=1;

while(k

{

current=current->link;

k++;

if(current==first)return NULL;

}

return current;

};

template

void List::Insert(int i,T x)//添加顶点。。i是用来找到链表的末尾。。

{

LinkNode* current=Locate(i);

if(current==NULL)return;

LinkNode*newNode=new LinkNode(x);

if(newNode==NULL)//当前指针为空,未取到数据的值

{

cout<<"存储分配错误!"<

exit(1);

}

newNode->link=current->link;

current->link=newNode;

};

template

void Josephus(List& Js,int n,int m)

{

LinkNode*p=Js.Locate(1),*pre;

int i,j;

for(i=1;i<=n/2;i++)//要扔入水里的人,一共是n/2=15人

{

if(m==1)//如果没次只扔序号为1那个家伙,按顺序把每次第一个人扔下去

{

cout<<"出列的人是:"<data<

pre=p->link;

//这个用来让first指向当前first下一个家伙

Js.xiuf(p->link);

delete p;

p=pre;

}

else

{

//从当前位置开始数m个人,这个人是p,pre是p的前一个家伙

for(j=1;j

{

pre=p;

p=p->link;

}

cout<<"出列的人是"<data<

//让pre连接着p

pre->link=p->link;

//如果是第一个家伙就把first改成first的下一个

if(p==Js.getfirst())Js.xiuf(p->link);

//if(p=Js.getlast())Js.movelast(pre);

delete p;

p=pre->link;

}

}

}

void main()

{

List clist(1);

int i,n,m;

cout<<"输入游戏者的人数和报数间隔:"<

cin>>n>>m;

for(i=1;i

{ clist.Insert(i,i+1);

}

Josephus(clist,n,m);

}

二、游戏技能的数据结构是怎样的

数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构;

集合结构:除了同属于一种类型外,别无其它关系

线性结构:元素之间存在一对一关系常见类型有:数组,链表,队列,栈,它们之间在操作上有所区别.例如:链表可在任意位置插入或删除元素,而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插

入,删除操作.

树形结构:元素之间存在一对多关系,常见类型有:树(有许多特例:二叉树、平衡二叉树、查找树等)

图形结构:元素之间存在多对多关系,图形结构中每个结点的前驱结点数和后续结点多个数可以任意

三、游戏开发常用数据结构

我前几个视频讲了tuple对hashmap的封装和定制,这是写通用数据结构的前奏。接下来的两个视频继续讲后续的设计,但是很多人还是不知道通用数据容器的设计架构。今天让我来和你谈谈。

数据容器类图

让我们一个一个地看容器接口对象。这是一般的容器结构。如下图所示:

数据容器对象

它包含几个接口,序列化和反序列化,用来封装对象的所有数据。为了将对象数据存储在数据库中,或者跨服务传输对象数据,需要对其进行序列化。当然,这里还有优化的空间。哪些数据需要保存,跨服时哪些数据需要带过来。我们可以标记它,筛选它。的内部实现是遍历数据区m_data中的所有元组数据,并调用elementInterface结构中的序列化和反序列化方法。以下接口是用于添加、搜索、删除和遍历数据集的接口。这里的方法只是对不同类型数据集的hashmap操作。在进行添加和删除操作时,数据更新模块会增加一个更新标记,更新模块会在每次心跳更新时将更新后的增量数据推送到客户端或其他模块。这里还关联了事件模块,会触发数据变更的相关事件。

我们来谈谈elementInterface组件。

元组数据收集类

这是最小的数据集单元,有数据访问和修改接口,包括前面提到的序列化和反序列化接口。同一组关联数据可以定义在一个数据集中,并且可以通过objectobject接口进行查找和删除。我们通过配置文件定义成员的相关类型、数据集的名称类型等其他属性,然后通过解析器直接生成代码文件。如果不用配置文件生成代码文件,我们也可以直接宏定义,但是这样会破坏数据的可读性,而且比较繁琐。更新模块和事件模块在这里也是相关联的。当数据发生变化时,会更新相关标记,触发相关事件。

数据集的定义如下:

设置元组定义

所有数据集的名称、id、成员类型和其他属性都在这里定义。而且,它是由配置文件生成的,每个数据集都有唯一的全局定义。

先说一下整个过程。玩家有一套基本的属性,比如血量,等级,名字。这时,我们可以在配置文件中定义一个数据集。集合的名字叫做basedata,有三个成员:hp,lv,name。它们对应的类型是int,int,string。这时候我们调用解析器,直接生成一个叫做basedata的元组模板类型,里面包含三种对应类型的数据。由elementInterface封装。然后生成一个elementDefine数据,它定义了该类型的所有静态信息。对了,定义了成员和这个类的枚举。

我们在程序中实例化一个玩家的object对象。然后添加一个basedata类型的数据接口,就可以访问和操作了。例如,要访问或修改血容量,首先要通过object搜索basedata类型的数据集,得到指针后,可以调用get和set操作来修改血容量的属性成员。在这个过程中,会产生相应的更新标志和数据修改事件。然后,如果我们还有一些朋友数据要保存,我们可以定义朋友数据,就像图中一样:

朋友定义

这将生成一个名为friend的数据集。如果我们添加一个朋友,我们将调用object对象来添加一个朋友集。如果我们要删除一个好友,我们会通过id找到这个集合,然后删除。还可以遍历友元类型集,对所有友元数据进行操作。

这是我在前期工作中对通用数据容器设计的思考。

相关问答:嵌入式系统软件设计中的数据结构怎么样

嵌入式行业对数据结构要求到不是特别的高,但是面试一般会考察的

、而且,个人觉得,嵌入式的前期基础课包含C,C++,数据结构,创客学院的嵌入式视频很适合提高你的编程能力。

相关内容

热门资讯

猜歌猜知识的游戏规则 一、猜歌名游戏规则有哪些1、本轮游戏共需20人参加,分成两组,每组十人。2、当主持人放出音乐后,猜到...
cf游戏安全知识答题全部正确答... 一、cf生化大赏答案大全2023cf生化奖励活动的答案是什么?2023年最新答题活动已经开始。玩家可...
超级玛丽三代游戏知识讲解 一、网络单机游戏超级玛丽,为什么通关时必须要摘下旗子我相信小时候大家都有玩过或者是听过这款非常经典的...
dnf腾讯游戏安全知识答题答案 一、2021腾讯游戏安全知识答题答案A、都是一起玩游戏的,借给他玩玩呗B、账号密码,不要告知其他人。...
设计一款游戏需要什么知识 一、游戏设计需要什么基础游戏设计需要的基础:1、知识基础:游戏设计原理、用户体验设计程序与方法、二维...
三年级测量知识的游戏题目 一、三年级测量周长的三种方法三年级测量周长的三种方法包括直接测量、使用长度单位和利用比例关系。1、直...
奇怪的冷知识游戏下载中文 一、你知道哪些关于游戏中的奇怪冷知识许多网友们在玩游戏的时候都会总结一些游戏当中的冷知识,将这些知识...
能源利用的理论知识游戏 一、飞船太空采集能源的游戏下载地址:类型:安卓游戏-冒险解谜版本:v0.1大小:61.41M语言:中...
能科普知识的小游戏下载 一、让你爱不释手的益智类小游戏有哪些游戏市场现如今可谓竞争激烈,每一款游戏也是极尽自己的能力,想打造...
扩大知识面游戏有哪些类型 一、工作之余,有哪些能够很好地拓展知识面的手机小游戏在现在这个游戏横生的时代,游戏从一开始简单的单机...