parent
4f23051547
commit
f0bc050f00
@ -0,0 +1,18 @@ |
|||||||
|
#include "Enemy.h" |
||||||
|
|
||||||
|
Enemy::Enemy(olc::vf2d pos,float dir,olc::vf2d spd,olc::Renderable&img) |
||||||
|
:Object(pos,dir,spd,img,false){ |
||||||
|
col=olc::DARK_RED; |
||||||
|
} |
||||||
|
|
||||||
|
void Enemy::Update(Polymorphism*pge,float fElapsedTime){ |
||||||
|
moveTimer-=fElapsedTime; |
||||||
|
if(moveTimer<=0){ |
||||||
|
dir=(rand()%4)*3.14159/2; |
||||||
|
moveTimer=0.5; |
||||||
|
} |
||||||
|
spd=olc::vf2d{cos(dir),sin(dir)}*32; |
||||||
|
} |
||||||
|
|
||||||
|
void Enemy::Collision(Object*collidedObj){ |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
#pragma once |
||||||
|
#include "Object.h" |
||||||
|
#include "Polymorphism.h" |
||||||
|
|
||||||
|
struct Enemy:Object{ |
||||||
|
float moveTimer=0.5; |
||||||
|
Enemy(olc::vf2d pos,float dir,olc::vf2d spd,olc::Renderable&img); |
||||||
|
void Update(Polymorphism*pge,float fElapsedTime)override; |
||||||
|
void Collision(Object*collidedObj)override; |
||||||
|
}; |
@ -0,0 +1,56 @@ |
|||||||
|
#include "Object.h" |
||||||
|
#include "Polymorphism.h" |
||||||
|
|
||||||
|
Object::Object(olc::vf2d pos,float dir,olc::vf2d spd,olc::Renderable&img,bool friendly) |
||||||
|
:pos(pos),dir(dir),spd(spd),img(img),friendly(friendly),radius(img.Sprite()->width/2){} |
||||||
|
|
||||||
|
void Object::InternalUpdate(Polymorphism*pge,float fElapsedTime){ |
||||||
|
if(spd.y!=0||spd.x!=0){ |
||||||
|
dir=atan2(spd.y,spd.x); |
||||||
|
} |
||||||
|
|
||||||
|
pos+=spd*fElapsedTime; |
||||||
|
|
||||||
|
if(pos.x<0){ |
||||||
|
pos.x=0; |
||||||
|
} |
||||||
|
if(pos.y<0){ |
||||||
|
pos.y=0; |
||||||
|
} |
||||||
|
if(pos.x>=pge->ScreenWidth()){ |
||||||
|
pos.x=pge->ScreenWidth(); |
||||||
|
} |
||||||
|
if(pos.y>=pge->ScreenHeight()){ |
||||||
|
pos.y=pge->ScreenHeight(); |
||||||
|
} |
||||||
|
|
||||||
|
if(spd.x>0){ |
||||||
|
spd.x-=FRICTION*fElapsedTime; |
||||||
|
if(spd.x<=0){ |
||||||
|
spd.x=0; |
||||||
|
} |
||||||
|
} |
||||||
|
if(spd.x<0){ |
||||||
|
spd.x+=FRICTION*fElapsedTime; |
||||||
|
if(spd.x>=0){ |
||||||
|
spd.x=0; |
||||||
|
} |
||||||
|
} |
||||||
|
if(spd.y>0){ |
||||||
|
spd.y-=FRICTION*fElapsedTime; |
||||||
|
if(spd.y<=0){ |
||||||
|
spd.y=0; |
||||||
|
} |
||||||
|
} |
||||||
|
if(spd.y<0){ |
||||||
|
spd.y+=FRICTION*fElapsedTime; |
||||||
|
if(spd.y>=0){ |
||||||
|
spd.y=0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void Object::Draw(Polymorphism*pge,float fElapsedTime){ |
||||||
|
pge->DrawRotatedDecal(pos,img.Decal(), |
||||||
|
dir,img.Sprite()->Size()/2,{1,1},col); |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
#pragma once |
||||||
|
#include "olcPixelGameEngine.h" |
||||||
|
class Polymorphism; |
||||||
|
|
||||||
|
struct Object{ |
||||||
|
olc::vf2d pos; |
||||||
|
float dir; |
||||||
|
olc::vf2d spd; |
||||||
|
olc::Renderable&img; |
||||||
|
bool friendly=false; //If true, this is a player unit.
|
||||||
|
const float FRICTION = 100.f; |
||||||
|
olc::Pixel col; |
||||||
|
bool dead=false; |
||||||
|
float radius=8; |
||||||
|
Object(olc::vf2d pos,float dir,olc::vf2d spd,olc::Renderable&img,bool friendly); |
||||||
|
virtual void Update(Polymorphism*pge,float fElapsedTime)=0; |
||||||
|
virtual void Collision(Object*collidedObj)=0; |
||||||
|
void InternalUpdate(Polymorphism*pge,float fElapsedTime); |
||||||
|
void Draw(Polymorphism*pge,float fElapsedTime); |
||||||
|
}; |
@ -0,0 +1,27 @@ |
|||||||
|
#include "Player.h" |
||||||
|
|
||||||
|
Player::Player(olc::vf2d pos,float dir,olc::vf2d spd,olc::Renderable&img) |
||||||
|
:Object(pos,dir,spd,img,true){ |
||||||
|
col=olc::BLUE; |
||||||
|
} |
||||||
|
|
||||||
|
void Player::Update(Polymorphism*pge,float fElapsedTime){ |
||||||
|
if(pge->GetKey(olc::RIGHT).bHeld){ |
||||||
|
spd.x=32; |
||||||
|
} |
||||||
|
if(pge->GetKey(olc::UP).bHeld){ |
||||||
|
spd.y=-32; |
||||||
|
} |
||||||
|
if(pge->GetKey(olc::DOWN).bHeld){ |
||||||
|
spd.y=32; |
||||||
|
} |
||||||
|
if(pge->GetKey(olc::LEFT).bHeld){ |
||||||
|
spd.x=-32; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
void Player::Collision(Object*collidedObj){ |
||||||
|
if(!collidedObj->friendly){ |
||||||
|
collidedObj->dead=true; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
#pragma once |
||||||
|
#include "Object.h" |
||||||
|
#include "Polymorphism.h" |
||||||
|
|
||||||
|
struct Player:Object{ |
||||||
|
Player(olc::vf2d pos,float dir,olc::vf2d spd,olc::Renderable&img); |
||||||
|
void Update(Polymorphism*pge,float fElapsedTime)override; |
||||||
|
void Collision(Object*collidedObj)override; |
||||||
|
}; |
@ -0,0 +1,65 @@ |
|||||||
|
#define OLC_PGE_APPLICATION |
||||||
|
#include "olcPixelGameEngine.h" |
||||||
|
#include "Polymorphism.h" |
||||||
|
#include "Player.h" |
||||||
|
#include "Enemy.h" |
||||||
|
|
||||||
|
|
||||||
|
Polymorphism::Polymorphism() |
||||||
|
{ |
||||||
|
// Name your application
|
||||||
|
sAppName = "Polymorphism Example"; |
||||||
|
} |
||||||
|
|
||||||
|
bool Polymorphism::OnUserCreate() |
||||||
|
{ |
||||||
|
player_img.Load("player.png"); |
||||||
|
objects.push_back(new Player({16,16},0,{0,0},player_img)); |
||||||
|
objects.push_back(new Enemy({64,64},0,{0,0},player_img)); |
||||||
|
objects.push_back(new Enemy({32,108},0,{0,0},player_img)); |
||||||
|
objects.push_back(new Enemy({48,86},0,{0,0},player_img)); |
||||||
|
objects.push_back(new Enemy({128,156},0,{0,0},player_img)); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
bool Polymorphism::OnUserUpdate(float fElapsedTime){ |
||||||
|
for(Object*obj:objects){ |
||||||
|
obj->Update(this,fElapsedTime); |
||||||
|
obj->InternalUpdate(this,fElapsedTime); |
||||||
|
} |
||||||
|
|
||||||
|
for(int listMarker=0;listMarker<objects.size();listMarker++){ |
||||||
|
for(int objMarker=listMarker;objMarker<objects.size();objMarker++){ |
||||||
|
if(listMarker==objMarker)continue; |
||||||
|
auto dist = [&](olc::vf2d pos1,olc::vf2d pos2){return sqrt(pow(pos1.x-pos2.x,2)+pow(pos1.y-pos2.y,2));}; |
||||||
|
Object*obj1=objects[listMarker]; |
||||||
|
Object*obj2=objects[objMarker]; |
||||||
|
if(dist(obj1->pos,obj2->pos)<(obj1->radius+obj2->radius)){ |
||||||
|
obj1->Collision(obj2); |
||||||
|
obj2->Collision(obj1); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
for(Object*obj:objects){ |
||||||
|
obj->Draw(this,fElapsedTime); |
||||||
|
} |
||||||
|
|
||||||
|
std::erase_if(objects,[&](Object*obj){ |
||||||
|
if(obj->dead){ |
||||||
|
delete obj; |
||||||
|
return true; |
||||||
|
} else { |
||||||
|
return false; |
||||||
|
} |
||||||
|
}); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
Polymorphism demo; |
||||||
|
if (demo.Construct(256, 240, 4, 4)) |
||||||
|
demo.Start(); |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
#pragma once |
||||||
|
#include "olcPixelGameEngine.h" |
||||||
|
|
||||||
|
class Object; |
||||||
|
|
||||||
|
class Polymorphism : public olc::PixelGameEngine |
||||||
|
{ |
||||||
|
public: |
||||||
|
Polymorphism(); |
||||||
|
|
||||||
|
olc::Renderable player_img; |
||||||
|
std::vector<Object*>objects; |
||||||
|
|
||||||
|
public: |
||||||
|
bool OnUserCreate() override; |
||||||
|
bool OnUserUpdate(float fElapsedTime) override; |
||||||
|
}; |
@ -0,0 +1,149 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup Label="ProjectConfigurations"> |
||||||
|
<ProjectConfiguration Include="Debug|Win32"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|Win32"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Debug|x64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|x64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
</ItemGroup> |
||||||
|
<PropertyGroup Label="Globals"> |
||||||
|
<VCProjectVersion>16.0</VCProjectVersion> |
||||||
|
<Keyword>Win32Proj</Keyword> |
||||||
|
<ProjectGuid>{74c22119-2b9b-40c8-84b7-e4e7a5c2e7a1}</ProjectGuid> |
||||||
|
<RootNamespace>Polymorphism</RootNamespace> |
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v143</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||||
|
<ImportGroup Label="ExtensionSettings"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="Shared"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<PropertyGroup Label="UserMacros" /> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<LanguageStandard>stdcpp20</LanguageStandard> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="Enemy.h" /> |
||||||
|
<ClInclude Include="Object.h" /> |
||||||
|
<ClInclude Include="olcPixelGameEngine.h" /> |
||||||
|
<ClInclude Include="Player.h" /> |
||||||
|
<ClInclude Include="Polymorphism.h" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="Enemy.cpp" /> |
||||||
|
<ClCompile Include="Object.cpp" /> |
||||||
|
<ClCompile Include="Player.cpp" /> |
||||||
|
<ClCompile Include="Polymorphism.cpp" /> |
||||||
|
</ItemGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||||
|
<ImportGroup Label="ExtensionTargets"> |
||||||
|
</ImportGroup> |
||||||
|
</Project> |
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 4.9 KiB |
Loading…
Reference in new issue