UE4 _ Shuffle for randomize Map Loading
#include "ML_MainCtrl.h"
#include "ML_SaveData.h"
#include "ML_GameInstance.h"
// Sets default values
AML_MainCtrl::AML_MainCtrl()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AML_MainCtrl::BeginPlay()
{
Super::BeginPlay();
//PutIDX : Randomize index , put00~02 : MapIDX Value 1~10
int32 PutIDX[] = { 0,1,2 };
int32 Put00[] = { 0,1,2 };
int32 Put01[] = { 3,4,5 };
int32 Put02[] = { 6,7,8,9 };
FString Put03[] = { "A","B","C","D","E","F","G","H","I","J" };
FString Put04[] = { "0","0","0" };
Shuffle(PutIDX, 3);
Shuffle(Put00, 3);
Shuffle(Put01, 3);
Shuffle(Put02, 3);
_LevelInt.Append(PutIDX, ARRAY_COUNT(PutIDX));
_LEVELNUM00.Append(Put00, ARRAY_COUNT(Put00));
_LEVELNUM01.Append(Put01, ARRAY_COUNT(Put01));
_LEVELNUM02.Append(Put02, ARRAY_COUNT(Put02));
_LevelName.Append(Put03, ARRAY_COUNT(Put03));
_LoadLevel.Append(Put04, ARRAY_COUNT(Put04));
UE_LOG(LogTemp, Warning, TEXT("intLength:%d"), _LevelInt.Num());
UE_LOG(LogTemp, Warning, TEXT("Start"));
this->Algorithm();
}
// Called every frame
void AML_MainCtrl::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void AML_MainCtrl::Algorithm()
{
UE_LOG(LogTemp, Warning, TEXT("AlgorithmStart"));
int32 _INT[] = { 0,0,0 };
//UML_SaveData* _SaveData = Cast<UML_SaveData>(UGameplayStatics::CreateSaveGameObject(UML_SaveData::StaticClass()));
UML_GameInstance* _SaveData = Cast<UML_GameInstance>(GetGameInstance());
for (int i = 0; i < _LevelInt.Num(); i++) {
if (_LevelInt[i] == 0) {
_INT[i] = _LEVELNUM00[0];
}
else if (_LevelInt[i] == 1) {
_INT[i] = _LEVELNUM01[0];
}
else if (_LevelInt[i] == 2) {
_INT[i] = _LEVELNUM02[0];
}
else {
UE_LOG(LogTemp, Warning, TEXT("INT_Randomize_Error"));
}
}
for (int i = 0; i < 3; i++) {
_SaveData->_LEVELIDX[i] = _INT[i];
UE_LOG(LogTemp, Warning, TEXT("LevelIDX:%d"), _SaveData->_LEVELIDX[i]);
}
UE_LOG(LogTemp, Warning, TEXT("LEVEL00:%d"), _SaveData->_LEVELIDX[0]);
UE_LOG(LogTemp, Warning, TEXT("LEVEL01:%d"), _SaveData->_LEVELIDX[1]);
UE_LOG(LogTemp, Warning, TEXT("LEVEL02:%d"), _SaveData->_LEVELIDX[2]);
this->SetString();
}
void AML_MainCtrl::Shuffle(int deck[], int len) {
int temp = 0;
int randomIdx = 0;
for (int i = 0; i < len; i++) {
randomIdx = rand() % len;
temp = deck[i];
deck[i] = deck[randomIdx];
deck[randomIdx] = temp;
}
}
void AML_MainCtrl::SetString() {
//UML_SaveData* _SaveData = Cast<UML_SaveData>(UGameplayStatics::CreateSaveGameObject(UML_SaveData::StaticClass()));
UML_GameInstance* _GameInstance = Cast<UML_GameInstance>(GetGameInstance());
for (int i = 0; i < 3; i++) {
int A = _GameInstance->_LEVELIDX[i];
_LoadLevel[i] = _LevelName[A];
}
}
#include "ML_SaveData.h"
#include "ML_GameInstance.h"
// Sets default values
AML_MainCtrl::AML_MainCtrl()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AML_MainCtrl::BeginPlay()
{
Super::BeginPlay();
//PutIDX : Randomize index , put00~02 : MapIDX Value 1~10
int32 PutIDX[] = { 0,1,2 };
int32 Put00[] = { 0,1,2 };
int32 Put01[] = { 3,4,5 };
int32 Put02[] = { 6,7,8,9 };
FString Put03[] = { "A","B","C","D","E","F","G","H","I","J" };
FString Put04[] = { "0","0","0" };
Shuffle(PutIDX, 3);
Shuffle(Put00, 3);
Shuffle(Put01, 3);
Shuffle(Put02, 3);
_LevelInt.Append(PutIDX, ARRAY_COUNT(PutIDX));
_LEVELNUM00.Append(Put00, ARRAY_COUNT(Put00));
_LEVELNUM01.Append(Put01, ARRAY_COUNT(Put01));
_LEVELNUM02.Append(Put02, ARRAY_COUNT(Put02));
_LevelName.Append(Put03, ARRAY_COUNT(Put03));
_LoadLevel.Append(Put04, ARRAY_COUNT(Put04));
UE_LOG(LogTemp, Warning, TEXT("intLength:%d"), _LevelInt.Num());
UE_LOG(LogTemp, Warning, TEXT("Start"));
this->Algorithm();
}
// Called every frame
void AML_MainCtrl::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void AML_MainCtrl::Algorithm()
{
UE_LOG(LogTemp, Warning, TEXT("AlgorithmStart"));
int32 _INT[] = { 0,0,0 };
//UML_SaveData* _SaveData = Cast<UML_SaveData>(UGameplayStatics::CreateSaveGameObject(UML_SaveData::StaticClass()));
UML_GameInstance* _SaveData = Cast<UML_GameInstance>(GetGameInstance());
for (int i = 0; i < _LevelInt.Num(); i++) {
if (_LevelInt[i] == 0) {
_INT[i] = _LEVELNUM00[0];
}
else if (_LevelInt[i] == 1) {
_INT[i] = _LEVELNUM01[0];
}
else if (_LevelInt[i] == 2) {
_INT[i] = _LEVELNUM02[0];
}
else {
UE_LOG(LogTemp, Warning, TEXT("INT_Randomize_Error"));
}
}
for (int i = 0; i < 3; i++) {
_SaveData->_LEVELIDX[i] = _INT[i];
UE_LOG(LogTemp, Warning, TEXT("LevelIDX:%d"), _SaveData->_LEVELIDX[i]);
}
UE_LOG(LogTemp, Warning, TEXT("LEVEL00:%d"), _SaveData->_LEVELIDX[0]);
UE_LOG(LogTemp, Warning, TEXT("LEVEL01:%d"), _SaveData->_LEVELIDX[1]);
UE_LOG(LogTemp, Warning, TEXT("LEVEL02:%d"), _SaveData->_LEVELIDX[2]);
this->SetString();
}
void AML_MainCtrl::Shuffle(int deck[], int len) {
int temp = 0;
int randomIdx = 0;
for (int i = 0; i < len; i++) {
randomIdx = rand() % len;
temp = deck[i];
deck[i] = deck[randomIdx];
deck[randomIdx] = temp;
}
}
void AML_MainCtrl::SetString() {
//UML_SaveData* _SaveData = Cast<UML_SaveData>(UGameplayStatics::CreateSaveGameObject(UML_SaveData::StaticClass()));
UML_GameInstance* _GameInstance = Cast<UML_GameInstance>(GetGameInstance());
for (int i = 0; i < 3; i++) {
int A = _GameInstance->_LEVELIDX[i];
_LoadLevel[i] = _LevelName[A];
}
}
댓글
댓글 쓰기