Programming Assignment 4 Solution

$35.00 $29.00

Objectives In this homework you will get familiar with Inheritance, Polymorphism and Abstract class concepts in Object Oriented programming. Keywords: OOP, Inheritance, Abstract class, Polymorphism Problem De nition In this homework, you are going to simulate a treasure hunt game. In this game, there are players (abstract class) with di erent classes (implementations) divided in…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Description

5/5 – (2 votes)
  • Objectives

In this homework you will get familiar with Inheritance, Polymorphism and Abstract class concepts in Object Oriented programming.

Keywords: OOP, Inheritance, Abstract class, Polymorphism

  • Problem De nition

In this homework, you are going to simulate a treasure hunt game. In this game, there are players (abstract class) with di erent classes (implementations) divided in two teams. The hunt commences on a square grid of size N which is the Board class. The top left square of the grid has the coordinate (0,0) while the bottom right square has coordinates(N-1,N-1). X axis is the horizontal axis and Y axis is the vertical axis. One of the squares contains the treasure, some of them contains the characters and other squares are empty. The classes you are going to de ne are Player (and its implementations), Board, Game and Input Parser. They are explained below.

1

  • Class De nitions

3.1 Player

Player is an abstract class. There are 5 types of players, namely, Fighter, Archer, Tank, Priest and Scout. Each player can be in the barbarian team or the knight team. Each type of player has di erent HP, attack damage, heal power and goal priority (will be explained later in the game class). The class and method de nitions of Player is written below. After that there are subsections that explains the sub-classes of Player.

c l a s s Playerf

p r o t e c t e d :

c o n s t uint id ;

Coordinate coordinate ;

i n t HP ;

Team team ;

//DO NOT MODIFY THE UPPER PART

//ADD YOU OWN PROVATE METHODS/PROPERTIES BELOW

p u b l i c :

  • ∗ ∗

∗

Main c o n s t r u c t o r

∗

∗

@param

i d

i d o f

t h e

p l a y e r .

∗

@param

x

x

c o o r d i n a t e

o f

t h e p l a y e r

∗

@param

y

y

c o o r d i n a t e

o f

t h e p l a y e r

∗

@param

team team

o f

t h e

p l a y e r , BARBARIAN o r KNIGHT

∗

∗/

Player(uint id , i n t

x , i n t y ,

Team team) ;

v i r t u a l ~Player ( )

= d e f a u l t ;

uint getID ( ) c o n s t ;

c o n s t Coordinate&

getCoord ( )

c o n s t ;

i n t getHP ( ) c o n s t ;

Team getTeam ( ) c o n s t ;

  • ∗ ∗

∗ @return t h e board ID o f t h e p l a y e r , I f t h e ID i s s i n g l e d i g i t add a p r e f i x ∗ 0 , o t h e r w i s e j u s t t u r n i t i n t o a s t r i n g . ∗

∗ Example : ∗3 >”03″ ∗ 12 > “12”

∗

∗/

std : : string getBoardID ( ) ;

v i r t u a l

i n t

getAttackDamage ( ) c o n s t

= 0 ;

v i r t u a l

i n t

getHealPower ( ) c o n s t =

0 ;

v i r t u a l

i n t

getMaxHP ( ) c o n s t = 0 ;

2

  • ∗ ∗

∗

For

each s u b c l a s s

o f P l a y e r t h e r e

a r e

d i f f e r e n t

p r i o r i t y

l i s t s d e f i n e d

∗

t h a t

c o n t r o l s t h e

next a c t i o n

t o t a k e

f o r t h a t

P l a y e r . I t

i s g i v e n i n t h e

∗ h e a d e r o f t h e s u b c l a s s e s .

∗

∗

@return t h e g o a l

p r i o r i t y

l i s t

f o r

t h e

P l a y e r

∗/

v i r t u a l std : : vector<Goal> getGoalPriorityList ( ) ;

  • ∗ ∗

∗ @return t h e c l a s s a b b r e v i a t i o n o f p l a y e r , i f t h e p l a y e r i s on t h e b a r b a r i a n ∗ team , t h e a b b r e v i a t i o n w i l l c o n s i s t o f u p p e r c a s e c h a r a c t e r s , o t h e r w i s e i t ∗ w i l l c o n s i s t o f l o w e r c a s e c h a r a c t e r s . ∗

∗/

v i r t u a l c o n s t std : : string getClassAbbreviation ( ) c o n s t ;

  • ∗ ∗

∗

Attack t h e g i v e n p l a y e r .

∗

Enemy HP s h o u l d

d e c r e a s e

a s

much a s t h e a t t a c k

damage o f

a t t a c k e r .

P r i n t

∗

t h e boardID

o f

t h e

a t t a c k e r

and t h e

a t t a c k

and

t h e amount

o f damage

a s below –

.

∗ ” P l a y e r 01 a t t a c k e d

P l a y e r 05 ( 7 5 ) “

∗

∗

@param enemy p l a y e r

t h a t

i s

a t t a c k e d .

∗

@return t r u e

i f

t h e

opponent

i s dead

f a l s e

i f

a l i v e .

∗/

b o o l attack(Player ∗enemy) ;

  • ∗ ∗

∗ Heal t h e g i v e n p l a y e r by t h e adding amount o f h e a l power o f t h i s c h a r a c t e r ∗ t o t h e HP o f a l l y . P r i n t t h e boardID o f t h e h e a l e r and h e a l e d p l a y e r s a s

∗ below .

∗ ” P l a y e r 01 h e a l e d P l a y e r 05″

∗ Healed p l a y e r s h o u l d not have more HP than i t s max HP.

∗/

v o i d heal(Player ∗ally) ;

  • ∗ ∗

∗

@Important The c o o r d i n a t e s

may not be

on

t h e

board .

∗

∗

@return

t h e

c o o r d i n a t e s t h a t

t h e

u n i t

i s

a b l e

t o a t t a c k g i v e n t h e p o s i t i o n

∗

o f t h e

u n i t .

Empty v e c t o r

i f

t h e

u n i t

cannot

a t t a c k .

∗/

v i r t u a l std : : vector<Coordinate> getAttackableCoordinates ( ) ;

  • ∗ ∗

∗

@Important

The c o o r d i n a t e s

may

not

be

on

t h e

board .

∗

∗

@return t h e

c o o r d i n a t e s t h e

u n i t i s

a b l e

t o

move g i v e n t h e p o s i t i o n o f t h e

∗

u n i t . Empty

v e c t o r i f t h e u n i t

cannot

move .

∗/

v i r t u a l std : : vector<Coordinate> getMoveableCoordinates ( ) ;

3

  • ∗ ∗

∗

∗ @return t h e c o o r d i n a t e s t h e u n i t i s a b l e t o h e a l a l l i e s g i v e n t h e p o s i t i o n

o f t h e

∗ u n i t . Empty v e c t o r i f none a v a i l a b l e .

∗/

v i r t u a l std : : vector<Coordinate> getHealableCoordinates ( ) ;

  • ∗ ∗

∗

Move p l a y e r

t o c o o r d i n a t e .

P r i n t t h e

boardID o f

t h e p l a y e r

and t h e o l d and –

new

∗

c o o r d i n a t e s

a s below :

∗

” P l a y e r 01 moved from ( 0 / 1 ) t o ( 0 / 2 ) “

∗

@Important

b e f o r e c a l l i n g

t h i s method

you must

v e r i f y t h a t

t h i s c o o r d i n a t e

∗

i s v a l i d t o

move

∗/

v o i d movePlayerToCoordinate(Coordinate c) ;

  • ∗ ∗

∗ Decide whether t h e p l a y e r i s dead .

∗

∗ @return t r u e i f t h e p l a y e r ‘ s HP <= 0 , f a l s e o t h e r w i s e .

∗/

b o o l isDead ( ) c o n s t ;

  • ;

3.1.1 Archer

c l a s s Archer : p u b l i c Playerf

  • ∗ ∗

∗ Attack damage 50 ∗ Heal power 0

∗ Max HP 200

∗

Goal P r i o r i t i e s

> fATTACKg

∗

C l a s s a b b r e v i a t i o n

> ” a r “

o r “AR”

∗

Not a b l e t o move

a t

a l l .

∗

Can a t t a c k t o a

r a n g e o f 2

s q u a r e s d i r e c t l y up , down , l e f t o r r i g h t , from

∗ i t s c o o r d i n a t e .

∗

∗/

  • ;

3.1.2 Fighter

c l a s s Fighter : p u b l i c Playerf

  • ∗ ∗

∗ Attack damage 100 ∗ Heal power 0

∗ Max HP 400

∗

Goal

P r i o r i t i e s > fATTACK,TO ENEMY,CHESTg i n

d e c r e a s i n g o r d e r

∗

C l a s s a b b r e v i a t i o n

> ” f i ” o r

“FI”

∗

Can

move t o

a d j a c e n t

up , down ,

l e f t o r

r i g h t

s q u a r e

∗

Can

a t t a c k

t o a d j a c e n t up , down , l e f t

o r r i g h t s q u a r e

∗

∗/

  • ;

4

3.1.3 Priest

c l a s s Priest : p u b l i c Playerf

  • ∗ ∗

∗ Attack damage 0 ∗ Heal power 50 ∗ Max HP 150

∗

Goal

P r i o r i t i e s

> fHEAL,TO ALLY,CHESTg

i n

d e c r e a s i n g o r d e r

∗

C l a s s a b b r e v i a t i o n > “pr” o r “PR”

∗

Can

move

t o

a l l

a d j a c e n t s q u a r e s , i n c l u d i n g

d i a g o n a l s .

∗

Can

h e a l

a l l

a d j a c e n t s q u a r e s , i n c l u d i n g

d i a g o n a l s .

∗

∗/

  • ;

3.1.4 Scout

c l a s s Scout : p u b l i c Playerf

  • ∗ ∗

∗ Attack damage 25 ∗ Heal power 0

∗ Max HP 125

∗

Goal

P r i o r i t i e s

> fCHEST,TO ALLY,ATTACKg i n d e c r e a s i n g o r d e r

∗

C l a s s a b b r e v i a t i o n > ” s c ” o r “SC”

∗

Can

move t o

a l l

a d j a c e n t

s q u a r e s ,

i n c l u d i n g

d i a g o n a l s .

∗

Can

a t t a c k

a l l

a d j a c e n t

s q u a r e s ,

i n c l u d i n g

d i a g o n a l s .

∗

∗/

  • ;

3.1.5 Tank

c l a s s Tank : p u b l i c Playerf

  • ∗ ∗

∗ Attack damage 25 ∗ Heal power 0

∗ Max HP 1000

∗

Goal

P r i o r i t i e s > fTO ENEMY,ATTACK,CHESTg i n

d e c r e a s i n g o r d e r

∗

C l a s s a b b r e v i a t i o n

> ” t a ” o r “TA”

∗

Can

move t o

a d j a c e n t

up , down , l e f t o r

r i g h t

s q u a r e

∗

Can

a t t a c k

t o a d j a c e n t up , down , l e f t

o r r i g h t s q u a r e

∗

∗/

  • ;

3.2 Board

Board holds size of the board, players and position of the chest. Its methods are concerned with printing the contents of the eld and returning the properties of coordinates. The class header is given below.

c l a s s Boardf

p r i v a t e :

uint size ;

std : : vector<Player∗>∗ players ;

Coordinate chest ;

//DO NOT MODIFY THE UPPER PART

//ADD YOU OWN PROVATE METHODS/PROPERTIES BELOW

p u b l i c :

5

Board(uint _size , std : : vector<Player∗>∗ _players , Coordinate chest) ; ~Board ( ) ;

  • ∗ ∗

∗ @return t r u e i f t h e c o o r d i n a t e i s i n t h e board l i m i t s , f a l s e o t h e r w i s e .

∗/

b o o l isCoordinateInBoard( c o n s t Coordinate& c) ;

  • ∗ ∗

∗ @return t r u e i f t h e r e i s a p l a y e r on t h e g i v e n c o o r d i n a t e , f a l s e o t h e r w i s e .

∗/

b o o l isPlayerOnCoordinate( c o n s t Coordinate& c) ;

  • ∗ ∗

∗ @return p o i n t e r t o t h e p l a y e r a t t h e g i v e n c o o r d i n a t e . Return NULL i f no ∗ p l a y e r i s t h e r e .

∗/

Player ∗ o p e r a t o r [ ] ( c o n s t Coordinate& c) ;

  • ∗ ∗

∗ @return t h e c h e s t c o o r d i n a t e

∗/

Coordinate getChestCoordinates ( ) ;

  • ∗ ∗

∗

P r i n t t h e board

with

c h a r a c t e r

ID ‘ s .

∗

For

each empty

s q u a r e

p r i n t two

u n d e r s c o r e

c h a r a c t e r s .

∗

For

t h e

s q u a r e s

with

a p l a y e r on i t ,

p r i n t

t h e

board

i d o f

t h e

p l a y e r .

∗

For

t h e

s q u a r e

with t h e

c h e s t ,

p r i n t

t h e

s t r i n g

“Ch” .

∗

I f

a c h a r a c t e r

i s on

t h e

s q u a r e

with

t h e

c h e s t ,

o n l y

p r i n t

t h e

ID o f t h e

∗ c h a r a c t e r .

∗ For each row p r i n t a new l i n e , f o r each column p r i n t a s p a c e c h a r a c t e r .

∗ Example :

∗01

∗

02

05

∗

Ch

03

∗

∗/

v o i d printBoardwithID ( ) ;

  • ∗ ∗

∗ For each empty s q u a r e p r i n t two u n d e r s c o r e c h a r a c t e r s .

∗ For t h e s q u a r e s with a p l a y e r on i t , p r i n t t h e c l a s s a b b r e v i a t i o n o f t h e

∗ p l a y e r .

∗

For

t h e s q u a r e

with

t h e

c h e s t , p r i n t

t h e

s t r i n g

“Ch” .

∗

I f

a c h a r a c t e r

i s

on

t h e

s q u a r e

with

t h e

c h e s t ,

o n l y p r i n t t h e

a b b r e v i a t i o n

∗ o f t h e c h a r a c t e r .

∗

To

s e p a r a t e each

row

p r i n t a new

l i n e , t o

s e p a r a t e each column

p r i n t a

∗ s p a c e c h a r a c t e r . ∗ Example :

∗PR

a r TA

∗ Ch f i

∗

∗/

v o i d printBoardwithClass ( ) ;

  • ;

3.3 Game

Game class is responsible for running the game and managing the memory. The most important method here is the playTurnForPlayer method which computes the moves for the players given their di erent goal

6

priorities.

c l a s s Gamef

p r i v a t e :

Board board ;

uint turnNumber ;

uint maxTurnNumber ;

std : : vector<Player∗> players ;

//DO NOT MODIFY THE UPPER PART

//ADD YOU OWN PROVATE METHODS/PROPERTIES BELOW

p u b l i c :

  • ∗ ∗

∗ C o s t r u c t o r f o r Game c l a s s .

∗ Game manages t h e memory a l l o c a t e d f o r f u t u r e c o n t e n t s t h e v e c t o r ( added

p l a y e r s ) .

∗

Pass a

p o i n t e r t o t h e

p l a y e r s v e c t o r

t o

board c o n s t r u c t o r s o t h a t t h e board –

w i l l

∗

not miss t h e a d d i t i o n

o f

p l a y e r s t o

t h e

game .

∗

@param maxTurnNumber t u r n number t o end t h e game

∗

@param

b o a r d S i z e s i z e

o f

t h e board

∗

@param

c h e s t c o o r d i n a t e

o f t h e c h e s t

∗/

Game(uint maxTurnNumber , uint boardSize , Coordinate chest) ; ~Game ( ) ;

  • ∗ ∗

∗

Add a

new

p l a y e r t o

t h e

game . Add

a p o i n t e r t o

t h e new p l a y e r

t o

t h e t h i s > –

p l a y e r s v e c t o r .

∗

Do not

f o r g e t t h a t

Game

w i l l

manage t h e memory

a l l o c a t e d f o r

t h e

p l a y e r s .

∗

@param i d ID o f t h e new

p l a y e r .

∗

@param

x

x

c o o r d i n a t e

o f

t h e

new

p l a y e r .

∗

@param

y

y

c o o r d i n a t e

o f

t h e

new

p l a y e r .

∗

@param

team

team o f

t h e

new

p l a y e r .

∗

∗/

v o i d addPlayer( i n t id , i n t x , i n t y , Team team ) ;

  • ∗ ∗

∗

The game ends

when

e i t h e r

o f

t h e s e happens :

∗

A l l b a r b a r i a n s d i e ( k n i g h t v i c t o r y )

∗

A l l k n i g h t s

d i e ( b a r b a r i a n v i c t o r y )

∗

A b a r b a r i a n

g e t s t o t h e s q u a r e c o n t a i n i n g t h e c h e s t ( b a r b a r i a n v i c t o r y )

∗

maxTurnNumber

o f

t u r n s p l a y e d

( k n i g h t

v i c t o r y )

∗

∗

I f t h e game ends

announce

i t

py

p r i n t i n g

t h e

r e a s o n ,

t u r n number and t h e –

v i c t o r

∗

a s i n

t h e

f o l l o w i n g

examples :

∗

∗

Game

ended

a t

t u r n

1 3 .

A l l

b a r b a r i a n s dead .

Knight v i c t o r y .

∗

Game

ended

a t

t u r n

121.

A l l

k n i g h t s dead . B a r b a r i a n

v i c t o r y .

∗

Game

ended

a t

t u r n

5 2 .

Chest

c a p t u r e d . B a r b a r i a n v i c t o r y .

∗

Game

ended

a t

t u r n

215.

Maximum

t u r n number

r e a c h e d .

Knight v i c t o r y .

∗

∗ @return t r u e i f any o f t h e above i s s a t i s f i e d , f a l s e o t h e r w i s e

∗

7

∗/

b o o l isGameEnded ( ) ;

  • ∗ ∗

∗

Play a t u r n

f o r

each

p l a y e r .

∗

A c t i o n s a r e

taken i n

t h e

o r d e r

o f ID

numbers o f

p l a y e r s

( p l a y e r

with

∗ s m a l l e r ID a c t s f i r s t ) .

∗

At t h e s t a r t

o f

t h e t u r n

i t announces

t h a t t h e

t u r n has

s t a r t e d

by p r i n t i n g

∗

t o s t d o u t . Turn

numbers

s t a r t s

with 1 .

∗

Ex :

“Turn 13

has

s t a r t e d . “

∗

C a l l

playTurnForPlayer f o r e v e r y p l a y e r .

∗

∗/

v o i d playTurn ( ) ;

  • ∗ ∗

∗

Play a

t u r n f o r

t h e p l a y e r with

t h e

g i v e n ID .

∗

I f

t h e

p l a y e r

i s

dead announce

i t s

death by

p r i n t i n g

t h e boardID o f t h e

p l a y e r

∗

a s

i n

” P l a y e r

07

d i e d . ” . Remove

t h a t p l a y e r

from t h e

board and r e l e a s e

i t s –

r e s o u r c e s .

∗

∗

Each

p l a y e r

has a g o a l

l i s t

s o r t e d

by

i t s

p r i o r i t y

f o r

t h a t

p l a y e r .

∗

When

a p l a y e r

p l a y s a

t u r n

i t

i t e r a t e s

o v e r i t s

g o a l l i s t and

t r i e s

t o t a k e

∗

an a c t i o n .

V a l i d a c t i o n s

a r e

a t t a c k , move

and h e a l . A

p l a y e r

can t a k e o n l y

∗

one

a c t i o n

i n

a turn ,

and

i f

t h e r e

i s

no

a c t i o n

i t

can

t a k e

i t

s t o p s

and –

d o e s n o t h i n g .

∗

B e f o r e moving

a

p l a y e r you

must

check

i f

t h e c o o r d i n a t e

t o

move

i s v a l i d .

∗

Meaning that ,

t h e c o o r d i n a t e

i s

i n

t h e

bounds o f

t h e board

and

t h e r e a r e

no

∗ p l a y e r s t h e r e .

∗

∗ IMPORTANT NOTE:

e v e r y us a g e

o f

t h e

word

n e a r e s t

i s r e f e r e n c i n g

s m a l l e s t

t h e

Manhattan

∗

d i s t a n c e ,

which

i s f o r m u l a t e d

a s ( abs ( x

1 x

2 )

+

abs ( y 1

y

2)).

o p e r a t o r

∗

o v e r l o a d e d

i n

C o o r d i n a t e . h

computes

e x a c t l y

that ,

s o you

can u s e t h a t method

t o

∗

c a l c u l a t e

t h e

d i s t a n c e between

two

c o o r d i n a t e s .

∗

∗

Below a r e

t h e

e x p l a n a t i o n s

f o r

g o a l s :

∗

∗ ATTACK:

∗

I f

t h e r e

a r e

any e ne m ie s

i n t h e

a t t a c k

r a n g e

o f

t h e

p l a y e r

a t t a c k t o i t .

∗

I f

t h e r e

a r e

more than

1

enemy i n t h e r a n g e

a t t a c k

t o

t h e

one with

∗

l o w e s t ID . I f

t h e r e i s

no

one t o

a t t a c k

t r y

t h e

next

g o a l .

∗

∗ CHEST:

∗

Move

t o

t h e

d i r e c t i o n

o f

t h e

c h e s t , i f

both

v e r t i c a l

and

h o r i z o n t a l

moves

∗

a r e

a v a i l a b l e , p i c k t h e

h o r i z o n t a l

one .

I f

t h e

h o r i z o n t a l

move i s

b l o c k e d

∗

but

t h e

v e r t i c a l move

i s

not ,

move

v e r t i c a l l y .

I f a l l

d i r e c t i o n s towards

∗

t h e

c h e s t i s

b l o c k e d

t r y

t h e

next

g o a l .

∗

∗ TO ENEMY:

Move towards t h e n e a r e s t enemy . I f t h e r e a r e more than one e n e mi e s with

t h e same d i s t a n c e

move towards t h e one with t h e s m a l l e s t ID . I f both v e r t i c a l and

h o r i z o n t a l moves

8

∗

a r e

a v a i l a b l e ,

p i c k

t h e h o r i z o n t a l

one .

I f

an enemy

i s

i n t h e

s q u a r e s

∗

t h a t

t h e p l a y e r

can

move o r e v e r y

move

t h a t

b r i n g s

t h e

p l a y e r

c l o s e r t o

∗

t h e

s e l e c t e d enemy

i s blocked , t r y

t h e

next

g o a l .

∗

∗ TO ALLY:

∗

Move

towards

t h e

n e a r e s t

a l l y .

I f

t h e r e

a r e

more than

one

a l l i e s

with

t h e same d i s t a n c e

∗

move

towards t h e one

with

t h e

s m a l l e s t

ID .

I f

both

v e r t i c a l

and

h o r i z o n t a l moves

∗

a r e

a v a i l a b l e ,

p i c k

t h e h o r i z o n t a l

one .

I f

an

a l l y

i s

i n

t h e

s q u a r e s

∗

t h a t

t h e p l a y e r

can

move o r e v e r y

move t h a t

b r i n g s

t h e p l a y e r

c l o s e r

t o

∗

t h e

s e l e c t e d

a l l y

i s

blocked ,

t r y

t h e next

g o a l .

∗

∗ HEAL:

∗

I f

t h e r e

a r e

any

a l l i e s i n

t h e

h e a l i n g

r a n g e h e a l a l l

o f

them . i f

t h e r e

∗

i s

no one t o

h e a l

t r y

t h e

next

g o a l .

∗

∗

∗

@return

t h e

g o a l

t h a t

t h e

a c t i o n was taken

upon . NO GOAL

i f

no a c t i o n

was –

taken .

∗/

Goal playTurnForPlayer(Player∗ player) ;

  • ;

3.4 InputParser

Reads the standard input and creates a Game object. Details are explained in the header.

c l a s s InputParserf

p u b l i c :

  • ∗ ∗

∗

Parse

t h e

i n i t i a l

p a r a m e t e r s

o f

t h e

game from s t d i n .

∗

The i n p u t

w i l l be

a s f o l l o w s .

∗

F i r s t

l i n e c o n t a i n s

t h e

s i z e

o f

t h e board .

∗

Second l i n e

c o n t a i n s

t h e

c o o r d i n a t e s

o f t h e

c h e s t .

∗

Third

l i n e c o n t a i n s

t h e

number

o f p l a y e r s ,

P .

∗

Each

o f t h e

next P

l i n e s

c o n t a i n s a

d e s c r i p t i o n

f o r

a p l a y e r

a s f o l l o w s .

∗

ID o f

t h e p l a y e r ,

c l a s s

o f

t h e

p l a y e r ,

team

o f

t h e

p l a y e r , x

c o o r d i n a t e , y –

c o o r d i n a t e , .

∗

C a l l

t h e

addPlayer

method

o f

t h e Game

c l a s s

t o

add

t h e p l a y e r s .

∗ Example i n p u t :

∗ 6

∗ 3 3

∗ 2

∗ 12 ARCHER BARBARIAN 3 5 ∗ 11 FIGHTER KNIGHT 1 1

∗

∗ @returns P o i n t e r t o t h e Dynamically a l l o c a t e d Game o b j e c t

∗/

s t a t i c Game∗ parseGame ( ) ;

  • ;

  • Extras

The enumerations you need are de ned in the Constants.h header. You can use them from there.

9

The Game class owns every player and vector of players in terms of memory management and is responsible for the destruction of these.

In order to get full grade from each part your code should not have any memory leak. This will be checked with valgrind. While grading your classes will be used with the correct implementations, therefore they are expected to work as commented in the code.

  • Regulations

    • Programming Language: You must code your program in C++ (11). Your submission will be compiled with g++ with -std=c++11 ag on department lab machines.

    • Allowed Libraries: You may include and use C++ Standard Library. Use of any other library (especially the external libraries found on the internet) is forbidden.

    • Memory Management: When an instance of a class is destructed, the instance must free all of its owned/used heap memory. Any heap block, which is not freed at the end of the program will result in grade deduction. Please check your codes using valgrind {leak-check=full for memory-leaks.

    • Late Submission: You have a total of 10 days for late submission. You can spend this credit for any of the assignments or distribute it for all. For each assignment, you can use at most 3 days-late.

    • Cheating: In case of cheating, the university regulations will be applied.

    • Newsgroup: It’s your responsibility to follow the cengclass forums for discussions and possible updates on a daily basis.

  • Submission

Submission will be done via CengClass. Create a zip le named hw4.zip that contains:

  • Archer.h

  • Archer.cpp

  • Board.h

  • Board.cpp

  • Fighter.h

  • Fighter.cpp

  • Game.h

  • Game.cpp

  • InputParser.h

  • InputParser.cpp

  • Player.h

  • Player.cpp

  • Priest.h

10

  • Priest.cpp

  • Scout.h

  • Scout.cpp

  • Tank.h

  • Tank.cpp

Do not submit a le that contains a main function. Such a le will be provided and your code will be compiled with it. Also, do not submit a Make le.

Note: The submitted zip le should not contain any directories! The following command sequence is expected to run your program on a Linux system:

  • unzip hw4.zip

  • make clean

  • make all

  • make run

  • -optional- make valgrind

11

Programming Assignment 4 Solution
$35.00 $29.00