From c9c7b6ea6fb0004f6a8475ad9acf77e51b684bfc Mon Sep 17 00:00:00 2001 From: Helana Nady Date: Thu, 4 Apr 2024 01:13:43 +0200 Subject: [PATCH] :sparkles: Created Army Classes (#7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ➕ added Initial classes code * ➕ Added more parameters * :memo: created army classes * ➕ added unit classes * 🐛 fixed spacing * 🐛 fixed namings * :hammer: Fixed Visual Studio filter files * :pencil2: Fixed typos * :art: Improved code consistency * :sparkles: Added Unit.cpp * :memo: Added func declaration for abstract functions * :sparkles: Fixed ifndef causing build errors * ➕ fixed lists of armies * :art: improved Container functions efficiency/consistency by making them all inline functions --------- Co-authored-by: Habiba Ayman Co-authored-by: AhmedSobhy01 --- Alien-Invasion.vcxproj | 8 ++++++-- Alien-Invasion.vcxproj.filters | 23 +++++++++++++++++++---- ArmyClasses/AlienArmy.h | 20 ++++++++++++++++++++ ArmyClasses/Army.h | 14 ++++++++++++++ ArmyClasses/EarthArmy.h | 21 +++++++++++++++++++++ Containers/ArrayStack.h | 15 +++++++-------- Containers/Deque.h | 8 ++++---- Containers/LinkedQueue.h | 20 ++++++++++---------- Containers/Node.h | 27 ++++++++++++++------------- Containers/PriorityNode.h | 21 +++++++++++---------- Containers/PriorityQueue.h | 31 ++++++++++++++++--------------- Containers/QueueADT.h | 8 ++++---- Containers/StackADT.h | 4 ++-- UnitClasses/AlienDrone.h | 8 +++++--- UnitClasses/AlienMonster.h | 8 +++++--- UnitClasses/AlienSoldier.h | 11 +++++++++++ UnitClasses/AlienSolider.h | 9 --------- UnitClasses/EarthGunnery.h | 10 ++++++---- UnitClasses/EarthSoldier.h | 11 +++++++++++ UnitClasses/EarthSolider.h | 10 ---------- UnitClasses/EarthTank.h | 10 ++++++---- UnitClasses/Unit.cpp | 6 ++++++ UnitClasses/Unit.h | 7 +------ 23 files changed, 199 insertions(+), 111 deletions(-) create mode 100644 ArmyClasses/AlienArmy.h create mode 100644 ArmyClasses/Army.h create mode 100644 ArmyClasses/EarthArmy.h create mode 100644 UnitClasses/AlienSoldier.h delete mode 100644 UnitClasses/AlienSolider.h create mode 100644 UnitClasses/EarthSoldier.h delete mode 100644 UnitClasses/EarthSolider.h create mode 100644 UnitClasses/Unit.cpp diff --git a/Alien-Invasion.vcxproj b/Alien-Invasion.vcxproj index 07b23f0..c0f837d 100644 --- a/Alien-Invasion.vcxproj +++ b/Alien-Invasion.vcxproj @@ -20,6 +20,7 @@ + @@ -32,11 +33,14 @@ - + - + + + + 17.0 diff --git a/Alien-Invasion.vcxproj.filters b/Alien-Invasion.vcxproj.filters index cb0c941..518a036 100644 --- a/Alien-Invasion.vcxproj.filters +++ b/Alien-Invasion.vcxproj.filters @@ -1,4 +1,4 @@ - + @@ -7,6 +7,9 @@ {d6265d0d-9e06-4a0b-9c88-39e5e3415fa3} + + {8a245181-84c7-4cb6-9cc0-a558bcaf50e4} + @@ -39,13 +42,13 @@ UnitsClasses - + UnitsClasses UnitsClasses - + UnitsClasses @@ -56,7 +59,19 @@ - + + ArmyClasses + + + ArmyClasses + + + ArmyClasses + + + + + UnitsClasses diff --git a/ArmyClasses/AlienArmy.h b/ArmyClasses/AlienArmy.h new file mode 100644 index 0000000..0385dac --- /dev/null +++ b/ArmyClasses/AlienArmy.h @@ -0,0 +1,20 @@ +#ifndef ALIEN_ARMY_H +#define ALIEN_ARMY_H + +#include "Army.h" +#include "..\Containers\LinkedQueue.h" +#include "..\Containers\ArrayStack.h" +#include "..\Containers\Deque.h" +#include "..\UnitClasses\Unit.h" +#include "..\UnitClasses\AlienSoldier.h" +#include "..\UnitClasses\AlienMonster.h" +#include "..\UnitClasses\AlienDrone.h" + +class AlienArmy: public Army +{ + LinkedQueue soliders; + // Array monsters; + Deque drones; +}; + +#endif \ No newline at end of file diff --git a/ArmyClasses/Army.h b/ArmyClasses/Army.h new file mode 100644 index 0000000..de2396e --- /dev/null +++ b/ArmyClasses/Army.h @@ -0,0 +1,14 @@ +#ifndef ARMY_H +#define ARMY_H + +class Army +{ +public: + virtual void addUnit() = 0; // Will take a pointer to Unit as a parameter + virtual void removeUnit() = 0; + virtual void print() const = 0; + virtual void attack() = 0; +}; + +#endif + diff --git a/ArmyClasses/EarthArmy.h b/ArmyClasses/EarthArmy.h new file mode 100644 index 0000000..18be8d2 --- /dev/null +++ b/ArmyClasses/EarthArmy.h @@ -0,0 +1,21 @@ +#ifndef EARTH_ARMY_H +#define EARTH_ARMY_H + +#include "Army.h" +#include "..\UnitClasses\Unit.h" +#include "..\Containers\ArrayStack.h" +#include "..\Containers\LinkedQueue.h" +#include "..\Containers\PriorityQueue.h" +#include "..\UnitClasses\Unit.h" +#include "..\UnitClasses\EarthSoldier.h" +#include "..\UnitClasses\EarthTank.h" +#include "..\UnitClasses\EarthGunnery.h" + +class EarthArmy: public Army +{ + LinkedQueue soldiers; + ArrayStack tanks; + PriorityQueue gunneries; +}; + +#endif diff --git a/Containers/ArrayStack.h b/Containers/ArrayStack.h index cfec059..9cea6f4 100644 --- a/Containers/ArrayStack.h +++ b/Containers/ArrayStack.h @@ -1,12 +1,12 @@ -#ifndef ARRAYSTACK_H -#define ARRAYSTACK_H +#ifndef ARRAY_STACK_H +#define ARRAY_STACK_H #include #include "StackADT.h" -// The default size is 100 +// The default size is 1000 template -class ArrayStack : public StackADT +class ArrayStack: public StackADT { enum { MAX_SIZE = 1000 }; private: @@ -22,11 +22,10 @@ class ArrayStack : public StackADT void printList() const; int getCount() const; }; -#endif template -inline ArrayStack::ArrayStack() : top(-1) -{} +inline ArrayStack::ArrayStack(): top(-1) +{ } template inline bool ArrayStack::isEmpty() const @@ -79,4 +78,4 @@ inline int ArrayStack::getCount() const return top + 1; } - +#endif diff --git a/Containers/Deque.h b/Containers/Deque.h index 2fea2f7..954f4dc 100644 --- a/Containers/Deque.h +++ b/Containers/Deque.h @@ -1,10 +1,10 @@ -#ifndef DEQUE_ -#define DEQUE_ +#ifndef DEQUE_H +#define DEQUE_H #include "LinkedQueue.h" template -class Deque : public LinkedQueue +class Deque: public LinkedQueue { public: bool dequeueBack(T& backEntry); @@ -12,7 +12,7 @@ class Deque : public LinkedQueue }; template -bool Deque::dequeueBack(T& backEntry) +inline bool Deque::dequeueBack(T& backEntry) { if (LinkedQueue ::isEmpty()) return false; diff --git a/Containers/LinkedQueue.h b/Containers/LinkedQueue.h index b87ea38..37649ba 100644 --- a/Containers/LinkedQueue.h +++ b/Containers/LinkedQueue.h @@ -1,12 +1,12 @@ -#ifndef LINKED_QUEUE_ -#define LINKED_QUEUE_ +#ifndef LINKED_QUEUE_H +#define LINKED_QUEUE_H #include #include "Node.h" #include "QueueADT.h" template -class LinkedQueue :public QueueADT +class LinkedQueue: public QueueADT { protected: Node* backPtr; @@ -24,17 +24,17 @@ class LinkedQueue :public QueueADT }; template -LinkedQueue::LinkedQueue():itemCount(0), backPtr(nullptr), frontPtr(nullptr) -{} +inline LinkedQueue::LinkedQueue():itemCount(0), backPtr(nullptr), frontPtr(nullptr) +{ } template -bool LinkedQueue::isEmpty() const +inline bool LinkedQueue::isEmpty() const { return (frontPtr == nullptr); } template -bool LinkedQueue::enqueue(const T& newEntry) +inline bool LinkedQueue::enqueue(const T& newEntry) { Node* newNodePtr = new Node(newEntry); // Insert the new node @@ -52,7 +52,7 @@ bool LinkedQueue::enqueue(const T& newEntry) } template -bool LinkedQueue::dequeue(T& frontEntry) +inline bool LinkedQueue::dequeue(T& frontEntry) { if (isEmpty()) return false; @@ -74,7 +74,7 @@ bool LinkedQueue::dequeue(T& frontEntry) } template -bool LinkedQueue::peek(T& frontEntry) const +inline bool LinkedQueue::peek(T& frontEntry) const { if (isEmpty()) return false; @@ -106,7 +106,7 @@ inline int LinkedQueue::getCount() const } template -LinkedQueue::~LinkedQueue() +inline LinkedQueue::~LinkedQueue() { T temp; while (dequeue(temp)); diff --git a/Containers/Node.h b/Containers/Node.h index b4d80ca..2c19301 100644 --- a/Containers/Node.h +++ b/Containers/Node.h @@ -1,5 +1,5 @@ -#ifndef _NODE -#define _NODE +#ifndef NODE_H +#define NODE_H template class Node @@ -19,33 +19,32 @@ class Node T getItem() const; Node* getPrev() const; Node* getNext() const; -}; // end Node -#endif +}; template < typename T> -Node::Node() +inline Node::Node() : prev(nullptr), next(nullptr) { } template < typename T> -Node::Node(const T& item) +inline Node::Node(const T& item) : item(item), prev(nullptr), next(nullptr) { } template < typename T> -Node::Node(const T& item, Node* prevNodePtr, Node* nextNodePtr) +inline Node::Node(const T& item, Node* prevNodePtr, Node* nextNodePtr) : item(item), prev(prevNodePtr), next(nextNodePtr) { } template < typename T> -void Node::setItem(const T& item) +inline void Node::setItem(const T& item) { this->item = item; } template < typename T> -void Node::setNext(Node* nextNodePtr) +inline void Node::setNext(Node* nextNodePtr) { next = nextNodePtr; } @@ -58,19 +57,21 @@ inline void Node::setPrev(Node* prevNodePtr) template < typename T> -T Node::getItem() const +inline T Node::getItem() const { return item; } template -Node* Node::getPrev() const +inline Node* Node::getPrev() const { return prev; } template < typename T> -Node* Node::getNext() const +inline Node* Node::getNext() const { return next; -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/Containers/PriorityNode.h b/Containers/PriorityNode.h index ac699bb..b11f4e4 100644 --- a/Containers/PriorityNode.h +++ b/Containers/PriorityNode.h @@ -1,5 +1,5 @@ -#ifndef PRIORITYNODE_H -#define PRIORITYNODE_H +#ifndef PRIORITY_NODE_H +#define PRIORITY_NODE_H template class PriorityNode @@ -13,22 +13,21 @@ class PriorityNode void setItem(const T& _item, int _priority); void setNext(PriorityNode* nextNodePtr); - + T getItem(int& _priority) const; PriorityNode* getNext() const; int getPriority() const; }; -#endif template -PriorityNode::PriorityNode(const T& _item, int _priority) +inline PriorityNode::PriorityNode(const T& _item, int _priority) { setItem(_item, _priority); next = nullptr; } template -void PriorityNode::setItem(const T& _item, int _priority) +inline void PriorityNode::setItem(const T& _item, int _priority) { item = _item; priority = _priority; @@ -41,7 +40,7 @@ void PriorityNode::setNext(PriorityNode* nextNodePtr) } template -T PriorityNode::getItem(int& _priority) const +inline T PriorityNode::getItem(int& _priority) const { _priority = priority; @@ -49,13 +48,15 @@ T PriorityNode::getItem(int& _priority) const } template -PriorityNode* PriorityNode::getNext() const +inline PriorityNode* PriorityNode::getNext() const { return next; } template -int PriorityNode::getPriority() const +inline int PriorityNode::getPriority() const { return priority; -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/Containers/PriorityQueue.h b/Containers/PriorityQueue.h index cb464e7..aac5ac2 100644 --- a/Containers/PriorityQueue.h +++ b/Containers/PriorityQueue.h @@ -1,5 +1,5 @@ -#ifndef PRIORITYQUEUE_H -#define PRIORITYQUEUE_H +#ifndef PRIORITY_QUEUE_H +#define PRIORITY_QUEUE_H #include #include "PriorityNode.h" @@ -25,16 +25,14 @@ class PriorityQueue ~PriorityQueue(); }; -#endif template -PriorityQueue::PriorityQueue(): head(nullptr), itemCount(0) -{ -} +inline PriorityQueue::PriorityQueue(): head(nullptr), itemCount(0) +{ } // Insert the new node in its correct position according to its priority template -void PriorityQueue::enqueue(const T& data, int priority) +inline void PriorityQueue::enqueue(const T& data, int priority) { PriorityNode* newNode = new PriorityNode(data, priority); @@ -55,7 +53,7 @@ void PriorityQueue::enqueue(const T& data, int priority) } template -bool PriorityQueue::dequeue(T& topEntry, int& pri) +inline bool PriorityQueue::dequeue(T& topEntry, int& pri) { if (isEmpty()) return false; @@ -70,7 +68,7 @@ bool PriorityQueue::dequeue(T& topEntry, int& pri) } template -bool PriorityQueue::peek(T& topEntry, int& priority) +inline bool PriorityQueue::peek(T& topEntry, int& priority) { if (isEmpty()) return false; @@ -82,20 +80,21 @@ bool PriorityQueue::peek(T& topEntry, int& priority) } template -bool PriorityQueue::isEmpty() const +inline bool PriorityQueue::isEmpty() const { return head == nullptr; } template -void PriorityQueue::printList() const +inline void PriorityQueue::printList() const { if (isEmpty()) return; PriorityNode* current = head; int p = 0; - while (current) { + while (current) + { std::cout << current->getItem(p); if (current->getNext() != nullptr) @@ -108,15 +107,17 @@ void PriorityQueue::printList() const } template -int PriorityQueue::getCount() const +inline int PriorityQueue::getCount() const { return itemCount; } template -PriorityQueue::~PriorityQueue() +inline PriorityQueue::~PriorityQueue() { T tmp; int p; while (dequeue(tmp, p)); -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/Containers/QueueADT.h b/Containers/QueueADT.h index a4e7316..acf06af 100644 --- a/Containers/QueueADT.h +++ b/Containers/QueueADT.h @@ -1,11 +1,11 @@ -#ifndef QUEUE_ADT_ -#define QUEUE_ADT_ +#ifndef QUEUE_ADT_H +#define QUEUE_ADT_H template class QueueADT { public: - + virtual bool isEmpty() const = 0; virtual bool enqueue(const T& newEntry) = 0; @@ -15,5 +15,5 @@ class QueueADT virtual bool peek(T& FrontEntry) const = 0; virtual ~QueueADT() { } -}; +}; #endif \ No newline at end of file diff --git a/Containers/StackADT.h b/Containers/StackADT.h index 93af4d2..65d4f8a 100644 --- a/Containers/StackADT.h +++ b/Containers/StackADT.h @@ -1,5 +1,5 @@ -#ifndef STACKADT_H -#define STACKADT_H +#ifndef STACK_ADT_H +#define STACK_ADT_H template class StackADT diff --git a/UnitClasses/AlienDrone.h b/UnitClasses/AlienDrone.h index 66fc183..13cd3d6 100644 --- a/UnitClasses/AlienDrone.h +++ b/UnitClasses/AlienDrone.h @@ -1,9 +1,11 @@ -#ifndef ALIENDRONE_H -#define ALIENDRONE_H +#ifndef ALIEN_DRONE_H +#define ALIEN_DRONE_H #include "Unit.h" class AlienDrone: public Unit { - +public: + void print(); + void attack(Unit* aUnit); }; #endif diff --git a/UnitClasses/AlienMonster.h b/UnitClasses/AlienMonster.h index f150bb3..42bb1f0 100644 --- a/UnitClasses/AlienMonster.h +++ b/UnitClasses/AlienMonster.h @@ -1,9 +1,11 @@ -#ifndef ALIENMONSTER_H -#define ALIENMONSTER_H +#ifndef ALIEN_MONSTER_H +#define ALIEN_MONSTER_H #include "Unit.h" class AlienMonster: public Unit { - +public: + void print(); + void attack(Unit* aUnit); }; #endif diff --git a/UnitClasses/AlienSoldier.h b/UnitClasses/AlienSoldier.h new file mode 100644 index 0000000..9e97e12 --- /dev/null +++ b/UnitClasses/AlienSoldier.h @@ -0,0 +1,11 @@ +#ifndef ALIEN_SOLDIER_H +#define ALIEN_SOLDIER_H + +#include "Unit.h" +class AlienSoldier : public Unit +{ +public: + void print(); + void attack(Unit* aUnit); +}; +#endif diff --git a/UnitClasses/AlienSolider.h b/UnitClasses/AlienSolider.h deleted file mode 100644 index 3b7368c..0000000 --- a/UnitClasses/AlienSolider.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef ALIENSOLIDER_H -#define ALIENSOLIDER_H - -#include "Unit.h" -class AlienSolider: public Unit -{ - -}; -#endif diff --git a/UnitClasses/EarthGunnery.h b/UnitClasses/EarthGunnery.h index f07d4a6..fb966c5 100644 --- a/UnitClasses/EarthGunnery.h +++ b/UnitClasses/EarthGunnery.h @@ -1,10 +1,12 @@ -#ifndef EARTHGUNNERY_H -#define EARTHGUNNERY_H +#ifndef EARTH_GUNNERY_H +#define EARTH_GUNNERY_H #include "Unit.h" -class EearthGunnery: public Unit +class EarthGunnery: public Unit { - +public: + void print(); + void attack(Unit* aUnit); }; #endif diff --git a/UnitClasses/EarthSoldier.h b/UnitClasses/EarthSoldier.h new file mode 100644 index 0000000..8819d62 --- /dev/null +++ b/UnitClasses/EarthSoldier.h @@ -0,0 +1,11 @@ +#ifndef EARTH_SOLDIER_H +#define EARTH_SOLDIER_H + +#include "Unit.h" +class EarthSoldier : public Unit +{ +public: + void print(); + void attack(Unit* aUnit); +}; +#endif diff --git a/UnitClasses/EarthSolider.h b/UnitClasses/EarthSolider.h deleted file mode 100644 index a246d3a..0000000 --- a/UnitClasses/EarthSolider.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef EARTHSOLIDER_H -#define EARTHSOLIDER_H - -#include "Unit.h" -class EearthSolider: public Unit -{ - -}; -#endif - diff --git a/UnitClasses/EarthTank.h b/UnitClasses/EarthTank.h index 584b97d..dcfe383 100644 --- a/UnitClasses/EarthTank.h +++ b/UnitClasses/EarthTank.h @@ -1,10 +1,12 @@ -#ifndef EARTHTANK_H -#define EARTHTANK_H +#ifndef EARTH_TANK_H +#define EARTH_TANK_H #include "Unit.h" -class EearthTank: public Unit +class EarthTank: public Unit { - +public: + void print(); + void attack(Unit* aUnit); }; #endif diff --git a/UnitClasses/Unit.cpp b/UnitClasses/Unit.cpp new file mode 100644 index 0000000..a1d3f41 --- /dev/null +++ b/UnitClasses/Unit.cpp @@ -0,0 +1,6 @@ +#include "Unit.h" + +void Unit::recieveDamage(int loss) +{ + health -= loss; +} \ No newline at end of file diff --git a/UnitClasses/Unit.h b/UnitClasses/Unit.h index b439693..af0855f 100644 --- a/UnitClasses/Unit.h +++ b/UnitClasses/Unit.h @@ -28,9 +28,4 @@ class Unit virtual void attack(Unit* aUnit) = 0; //shouldn't it be passed a list??? will check later }; -#endif - -void Unit:: recieveDamage(int loss) -{ - health -= loss; -} +#endif \ No newline at end of file