Shuffle Bags 는 랜 덤 이 그렇게 랜 덤 하지 않 게 해 줍 니 다.
3079 단어 algorithm
내 가 처음에 게임 을 썼 을 때,나 는 표준 Random()함 수 를 자주 사용 한 후에 if 와 else 조건 을 한 무더기 써 서 내 가 예상 한 결 과 를 얻 었 다.만약 결과 가 그다지 좋 지 않다 면,나 는 게임 이 재미 있어 질 때 까지 더 많은 조건 을 써 서 여과 하거나 선별 할 것 이다.최근 에 나 는 더 좋 은 방법 이 있다 는 것 을 발견 했다.내 장 된 Random 클래스 는 문제 가 없습니다.문 제 는 내 장 된 Random 클래스 를 사용 하면 우리 가 기대 하 는 효 과 를 얻 기 어렵 다 는 것 입 니 다.
실제로 동전 을 던 지 는 것 을 예 로 들 면 여러 번 꽃 이나 글 자 를 던 지기 도 한다.그렇다면 게임 에서 여러 차례 의 연속 적 인 폭격 이나 경직 으로 나타 날 수 있다.때로는 폭격 과 경직 의 확률 이 낮 지만 연속 적 으로 나타 날 수 있어 이상 하 다.그렇다면 비슷 한 문 제 를 해결 하기 위해 선배 들 은 특수 치 여과 등 여러 가지 방법 을 생각 했다.우리 가 오늘 소개 한 것 은 Shuffle Bag 기술 입 니 다.당신 의 무 작위 수 를 무 작위 로 하지 않 고 당신 이 통제 할 수 있 습 니 다.
셔 플 백 이란 무엇 일 까요?
Shuffle Bag 은 우리 가 난수 분 포 를 제어 할 수 있 는 기술 이다.
그 주요 원 리 는:
특정 분포 수치의 집합 을 설계 하 다
집합 중의 수 치 를 가방 에 옮 겨 라
4.567917.가방 이 비어 있 으 면 데 이 터 를 다시 놓 고 다시 어 지 럽 힌 다음 에 재 활용 합 니 다
Shuffle Bag 의 특성 은 다음 과 같 습 니 다.
4.567917.집합 이외 의 데 이 터 는 발생 하지 않 습 니 다
4.567917.이것 은 아직도 임 의 성 을 가지 고 요소 가 나타 나 는 순 서 는 임 의 이다
4.567917.중복 추출 이 아니 라 데이터 가 특정한 요 소 를 집중 시 키 면 기껏해야 두 번 연속 으로 나타난다
어떻게 셔 플 백 을 실현 합 니까?
원문 은 C\#를 사용 하고 여 기 는 Unity C\#와 범 형 을 사용 하여 다른 언어 로 쉽게 번역 할 수 있 습 니 다.실현 은 먼저 전체 가방 을 랜 덤 으로 흐 트 러 뜨리 는 것 이 아니 라 매번 추출 할 때 만 랜 덤 교환 을 한다.이렇게 하면 성능 을 분담 할 수 있 고 가방 데이터 가 비교적 많 을 때 가방 을 어 지 럽 히 면 특정한 프레임 의 과도 한 성능 을 소모 하지 않 는 다.
using System.Collections.Generic;
using UnityEngine;
public class ShuffleBag {
private List data;
private T currentItem;
private int currentPosition = -1;
private int Capacity { get { return data.Capacity; } }
public int Size { get { return data.Count; } }
public ShuffleBag(int initCapacity)
{
data = new List(initCapacity);
}
public void Add(T item, int amount)
{
for (int i = 0; i < amount; i++)
data.Add(item);
currentPosition = Size - 1;
}
public T Next()
{
if (currentPosition < 1)
{
currentPosition = Size - 1;
currentItem = data[0];
return currentItem;
}
var pos = Random.Range(0,currentPosition);
currentItem = data[pos];
data[pos] = data[currentPosition];
data[currentPosition] = currentItem;
currentPosition--;
return currentItem;
}
}
Shuffle Bag 는 어떻게 사용 합 니까?
제 프로젝트 에서 저 는 NPC 가 다 친 애니메이션 을 재생 할 확률 이 10 분 의 1 이 기 를 바 랍 니 다.그리고 저 는 그 가 가끔 다 친 애니메이션 을 여러 번 연속 으로 재생 하 는 것 을 보고 싶 지 않 고 다 친 애니메이션 을 오래 재생 하지 않 고 싶 지 않 습 니 다.
ShuffleBag hurtBag = new ShuffleBag(10);
hurtBag.Add(false, 9);
hurtBag.Add(true, 1);
// ,
if(hurtBag.Next())
{
Play();
}
부록
참고 원문 링크 를 첨부 하 다 Shuffle Bags: Making Random() Feel More Random 영 어 를 잘 하 는 학생 은 직접 원문 을 볼 수 있다.그리고 이 원문의 제목 이 좀 의 심 스 러 워 서 제 번역문 제목 이 바 뀌 었 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
알고리즘 체조 7하나의 정수형 배열이 전달됩니다. 배열에서 다른 요소의 순서를 유지하면서 0과 같은 모든 요소를 왼쪽으로 이동시키는 알고리즘을 구현합시다. 다음 정수 배열을 살펴 보겠습니다. 모든 0과 같은 요소를 왼쪽으로 이동하면...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.