-
Notifications
You must be signed in to change notification settings - Fork 0
/
sketch.js
158 lines (138 loc) · 4.62 KB
/
sketch.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
/*
The Game Project - Final Submission
Created by Clayton Smith for UoL Introduction to Programming
I had a lot of fun on this project and as a learner I went in search for additional learning content - my search
included extending on the factory object ("this") and delving into some OOP and class creation, however the structure is
somewhat similar.
Sections completed:
1. Add advanced graphics
I spent a very long time working on the graphics (in some cases half a day just to get one asset drawn correctly
in game) - I enjoyed it, often finding myself in the creative "flow" unaware of time until the day was gone.
I wanted to add more but alas I ran out of time.
Difficulty - working with basic shapes and x,y coordinates is cumbersome and slow. Also layer limitations
when drawing (this is not so much a limitation as you can keep adding "layers", however it becomes cumbersome).
Lessons learnt - I created a way to store assets as x,y coordinates then rebuild them using a function. Essentially,
I can have a data file with my assets, then call on the information to draw the shapes (this saved me a lot of file
space).
2. Add sound
Sourced sounds and music from artists - all attributed in attached License Info.txt file.
Difficulty/ and lessons learnt/skills was trying to get sounds to play on start (chrome blocks this due to
trying to stop ads from playing sound). I learnt how to get around this by getting the user to interact with the
canvas before starting the game (this is the actual reason for the yellow "start screen")
3. Create platforms
I created 3 "types" of platform - only difference being visual all functioning the same (I used an "invisible"
platform option to allow for a pseudo-rock collision detection allowing players to jump on rocks to get to new locations)
Difficulty - getting the player to jump again once on a platform (this took a while to figure out and was one of
the more difficult aspects)
Learnt/skills - reusing my code to be applied for multiple uses with minor updates
4. Create enemies
A fairly basic looking enemy which has an "argo" range if the player gets close and hovers above the ground
bobbing along as it moves.
Difficult pieces in this was the bobbing movement - getting it to move up and down at a reasonable speed (not too fast)
I learnt that if I create code correctly I can reuse it for other purposes (I reused the collision detection for
enemies and player canyons)
*/
p5.disableFriendlyErrors = true; // disables FES to improve performance
//Player and world variables
let player, world, scrollPos, game, badFont;
//Object variables
let collectables, mountains, canyons, sun, tents, clouds, trees,
bushes, grass, dirt, flagpole, platforms, enemies, rocks;
let cText = [];
//Sound variables
let bgmusic, collect, jump, death;
function preload(){
frameRate(50); //Limit frame rate to improve performance
bgmusic = loadSound('sound/bgmusic1.mp3');
collect = loadSound('sound/collect.mp3');
jump = loadSound('sound/jump.mp3');
death = loadSound('sound/death.mp3');
badFont = loadFont('BADABB.otf');
}
function setup(){
textSize(20);
textFont(badFont);
createCanvas(1024, 576);
//World
world = {
grnd: height * 0.75,
wind: 0.075,
sunRotation: 0.005,
gravity: 0.5
};
game = {
start: true,
score: 0
};
//Player(x,y,velX,velY,pName,screenX,maxX,lives,width,height,onGround)
player = new Player(200, world.grnd, 0, 0, "Tob");
initialiseGame();
}
function draw(){
if (game.start){
//Show start screen
startScreen();
} else {
//Render game world
drawGame();
// Draw overlay (Scoreboard,Text and selectors).
drawScoreboard();
}
}
// ---------------------
// Control functions Keyboard and Mouse
// ---------------------
function keyPressed() {
switch (keyCode) {
case 13:
if(game.start){
game.start = false;
bgmusic.play(0,1,0.2,24);
}
break;
case 32:
if ((player.lives < 1) || (flagpole.isReached)) {
player.lives = 3;
player.movement = true;
initialiseGame();
} else if (player.onGround && player.movement) {
player.jump();
}
break;
case 37:
if(player.movement){
player.isLeft = true;
}
break;
case 39:
if(player.movement) {
player.isRight = true;
}
break;
case 38:
if(player.movement) {
player.swap();
}
break;
}
}
function keyReleased(){
switch (keyCode) {
case 32:
if (player.VelY < -1) {
player.VelY = -1;
}
break;
case 37:
player.isLeft = false;
break;
case 39:
player.isRight = false;
break;
}
}
function mouseClicked(){
if((mouseX > 890) && (mouseX < width) && (mouseY > 0) && (mouseY < 60) && (!flagpole.isReached)){
player.swap();
}
}