Add project files.

master
sigonasr2 1 year ago
parent 4f23051547
commit f0bc050f00
  1. 31
      Polymorphism.sln
  2. 18
      Polymorphism/Enemy.cpp
  3. 10
      Polymorphism/Enemy.h
  4. 56
      Polymorphism/Object.cpp
  5. 20
      Polymorphism/Object.h
  6. 27
      Polymorphism/Player.cpp
  7. 9
      Polymorphism/Player.h
  8. 65
      Polymorphism/Polymorphism.cpp
  9. 17
      Polymorphism/Polymorphism.h
  10. 149
      Polymorphism/Polymorphism.vcxproj
  11. 48
      Polymorphism/Polymorphism.vcxproj.filters
  12. 6695
      Polymorphism/olcPixelGameEngine.h
  13. BIN
      Polymorphism/player.png

@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33516.290
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Polymorphism", "Polymorphism\Polymorphism.vcxproj", "{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Debug|x64.ActiveCfg = Debug|x64
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Debug|x64.Build.0 = Debug|x64
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Debug|x86.ActiveCfg = Debug|Win32
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Debug|x86.Build.0 = Debug|Win32
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Release|x64.ActiveCfg = Release|x64
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Release|x64.Build.0 = Release|x64
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Release|x86.ActiveCfg = Release|Win32
{74C22119-2B9B-40C8-84B7-E4E7A5C2E7A1}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9D0EEF97-2130-4798-A9F6-0751AF1EAAB2}
EndGlobalSection
EndGlobal

@ -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>

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="olcPixelGameEngine.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Object.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Player.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Polymorphism.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Enemy.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Polymorphism.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Player.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Enemy.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Object.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Loading…
Cancel
Save