-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtennis.js
197 lines (184 loc) · 5.24 KB
/
tennis.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
// Canvas vars
var canvas;
var canvasContext;
// Ball vars
var ballX = 50;
var ballY = 50;
var ballSpeedX = 10;
var ballSpeedY = 4;
var ballRad = 10;
var ballColor = "white";
//paddles vars
var paddle1Y = 250;
var paddle2Y = 250;
const paddle_height = 100;
const paddle_thick = 10;
//Score vars
var player1Score = 0;
var player2Score = 0;
const winningScore = 10;
var showWinner = false;
// Colors vars
var leftPlayerColor = "red";
var rightPlayerColor = "blue";
var bgColor = "black";
var textColor = "white";
// Font Style var
var fontStyle = "20px Arial";
// Net Color var
var netColor = "white";
//Getting mouse position
function mousePos(e) {
var rec = canvas.getBoundingClientRect();
var root = document.documentElement;
var mouseX = e.clientX - root.scrollLeft - rec.left;
var mouseY = e.clientY - root.scrollTop - rec.top;
return {
x: mouseX,
y: mouseY
};
}
// Enemy ( right player ) movement
function enemyMove() {
var paddle2Center = paddle2Y + (paddle_height/2);
if(paddle2Center < ballY - 35) {
paddle2Y += 6;
} else if(paddle2Center > ballY + 35) {
paddle2Y -= 6;
}
}
// Launching the game when window is loaded
window.onload = function() {
canvas = document.getElementById("gameCanvas");
canvasContext = canvas.getContext("2d");
//drawEverything();
var framesPerSec = 30;
setInterval(function() {
moveEverything();
drawEverything();
}, 1000/framesPerSec);
// Adding event to restart the game when clicking on canvas
canvas.addEventListener("mousedown", restartGame);
//Adding event to move the left paddle from the center with mouse movement
canvas.addEventListener("mousemove", function(e){
var calMousePos = mousePos(e);
paddle1Y = calMousePos.y-(paddle_height/2);
});
}
// Restarting the game function
function restartGame() {
if(showWinner) {
player1Score = 0;
player2Score = 0;
showWinner = false;
}
}
// Moving everything in canvas function
function moveEverything() {
// Showing if there's a winner or not
if(showWinner) {
return;
}
// moving the right paddle
enemyMove();
// Moving the ball
ballX += ballSpeedX;
ballY += ballSpeedY;
// When the ball reach the right side of canvas
// move it left
if(ballX > canvas.width - (paddle_thick + ballRad)){
if(ballY > paddle2Y && ballY < paddle2Y + paddle_height) {
ballSpeedX = -ballSpeedX;
var deltaY = ballY - (paddle2Y+paddle_height/2);
ballSpeedY = deltaY * .35;
} else {
player1Score++;
ballReset();
}
}
// When the ball reach the left side of canvas
// move it right
if(ballX < (paddle_thick + ballRad)){
if(ballY > paddle1Y && ballY < paddle1Y + paddle_height) {
ballSpeedX = -ballSpeedX;
var deltaY = ballY - (paddle1Y+paddle_height/2);
ballSpeedY = deltaY * .35;
} else {
player2Score++;
ballReset();
}
}
// when the ball reach the bottom of the canvas
// move it up
if(ballY > canvas.height){
ballSpeedY = -ballSpeedY;
}
// when the ball reach the top of the canvas
// move it down
if(ballY < 0){
ballSpeedY = -ballSpeedY;
}
}
// when a player scores let the ball start from the center
function ballReset() {
if(player1Score >= winningScore || player2Score >= winningScore) {
showWinner = true;
}
ballSpeedX = -ballSpeedX;
ballX = canvas.width/2;
ballY = canvas.height/2;
}
// Draw everything in the canvas function
function drawEverything() {
//Draw black bg
colorRect(0,0,canvas.width,canvas.height,bgColor);
// showing the result
if(showWinner) {
if(player1Score>= winningScore) {
canvasContext.fillStyle = leftPlayerColor;
var text = "Left Player Wins!";
} else if(player2Score>= winningScore) {
canvasContext.fillStyle = rightPlayerColor;
var text = "Right Player Wins!";
}
canvasContext.font = fontStyle;
var x = (canvasContext.measureText(text).width);
canvasContext.fillText(text,(canvas.width-x)/2, 200);
canvasContext.fillStyle = textColor;
canvasContext.fillText("Click To Continue",(canvas.width-x)/2, 400);
return;
}
//Draw the net
drawNet();
//Draw the left paddle
colorRect(0,paddle1Y,paddle_thick,paddle_height,leftPlayerColor);
//Draw the right paddle
colorRect(canvas.width-paddle_thick,paddle2Y,paddle_thick,paddle_height,rightPlayerColor);
//Draw the ball
colorCircle(ballX, ballY,ballRad,ballColor);
// the player one score text
canvasContext.font = fontStyle;
canvasContext.fillStyle = leftPlayerColor;
canvasContext.fillText(player1Score, 100, 100);
// the player two score text
canvasContext.fillStyle = rightPlayerColor;
canvasContext.fillText(player2Score, canvas.width-100, 100);
}
// Drawing the circle function ( for the ball )
function colorCircle(centeX, centerY, radius, color) {
canvasContext.fillStyle = color;
canvasContext.beginPath();
canvasContext.arc(centeX, centerY, radius, 0, Math.PI*2, true);
canvasContext.fill();
}
// Draw the net function
function drawNet() {
for(var i =0; i < canvas.width; i+=45) {
colorRect((canvas.width/2)-1,i, 2,20, netColor);
}
}
// Drawing rectangles function
function colorRect(leftX, topY, width, height, color) {
canvasContext.fillStyle = color;
canvasContext.fillRect(leftX, topY, width, height);
}