简单之设置物品掉落(出现)几率

#include "stdafx.h"

#include <time.h>
#include <vector>
#include <algorithm>

using namespace std;

unsigned int _cdecl Random(unsigned int m, unsigned int n);

/*
范围随机,
nMinVal 起始值,
nMaxVal 终点值:必要时一般都会+1,不同设计有不同的相加值
*/
unsigned int _cdecl Random(unsigned int nMinVal, unsigned int nMaxVal)
{
	unsigned int nPos, nDis;

	if (nMinVal == nMaxVal)
	{
		return nMaxVal;
	}
	else if (nMinVal > nMaxVal)
	{
		nPos = nMaxVal;
		nDis = nMinVal - nMaxVal;
		return (rand() % nDis + nPos);
	}
	else
	{
		nPos = nMinVal;
		nDis = nMaxVal - nMinVal;
	}
	return (rand() % nDis + nPos);
}

bool _cdecl IsDropItem(float fProbaVal);

/*
是否掉落(出现),
fProbaVal 设置几率:例如0.0003 == 0.03%(0.0003 * 100)的掉落(出现)几率
*/
bool _cdecl IsDropItem(float fProbaVal)
{
	const unsigned int nCmpRandVal = Random((unsigned int)(100.0000f * fProbaVal),
		(int)((100.0000f / fProbaVal) + 100.0000f));

	const unsigned int nCmpDropVal = (unsigned int)((100.0000f / fProbaVal) / 100.0000f);

	return ((nCmpDropVal != (nCmpRandVal / 100)) ? false : true);
}


int _tmain(int argc, _TCHAR* argv[])
{
	int nMaxCount = 500000;
	int nDropCount = 0;
	const float fProbaVal = 0.0037f;

	//初始化随机参数
	srand((unsigned int)time(NULL));

	while ((nMaxCount--))
	{
		//0.37%的几率
		if (true == IsDropItem(fProbaVal))
		{
			nDropCount += 1;
		}
	}

	nMaxCount = 500000;

	//结果基本吻合总概率
	const float fProbaResult = (float)(nDropCount / (float)(nMaxCount / 100.00f));
	printf("总掉落比率为:%f%\r\n", fProbaResult);

	return 0;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的Unity游戏打怪物的代码,怪物死亡后有几率掉落物品,玩家可以通过碰撞来捡取物品。 首先,我们需要为怪物创建一个脚本,其中包含怪物的血量和死亡掉落物品的概。 ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; public class Monster : MonoBehaviour { public int health = 100; // 怪物血量 public float dropProbability = 0.5f; // 掉落物品的概 public void TakeDamage(int damage) { health -= damage; if (health <= 0) { Die(); } } void Die() { if (Random.value < dropProbability) { // 在怪物死亡时实例化掉落物品 GameObject item = Instantiate(itemPrefab, transform.position, Quaternion.identity); item.GetComponent<Rigidbody>().AddForce(Vector3.up * 300); // 添加向上的力使物品弹起来 } Destroy(gameObject); // 销毁怪物对象 } } ``` 接下来,我们需要为玩家创建一个脚本,以便它可以捡起掉落物品。此脚本需要在玩家对象上附加。 ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { public float pickUpRadius = 2f; // 捡起物品的距离 void Update() { if (Input.GetKeyDown(KeyCode.Space)) { // 按下空格键时尝试捡起物品 Collider[] colliders = Physics.OverlapSphere(transform.position, pickUpRadius); foreach (Collider collider in colliders) { if (collider.CompareTag("Item")) { Destroy(collider.gameObject); // 处理捡起物品的逻辑 } } } } } ``` 在场景中创建怪物和物品,然后将这些脚本分别附加到怪物和玩家对象上,就可以开始游戏了! ### 回答2: 在Unity中实现游戏打怪、怪物死亡掉落物品以及玩家捡取物品的代码系统,我们可以按以下步骤进行: 1. 定义怪物及玩家的角色类,包括属性和方法。怪物角色需要有生命值、攻击力等属性,玩家角色需要有生命值、攻击力、背包等属性。 2. 创建怪物死亡事件触发函数,当怪物生命值归零时,调用该函数。该函数应包括怪物死亡后物品掉落的逻辑,可以通过生成掉落物品的游戏对象实现。 3. 创建物品捡取函数,用于玩家角色与掉落物品之间的交互。当玩家角色进入掉落物品的触发器范围内,按下特定按键时,调用该函数。该函数应包括判断是否可以捡取物品的逻辑,例如判断玩家背包是否已满等。 4. 在物品捡取函数中,当满足捡取条件时,调用背包系统相关的函数将物品添加至玩家背包中。 5. 在玩家背包类中,定义相关的属性和方法,包括背包容量、背包物品列表等,用于管理和操作背包中的物品。 6. 在Unity场景中添加怪物、玩家角色以及其他相关游戏对象,并将怪物死亡事件触发函数和物品捡取函数与相应的游戏对象绑定。 7. 在游戏中,当玩家击败怪物时,怪物的生命值会递减,直至为零时,怪物死亡事件触发函数会被调用,对应的物品掉落到场景中。玩家接触到掉落物品时,按下捡取物品的按键,物品捡取函数会被调用,物品会被添加至玩家的背包中。 通过以上步骤,我们可以在Unity中实现一个带有打怪、物品掉落和玩家捡取的游戏系统。 ### 回答3: 在Unity中制作一个怪物打击游戏,并实现怪物死亡后掉落物品、玩家捡取物品的代码系统可以按以下步骤实现: 1. 创建怪物和玩家的游戏对象,并给它们添加相应的碰撞体组件。 2. 在怪物对象上添加脚本`MonsterController`,其中包含掉落物品的函数`DropItem()`。在怪物死亡时,调用该函数生成物品对象,设置其位置和初始速度。 3. 创建物品对象的预制体,包含了物品的模型、碰撞体和脚本`ItemController`。该脚本负责物品的移动和玩家捡取的逻辑。 4. 在玩家对象上添加脚本`PlayerController`,其中包含捡取物品的函数`PickUpItem()`。使用碰撞检测,当玩家与物品发生碰撞时,调用该函数进行物品的处理。 5. 在`ItemController`中,利用`OnTriggerEnter()`函数检测玩家是否与物品发生碰撞,若发生碰撞,则调用`PlayerController`中的`PickUpItem()`函数,玩家可以获得该物品。 6. 在`PlayerController`中的`PickUpItem()`函数中,判断物品的类型,根据玩家属性增加相应数值、更新游戏UI等。 以上是一个简单的实现方式,可以根据具体需求进行修改和优化。例如,可以为物品设置特殊效果,如增加玩家血量或攻击力等。同时,在游戏中可以设定不同的怪物和不同的掉落物品,增强游戏的可玩性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值