c语⾔跑酷⼩游戏代码,跑酷游戏代码引擎:UE4 4.18.3
代码结构
运⾏图
PikaqiuThirdTestGameMode.h// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "ated.h"
UCLASS(minimalapi)
class APikaqiuThirdTestGameMode : public AGameModeBase
{
GENERATED_BODY()
//存储直线的地板
UPROPERTY()
TArray> pikaMidArr;
//存储左右的地板
UPROPERTY()
TArray> pikaLRArr;
public:
APikaqiuThirdTestGameMode();
virtual void BeginPlay() override;
//添加地板
void PikaAddFloor();
//打印测试
void PikaPirnt(FString piksStr);
TSubclassOf pikaNewFloor;
FTransform pikaNextTransforms;
//获取随机的地板
TSubclassOf PikaRandomInputFloor();
/
/将UI界⾯加载到屏幕上
void PikaUIAddToScreen();
//UI实例变量
UUserWidget *PikaMainUI;
TSubclassOf PikaUIMainInstance;
//确定⾦币的⽣成⽅向X轴或Y轴
//1:X轴负⽅向 2:Y轴负⽅向 3:X轴正⽅向 4:Y轴正⽅向
//LEFT -1 RIGHT +1
int32 IsX;
c语言编程小游戏
};
PikaqiuThirdTestGameMode.cpp// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "PikaqiuThirdTestCharacter.h"
#include "UObject/ConstructorHelpers.h"
#include "PikaFloor.h"
#include "PikaMainUI.h"
#include "Engine.h"
#include "PikaGameStateBase.h"
APikaqiuThirdTestGameMode::APikaqiuThirdTestGameMode()
{
// set default pawn class to our Blueprinted character
static ConstructorHelpers::FClassFinder PlayerPawnBPClass(TEXT("/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter
if (PlayerPawnBPClass.Class != NULL)
{
DefaultPawnClass = PlayerPawnBPClass.Class;
}
//初始化容器
pikaMidArr.Empty();
pikaLRArr.Empty();
//获取蓝图中的直线地板
TSubclassOf pikaFloorBP01 = LoadClass(NULL , TEXT("Blueprint'/Game/Floor/BP/PikaFloorBP01.PikaFloorBP01_C'")); pikaMidArr.Add(pikaFloorBP01);
TSubclassOf pikaFloorBP02 = LoadClass(NULL, TEXT("Blueprint'/Game/Floor/BP/PikaFloorBP02.Pi
kaFloorBP02_C'")); pikaMidArr.Add(pikaFloorBP02);
TSubclassOf pikaFloorBP03 = LoadClass(NULL, TEXT("Blueprint'/Game/Floor/BP/PikaFloorBP03.PikaFloorBP03_C'")); pikaMidArr.Add(pikaFloorBP03);
//获取蓝图中的上下地板
TSubclassOf pikaFloorBP04 = LoadClass(NULL, TEXT("Blueprint'/Game/Floor/BP/PikaFloorBP04.PikaFloorBP04_C'")); pikaMidArr.Add(pikaFloorBP04);
TSubclassOf pikaFloorBP05 = LoadClass(NULL, TEXT("Blueprint'/Game/Floor/BP/PikaFloorBP05.PikaFloorBP05_C'")); pikaMidArr.Add(pikaFloorBP05);
//获取蓝图中的左右地板
TSubclassOf pikaFloorBP06 = LoadClass(NULL, TEXT("Blueprint'/Game/Floor/BP/PikaFloorBP06.PikaFloorBP06_C'")); pikaLRArr.Add(pikaFloorBP0
6);
TSubclassOf pikaFloorBP07 = LoadClass(NULL, TEXT("Blueprint'/Game/Floor/BP/PikaFloorBP07.PikaFloorBP07_C'"));
//获取⾃定义的UI类实例
static ConstructorHelpers::FClassFinder PikaWidget(TEXT("/Game/UMG/PikaMainUI")); PikaUIMainInstance = PikaWidget.Class;
//加载我们的GameState
GameStateClass = APikaGameStateBase::StaticClass();
IsX = 1;
}
void APikaqiuThirdTestGameMode::BeginPlay()
{
Super::BeginPlay();
if (GetWorld())
{
for (int32 i=0 ; i<10 ; i++)
{
PikaAddFloor();
}
}
//将UI界⾯加载到屏幕上
PikaUIAddToScreen();
}
void APikaqiuThirdTestGameMode::PikaAddFloor()
{
pikaNewFloor = PikaRandomInputFloor();
if (pikaNewFloor != NULL)
{
FVector const pikaLoction = pikaNextTransforms.GetLocation();
FRotator pikaRotation(pikaNextTransforms.Rotator());
//在场景中放⼊地板
APikaFloor *pikaFloor = GetWorld()->SpawnActor(pikaNewFloor, pikaLoction, pikaRotation); //记录当前地板的位置,做为下⼀个⽣成的地板的初始位置
pikaNextTransforms = pikaFloor->PikaGetAttachToTransform();
//PikaPirnt(pikaNextTransforms.ToString());
}
void APikaqiuThirdTestGameMode::PikaPirnt(FString piksStr)
{
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, piksStr); }
}
//获取随机的地板
TSubclassOf APikaqiuThirdTestGameMode::PikaRandomInputFloor()
{
//return pikaMidArr[2];
int32 pikaRandom = FMath::RandRange(1, 100);
//⽣成直线地板(包括上下地板)的概率
int32 pikaProbMid = 60;
if (pikaRandom <= pikaProbMid)
{
//⽣成直线地板
int32 pikaSumMidArr = pikaMidArr.Num();
if (pikaSumMidArr)
{
//组数开始的下标为0
int32 pikaIndexMid = FMath::RandRange(0, pikaSumMidArr - 1);
return pikaMidArr[pikaIndexMid];
}
}
else
{
//⽣成左右地板
int32 pikaSumLRArr = pikaLRArr.Num();
if (pikaSumLRArr)
{
int32 pikaIndexLR = FMath::RandRange(0, pikaSumLRArr - 1);
return pikaLRArr[pikaIndexLR];

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。