-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMenuAppIndex.js
More file actions
136 lines (116 loc) · 3.36 KB
/
MenuAppIndex.js
File metadata and controls
136 lines (116 loc) · 3.36 KB
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
//We will create a Menu for an App Player-Game which involves differents teams. Eachs teams is composed by players.
// In this case, we need to structure our Menu App in three differents class: class for palyers, class for team and method for functionalities.
class Player {
constructor(name, position) {
this.name = name;
this.position = position;
}
describe() {
return `${this.name} plays ${this.position}.`;
}
}
class Team {
constructor(name) {
this.name = name;
this.players = [];
}
addPlayer(player) {
if (player instanceof Player) {
this.players.push(player);
} else {
throw new Error(`You can only add an instance of player. Argument is not a player: ${player}`);
}
}
describe() {
return `${this.name} has ${this.players.length} players.`;
}
}
class Menu {
constructor() {
this.teams = [];
this.selectedTeam = null;
}
start() {
let selection = this.showMainMenuOptions();
while (selection != 0) {
switch (selection) {
case '1':
this.createTeam();
break;
case '2':
this.viewTeam();
break;
case '3':
this.deleteTeam();
break;
case '4':
this.displayTeam();
break;
default:
selection = 0;
}
selection = this.showMainMenuOptions();
}
alert('Goodbye!');
}
showMainMenuOptions() {
return prompt(`
0) exit
1) create new team
2) view team
3) delete team
`);
}
showTeamMenuOptions(teamInfo) {
return prompt(`
0) back
1) create player
2) delete player
---------------------------
${teamInfo}
`);
}
displayTeams() {
let teamString = '';
for (let i = 0; i < this.teams.length; i++) {
teamString += i + ') ' + this.teams[i].name + '\n';
}
alert(teamString);
}
createTeam() {
let name = prompt('Enter name for new team:');
this.teams.push(new Team(name));
}
viewTeam() {
let index = prompt('Enter the index of the team you wish to view:');
if (index > -1 && index < this.teams.length) {
this.selectedTeam = this.teams[index];
let description = 'Team Name: ' + this.selectedTeam.name + '\n';
for (let i = 0; i < this.selectedTeam.players.length; i++) {
description += i + ') ' + this.selectedTeam.players[i].name
+ ' - ' + this.selectedTeam.players[i].position + '\n';
}
let selection = this.showTeamMenuOptions(description);
switch (selection) {
case '1':
this.createPlayer();
break;
case '2':
this.deletePlayer();
}
}
}
createPlayer() {
let name = prompt('Enter name for new player:');
let position = prompt('Enter position for new player:');
this.selectedTeam.players.push( new Player(name, position));
}
deletePlayer() {
let index = prompt('Enter the index of the player you wish to delete:');
if (index > -1 && index < this.selectedTeam.players.length) {
this.selectedTeam.Players.splice(index, 1);
}
}
}
let menu = new Menu();
menu.start();