游戏设计文档(草稿持续更新)(求经验和建议)

更新时间🕦 2024年6月2日23:25:03

游戏名称-我的王国(my-kingdom)

角色🤖

系别

在中国传统文化中,五行(金、木、水、火、土)是一个非常重要的概念,它们之间存在着相生和相克的关系。

相生
  1. 金生水:金属能够熔化形成水,也象征金属工具可以挖井取水。
  2. 水生木:水能够滋养树木,使其生长。
  3. 木生火:木材是火的燃料,能够助火燃烧。
  4. 火生土:火燃烧后形成灰烬,化为土壤。
  5. 土生金:土壤中可以提炼出金属。
相克
  1. 金克木:金属制成的工具可以砍伐树木。
  2. 木克土:树木的根能够深入土壤,稳固土壤,防止水土流失,但树木过多也会吸收土壤中的养分,导致土壤贫瘠。
  3. 土克水:土壤能够阻挡水的流动,有收水、防水的作用。
  4. 水克火:水能灭火。
  5. 火克金:火可以熔化金属。

铭文系统

属性

属性加成与调整

阵营

系别

名称

用户ID

等级

铭文

皮肤

装备

基础属性

下一等级所需经验值:距离下等级所需要的经验值

当前经验值:当前所有的经验值

最大生命:决定了英雄的生命值上限,影响着英雄的生存能力。

最大法力(仅限法师类英雄):决定了英雄的法力值上限,影响法师英雄的技能释放次数。

物理攻击:决定了英雄的物理伤害输出能力。

法术攻击(仅限法师类英雄):决定了英雄的法术伤害输出能力。

物理防御:决定了英雄抵抗物理伤害的能力。

法术防御:决定了英雄抵抗法术伤害的能力。

移速:决定了英雄的移动速度,影响着英雄的机动性和追击/逃跑能力。

其他属性

回血:英雄在非战斗状态下自动恢复生命值的速度。

回蓝(仅限法师类英雄):英雄在非战斗状态下自动恢复法力值的速度。

暴击率:影响英雄普通攻击触发暴击的概率,通常与射手类英雄关联较大。

暴击效果:英雄触发暴击时,额外造成的伤害比例。

攻击速度:影响英雄普通攻击的频率,对射手类英雄尤为重要。

属性与英雄定位的关系

战士类英雄:通常具有较高的物理攻击和生命值,擅长近战和生存。

坦克类英雄:具有较高的生命值和防御能力,主要负责承受伤害和保护队友。

刺客类英雄:具有高爆发和高机动性,擅长快速切入和撤离战场。

射手类英雄:具有远程物理攻击能力,擅长持续输出和风筝战术。

法师类英雄:拥有强大的远程魔法攻击能力,擅长造成范围伤害和控制战场。

辅助类英雄:主要负责支援队友,提供增益效果和控制能力。

Json数据

{
   "camp": 0,
   "attribute": "",
   "name": "",
   "skin": "",
   "rune": {
      "name": "",
      "id": 0,
      "description": "",
      "equip": false,
      "effectDataInfo": null,
      "redRuneMap": null,
      "greenRuneMap": null,
      "blueRuneMap": null
   },
   "equipments": [],
   "dataInfo": {
      "level": 1,
      "maxLevel": 0,
      "currentXp": 0,
      "xpToNextLevel": 0,
      "currentHealth": 0,
      "maxHealth": 0,
      "currentMana": 0,
      "maxMana": 0,
      "currentMoveSpeed": 0,
      "maxMoveSpeed": 0,
      "currentDefence": 0,
      "maxDefence": 0,
      "physicalDefence": 0,
      "MagicDefence": 0,
      "currentAttack": 0,
      "maxAttack": 0,
      "physicalAttack": 0,
      "magicAttack": 0,
      "healthRegen": 0,
      "manaRegen": 0,
      "criticalHitRate": 0,
      "attackSpeed": 0
   }
}

Hero结构体

package hero

import (
	"Gin-Server-01/com/server/core/tools/jsonTool"
)

type HeroRule interface {
	Harm()
}

// Hero
//
//	@Description: 英雄
type Hero struct {
	HeroRule   `json:"-"`
	Camp       uint64        `json:"camp"`       //阵营
	Attribute  AttributeEnum `json:"attribute"`  //属性
	Name       string        `json:"name"`       //英雄名称
	Skin       string        `json:"skin"`       //皮肤
	Rune       Rune          `json:"rune"`       //符文
	Equipments *[]Equipment  `json:"equipments"` //装备
	DataInfo   *DataInfo     `json:"dataInfo"`   //数据信息
}

func NewHero() *Hero {
	h := &Hero{
		Camp:       0,
		Attribute:  "",
		Name:       "",
		Skin:       "",
		Equipments: &[]Equipment{},
		DataInfo: &DataInfo{
			Level: 1,
		},
	}
	return h
}

// Builder
//  @Summary:
//  @Description: 正式创建
//  @Receiver: h
//  @Return: *Hero
//
func (h Hero) Builder() *Hero {
	//符文的影响
	if &h.Rune != nil {

	}

	//装备的影响

	return &h
}

func (h Hero) JsonStringImpl() string {
	return jsonTool.JsonFormatString(h)
}

//=========================================================================================================

//=========================================================================================================

// DataInfo
//
//	@Description:  数据信息
type DataInfo struct {
	Level    uint64 `json:"level"`    //等级
	MaxLevel uint64 `json:"maxLevel"` //满级

	CurrentXp     float64 `json:"currentXp"`     //当前经验值
	XpToNextLevel float64 `json:"xpToNextLevel"` //下一等级所需经验值

	CurrentHealth float64 `json:"currentHealth"` //当前健康值
	MaxHealth     float64 `json:"maxHealth"`     //最大健康值

	CurrentMana float64 `json:"currentMana"` //当前法力
	MaxMana     float64 `json:"maxMana"`     //最大法力

	CurrentMoveSpeed float64 `json:"currentMoveSpeed"` //当前移动速度
	MaxMoveSpeed     float64 `json:"maxMoveSpeed"`     //最大移动速度

	CurrentDefence  float64 `json:"currentDefence"`  //当前防御力
	MaxDefence      float64 `json:"maxDefence"`      //最大防御力
	PhysicalDefence float64 `json:"physicalDefence"` //物理防御
	MagicDefence    float64 `json:"MagicDefence"`    //魔法防御

	CurrentAttack  float64 `json:"currentAttack"`  //当前攻击力
	MaxAttack      float64 `json:"maxAttack"`      //最大攻击力
	PhysicalAttack float64 `json:"physicalAttack"` //物攻
	MagicAttack    float64 `json:"magicAttack"`    //法攻

	HealthRegen float64 `json:"healthRegen"` //健康值恢复
	ManaRegen   float64 `json:"manaRegen"`   //法力恢复

	CriticalHitRate float64 `json:"criticalHitRate"` //暴击率

	AttackSpeed float64 `json:"attackSpeed"` //攻速
}

func (d *DataInfo) SetLevel(Level uint64) {
	d.Level = Level
}

// AddDataInfo
//  @Summary:
//  @Description:  和另一个结构体合成新的
//  @Param: b
//

func (d *DataInfo) AddDataInfo(b *DataInfo) {
	//当为空
	if b == nil {
		return
	}
	d.Level += b.Level
	d.MaxLevel += b.MaxLevel

	d.CurrentXp += b.CurrentXp
	d.XpToNextLevel += b.XpToNextLevel

	d.CurrentHealth += b.CurrentHealth
	d.MaxHealth += b.MaxHealth

	d.CurrentMana += b.CurrentMana
	d.MaxMana += b.MaxMana

	d.CurrentMoveSpeed += b.CurrentMoveSpeed
	d.MaxMoveSpeed += b.MaxMoveSpeed

	d.CurrentDefence += b.CurrentDefence
	d.MaxDefence += b.MaxDefence
	d.PhysicalDefence += b.PhysicalDefence
	d.MagicDefence += b.MagicDefence

	d.CurrentAttack += b.CurrentAttack
	d.MaxAttack += b.MaxAttack
	d.PhysicalAttack += b.PhysicalAttack
	d.MagicAttack += b.MagicAttack

	d.HealthRegen += b.HealthRegen
	d.ManaRegen += b.ManaRegen

	d.CriticalHitRate += b.CriticalHitRate

	d.AttackSpeed += b.AttackSpeed

}

//=========================================================================================================

// Equipment
//
//	@Description: 装备
type Equipment struct {
	Owner       *Hero  `json:"owner"`       //拥有者
	Name        string `json:"name"`        //名称
	Description string `json:"description"` //描述
}

//=========================================================================================================

// Rune
//
//	@Description: 符文
type Rune struct {
	Name           string           `json:"name"`           //名称
	Id             uint64           `json:"id"`             //唯一id
	Description    string           `json:"description"`    //描述
	Equip          bool             `json:"equip"`          //是否装备
	EffectDataInfo *DataInfo        `json:"effectDataInfo"` //效果数据信息
	RedRuneMap     map[string]*Rune `json:"redRuneMap"`     //红色铭文-主要是攻击方面
	GreenRuneMap   map[string]*Rune `json:"greenRuneMap"`   //绿色铭文-主要是生命方面
	BlueRuneMap    map[string]*Rune `json:"blueRuneMap"`    //蓝色符文-主要是防御方面
}

// RecursionGetBlueRuneMapDataInfo
//
//	@Summary:
//	@Description:  递归对蓝色符文的数据累加
//	@Receiver: rune
//	@Param: owner 操作的对象
func (rune *Rune) RecursionGetBlueRuneMapDataInfo(owner *Hero) {
	//就一层
	if rune.BlueRuneMap == nil && rune.Equip {
		owner.DataInfo.AddDataInfo(rune.EffectDataInfo)
		return
	}
	//二层以上
	for _, fatherRune := range rune.BlueRuneMap {
		//只要装备时
		if fatherRune.Equip == true {
			owner.DataInfo.AddDataInfo(fatherRune.EffectDataInfo)
			//将添加的置空防止重复添加
			fatherRune.EffectDataInfo = nil
			fatherRune.RecursionGetBlueRuneMapDataInfo(owner)
		}

	}

}

// RecursionGetGreenRuneMapDataInfo
//
//	@Summary:
//	@Description:  递归对绿色符文的数据累加
//	@Receiver: rune
//	@Param: owner 操作的对象
func (rune *Rune) RecursionGetGreenRuneMapDataInfo(owner *Hero) {
	//就一层
	if rune.GreenRuneMap == nil && rune.Equip {
		owner.DataInfo.AddDataInfo(rune.EffectDataInfo)
		return
	}
	//二层以上
	for _, fatherRune := range rune.GreenRuneMap {
		//只要装备时
		if fatherRune.Equip == true {
			owner.DataInfo.AddDataInfo(fatherRune.EffectDataInfo)
			//将添加的置空防止重复添加
			fatherRune.EffectDataInfo = nil
			fatherRune.RecursionGetGreenRuneMapDataInfo(owner)
		}

	}

}

// RecursionGetRedRuneMapDataInfo
//
//	@Summary:
//	@Description:  递归对红色符文的数据累加
//	@Receiver: rune
//	@Param: owner 操作的对象
func (rune *Rune) RecursionGetRedRuneMapDataInfo(owner *Hero) {
	//就一层
	if rune.RedRuneMap == nil && rune.Equip {
		owner.DataInfo.AddDataInfo(rune.EffectDataInfo)
		return
	}
	//二层以上
	for _, fatherRune := range rune.RedRuneMap {

		//只要装备时
		if fatherRune.Equip == true {
			owner.DataInfo.AddDataInfo(fatherRune.EffectDataInfo)
			//将添加的置空防止重复添加
			fatherRune.EffectDataInfo = nil
			fatherRune.RecursionGetRedRuneMapDataInfo(owner)
		}

	}

}

// AddRedRuneMap
//
//		@Summary:
//		@Description:  红色铭文-主要是攻击方面
//	    @Param: owner 拥有者
//		@Param: keyName 名称
//		@Param: attackRune 攻击符文树
func (rune *Rune) AddRedRuneMap(owner *Hero, keyName string, attackRune Rune) {

	//符文对象对子符文扩展
	if rune.RedRuneMap == nil {
		rune.RedRuneMap = make(map[string]*Rune)
	}
	//添加到子符文数据结构中
	rune.RedRuneMap[keyName] = &attackRune
	//数据生效-递归
	rune.RecursionGetRedRuneMapDataInfo(owner)

}

// AddGreenRuneMap
//
//	@Summary:
//	@Description:  绿色铭文-主要是生命方面
//	@Receiver: rune
//	@Param: key
//	@Param: healthRune
func (rune *Rune) AddGreenRuneMap(owner *Hero, keyName string, attackRune Rune) {

	//符文对象对子符文扩展
	if rune.GreenRuneMap == nil {
		rune.GreenRuneMap = make(map[string]*Rune)
	}
	//添加到子符文数据结构中
	rune.GreenRuneMap[keyName] = &attackRune
	//数据生效-递归
	rune.RecursionGetGreenRuneMapDataInfo(owner)
}

// AddBlueRuneMap
//
//	@Summary:
//	@Description:  蓝色符文-主要是防御方面
//	@Receiver: rune
//	@Param: key
//	@Param: defenceRune
func (rune *Rune) AddBlueRuneMap(owner *Hero, keyName string, attackRune Rune) {

	//符文对象对子符文扩展
	if rune.BlueRuneMap == nil {
		rune.BlueRuneMap = make(map[string]*Rune)
	}
	//添加到子符文数据结构中
	rune.BlueRuneMap[keyName] = &attackRune
	//数据生效-递归
	rune.RecursionGetBlueRuneMapDataInfo(owner)
}

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻找优秀的自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值