-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
343 lines (297 loc) · 10.2 KB
/
script.js
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
//three ways to declare a variable:
//const var let
//using let recommended
let xp = 0;
let health = 100;
let gold = 50;
let currentWeapon = 0;
let fighting;
let monsterHealth;
// let inventory = 'stick'; //inventory can't store multiple items
//we're going to change the values of inventory to be an array
//an array of 3 strings:
//let inventory = ['stick', 'dagger', 'sword']
//for now:
//if we want to add elements we have to start with an array
let inventory = ['Stick'];
//if the values never going to change you start the value with const:
//access to all the elements on our website that we want to update with js
const button1 = document.querySelector('#button1');
const button2 = document.querySelector('#button2');
const button3 = document.querySelector('#button3');
const text = document.querySelector('#text');
const xpText = document.querySelector('#xpText');
const healthText = document.querySelector('#healthText');
const goldText = document.querySelector('#goldText');
const monsterStats = document.querySelector('#mosnterStats');
const monsterNameText = document.querySelector('#monsterName');
const monsterHealthText = document.querySelector('#monsterHealth');
const weapons = [
{
name: 'Stick',
power: 5
},
{
name: 'Dagger',
power: 30
},
{
name: 'Clawhammer',
power: 30
},
{
name: 'Sword',
power: 100
},
];
const locations = [ //locations array currently has one element which is an object
//object:
{
//key-value pair
//two elements inside the object
name: 'Town Square',
'button text': ['Go to Store', 'Go to Cave', 'Fight Dragon'],
'button functions': [goStore, goCave, fightDragon],
text: 'You are in the Town Square. You see a sign that says \"Store.\"'
},
{
name: 'Store',
'button text': ['Buy 10 Health (10 Gold)', 'Buy Weapon (30 Gold)', 'Go to Town Square'],
'button functions': [buyHealth, buyWeapon, goTown],
text: 'You have entered the Store.'
},
{
name: 'Cave',
'button text' : ['Fight Slime', 'Fight Fanged Beast', 'Go to Town Square'],
'button functions' : [fightSlime, fightBeast, goTown],
text: "You hear a noise, a sudden feeling of claustrophobia grips you...you are in the Cave"
},
{
name: 'fight',
'button text': ['Attack', 'Dodge', 'Run'],
"button functions": [attack, dodge, goTown],
text: 'You are fighting a monster!'
},
{
name: 'kill monster',
'button text': ['Go to Town Square', 'Go to Town Square', 'Go to Town Square'],
'button functions': [goTown, goTown, goTown],
text: 'The monster screams "Arrrgggghhh!" as it dies. You gain experience points and discovered gold!'
},
{
name: 'lose',
'button text': ['REPLAY?', 'REPLAY?', 'REPLAY?'],
'button functions': [restart, restart, restart],
text: 'You are dead x('
},
{
name: 'win',
'button text': ['REPLAY?', 'REPLAY', 'REPLAY'],
'button functions': [restart, restart, restart],
text: 'You have defeated the dragon! HUZZAH! YOU HAVE WON THE TOURNAMENT!'
}
];
const monsters = [
{
name: 'slime',
level: 2,
health: 15
},
{
name: 'Fanged Beast',
level: 8,
health: 60
},
{
name: 'Dragon',
level: 20,
health: 300
}
];
//initialize buttons:
button1.onclick = goStore;
button2.onclick = goCave;
button3.onclick = fightDragon;
function update(location) {
//this id for when the player arrives at a new location:
//the monsterStats won't show up:
//monsterStats.style.display = block;
//locations with bracakets button text, this is how we access
//specific element inside an object by index number
//using bracket notation to call function:
button1.innerText = location['button text'][0];
button2.innerText = location['button text'][1];
button3.innerText = location['button text'][2];
button1.onclick = location['button functions'][0];
button2.onclick = location['button functions'][1];
button3.onclick = location['button functions'][2];
//using dot notation to call a function:
//when your key is single word we can use dot notation
text.innerText = location.text;
}
function goTown() {
update(locations[0]);
}
//building functions:
//this function is going to output the message 'going to store; in the web console:
function goStore() {
update(locations[1]);
//console.log('Going to Store')
}
function goCave() {
//console.log('Going to Cave')
update(locations[2]);
}
function buyHealth() {
gold -= 10;
health += 10;
goldText
if (gold >= 10) {
gold -= 10;
health += 10;
goldText.innerText = gold;
healthText.innerText = health;
}
else {
text.innerText = 'You do not have enough gold to purchase health.';
}
}
function buyWeapon() {
//nested if statement to check if current weapon
//is less than 3 which is the index of the last weapon
//instead of nested if statements like so we can write a code
//to check the length of the array itself
//if (currentWeapon < 3)
if (currentWeapon < weapons.length - 1) {
if (gold >= 30) {
gold -= 30;
currentWeapon++; //doing ++ adds 1 to the current weapon
goldText.innerText = gold;
//accessing the weapons array using brackets to focus on specific weapon in the array
//dot notation and name of weapon
let newWeapon = weapons[currentWeapon].name;
//concatanate new weapon
//anytime the inner text is updated,
//the old text is completely erased
//this time we'll use the += operator to add
text.innerText = 'You now have a ' + newWeapon + '. ';
inventory.push(newWeapon);
//inserts new weapons acquired into the inventory
//here inventory is an array
text.innerText += ' In your inventory you have: ' + inventory;
}
else {
text.innerText = 'You do not have enough gold to purchase weapon.';
}
} else {
text.innerText = 'You are already yeilding the ultimate weapon!';
button2.innerText = 'Sell your weapon for 15 gold';
button2.onclick = sellWeapon;
}
}
function sellWeapon() {
//here we write an if statement that checks whether
//the length of the inventory array is greater than 1
if (inventory.length > 1) {
gold += 15;
goldText.innerText = gold;
//the new version of currentWeapon is scoped only to
//this if statement
//when this if statement comes to an end then the old version of
//currentWeapon will be used again
//shift will remove the first element from the array and return
//it to this variable
let currentWeapon = inventory.shift();
text.innerText = 'You sold a ' + currentWeapon + '.';
} else {
text.innerText = "You can't sell your only weapon."
}
}
function fightSlime() {
//we'll set fighting equal to 0 which
//is the index of the slime in the monsters array
//then we call the goFight function
fighting = 0;
goFight();
}
function fightBeast() {
fighting = 1;
goFight();
}
function fightDragon() {
//console.log('Fighting Dragon');
fighting = 2;
goFight();
}
function goFight() {
update(locations[3]);
monsterHealth = monsters[fighting].health;
//this is how we update css styles in js:
monsterStats.style.display = 'block';
//monster name and monster health:
monsterNameText.innerText = monsters[fighting].name;
monsterHealthText.innerText = monsterHealth;
}
function attack() {
text.innerText = "The " + monsters[fighting].name + " attacks.";
//adding more text using the += operator and string concatenation to get the weapon name:
text.innerText += "You attack it with your " + weapons[currentWeapon].name + ".";
//when you attack you get damaged:
health -= monsters[fighting].level;
//the monster gets damaged as well:
monsterHealth -= weapons[currentWeapon].power;
//here we'll add a random number between 1 and XP:
//math.random will create a random number between 0 and 1
//it will then multiply with the xp and math.floor will round it down
//to the nearest whole number and then add 1
monsterHealth -= weapons[currentWeapon].power + Math.floor(Math.random() * xp) + 1;
//updating inner text of health and monsterHealth:
healthText.innerText = health;
monsterHealth.innerText = monsterHealth;
//now we'll check if health <= 0:
//if it is we'll call the function lose:
if (health <= 0) {
lose();
//else statement can be conditional with an else if statement:
//here we use an else if statement with an if statement to see
//if monster health is <= 0:
//if it is the defeatMonster function is called:
} else if (monsterHealth <= 0) {
//in-line if else statement:
//if fighting corresponds to the value with index 2 then winGame function
//will activate else defeatMonster function.
fighting === 2? winGame() : defeatMonster();
}
}
function dodge() {
//string concatenation to get the monster name that our slayer is fighting:
text.innerText = "You dodge the attack from the " + monsters[fighting].name + ".";
}
function defeatMonster() {
//here we're gonna set gold equal to monster's level times 6.7
//and then round that down to the nearest whole number:
gold += Math.floor(monsters[fighting].level * 6.7);
//and now we update the inner text on the screen:
xp += monsters[fighting].level;
goldText.innerText = gold;
xpText.innerText = xp;
//finally we call the update function and pass 4 for location:
update(locations[4]);
}
function lose() {
update(locations[5]);
}
function winGame() {
update(locations[6]);
}
function restart() {
xp = 0;
health = 100;
gold = 50;
currentWeapon = 0;
inventory = ['stick'];
goldText.innerText = gold;
healthText.innerText = health;
xpText.innerText = xp;
goTown();
}