-
Notifications
You must be signed in to change notification settings - Fork 1
/
AddCardAction.cpp
114 lines (98 loc) · 3.22 KB
/
AddCardAction.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "AddCardAction.h"
AddCardAction::AddCardAction(ApplicationManager *pApp) : Action(pApp)
{
// Initializes the pManager pointer of Action with the passed pointer
}
AddCardAction::~AddCardAction()
{
}
void AddCardAction::ReadActionParameters()
{
///TODO: Implement this function as mentioned in the guideline steps (numbered below) below
// == Here are some guideline steps (numbered below) to implement this function ==
// 1- Get a Pointer to the Input / Output Interfaces
Grid* pGrid = pManager->GetGrid();
Output* pOut = pGrid->GetOutput();
Input* pIn = pGrid->GetInput();
// 2- Read the "cardNumber" parameter and set its data member
pOut->PrintMessage("New Card: Enter card Number ...");
cardNumber = pIn->GetInteger(pOut);
// 3- Read the "cardPosition" parameter (its cell position) and set its data member
pOut->PrintMessage("New Card: Click on its Cell ...");
cardPosition = pIn->GetCellClicked();
// 4- Make the needed validations on the read parameters
while (cardPosition.GetCellNum() == 1)
{
pGrid->PrintErrorMessage("Invalid position, click to continue...");
pOut->PrintMessage("New Card: Click on its Cell ...");
cardPosition = pIn->GetCellClicked();
}
// 5- Clear status bar
pOut->ClearStatusBar();
}
void AddCardAction::Execute()
{
///TODO: Implement this function as mentioned in the guideline steps (numbered below) below
// == Here are some guideline steps (numbered below) to implement this function ==
// 1- The first line of any Action Execution is to read its parameter first
ReadActionParameters();
// 2- Switch case on cardNumber data member and create the appropriate card object type
Card * pCard = NULL; // will point to the card object type
if(cardPosition.HCell()!=-1)
switch (cardNumber)
{
case 1:
pCard = new CardOne(cardPosition);
break;
case 2:
pCard = new CardTwo(cardPosition);
break;
case 3:
pCard = new CardThree(cardPosition);
break;
case 4:
pCard = new CardFour(cardPosition);
break;
case 5:
pCard = new CardFive(cardPosition);
break;
case 6:
pCard = new CardSix(cardPosition);
break;
case 7:
pCard = new CardSeven(cardPosition);
break;
case 8:
pCard = new CardEight(cardPosition);
break;
case 9:
pCard = new CardNine(cardPosition);
break;
case 10:
pCard = new CardTen(cardPosition);
break;
case 11:
pCard = new CardEleven(cardPosition);
break;
case 12:
pCard = new CardTwelve(cardPosition);
break;
}
// 3- if pCard is correctly set in the switch case (i.e. if pCard is pointing to an object -- NOT NULL)
if (pCard)
{
// A- We get a pointer to the Grid from the ApplicationManager
Grid* pGrid = pManager->GetGrid();
// B- Make the "pCard" reads its card parameters: ReadCardParameters(), It is virtual and depends on the card type
pCard->ReadCardParameters(pGrid);
// C- Add the card object to the GameObject of its Cell:
bool added = pGrid->AddObjectToCell(pCard);
// D- if the GameObject cannot be added in the Cell, Print the appropriate error message on statusbar
if (!added)
{
pGrid->PrintErrorMessage("Error: Cell already has an object ! Click to continue ...");
delete pCard;
}
}
// Here, the card is created and added to the GameObject of its Cell, so we finished executing the AddCardAction
}