FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
snake-java/SnakeGame.java at master · ImKennyYip/snake-java · GitHub
ImKennyYip
/
snake-java
Public
Notifications
You must be signed in to change notification settings
Fork
28
Star
25
Code
Issues
0
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
snake-java
/
SnakeGame.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
187 lines (158 loc) · 5.5 KB
Breadcrumbs
snake-java
/
SnakeGame.java
Copy path
File metadata and controls
187 lines (158 loc) · 5.5 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
import
java
.
awt
.*;
import
java
.
awt
.
event
.*;
import
java
.
util
.
ArrayList
;
import
java
.
util
.
Random
;
import
javax
.
swing
.*;
public
class
SnakeGame
extends
JPanel
implements
ActionListener
,
KeyListener
{
private
class
Tile
{
int
x
;
int
y
;
Tile
(
int
x
,
int
y
) {
this
.
x
=
x
;
this
.
y
=
y
;
}
}
int
boardWidth
;
int
boardHeight
;
int
tileSize
=
25
;
//snake
Tile
snakeHead
;
ArrayList
<
Tile
>
snakeBody
;
//food
Tile
food
;
Random
random
;
//game logic
int
velocityX
;
int
velocityY
;
Timer
gameLoop
;
boolean
gameOver
=
false
;
SnakeGame
(
int
boardWidth
,
int
boardHeight
) {
this
.
boardWidth
=
boardWidth
;
this
.
boardHeight
=
boardHeight
;
setPreferredSize
(
new
Dimension
(
this
.
boardWidth
,
this
.
boardHeight
));
setBackground
(
Color
.
black
);
addKeyListener
(
this
);
setFocusable
(
true
);
snakeHead
=
new
Tile
(
5
,
5
);
snakeBody
=
new
ArrayList
<
Tile
>();
food
=
new
Tile
(
10
,
10
);
random
=
new
Random
();
placeFood
();
velocityX
=
1
;
velocityY
=
0
;
//game timer
gameLoop
=
new
Timer
(
100
,
this
);
//how long it takes to start timer, milliseconds gone between frames
gameLoop
.
start
();
}
public
void
paintComponent
(
Graphics
g
) {
super
.
paintComponent
(
g
);
draw
(
g
);
}
public
void
draw
(
Graphics
g
) {
//Grid Lines
for
(
int
i
=
0
;
i
<
boardWidth
/
tileSize
;
i
++) {
//(x1, y1, x2, y2)
g
.
drawLine
(
i
*
tileSize
,
0
,
i
*
tileSize
,
boardHeight
);
g
.
drawLine
(
0
,
i
*
tileSize
,
boardWidth
,
i
*
tileSize
);
}
//Food
g
.
setColor
(
Color
.
red
);
// g.fillRect(food.x*tileSize, food.y*tileSize, tileSize, tileSize);
g
.
fill3DRect
(
food
.
x
*
tileSize
,
food
.
y
*
tileSize
,
tileSize
,
tileSize
,
true
);
//Snake Head
g
.
setColor
(
Color
.
green
);
// g.fillRect(snakeHead.x, snakeHead.y, tileSize, tileSize);
// g.fillRect(snakeHead.x*tileSize, snakeHead.y*tileSize, tileSize, tileSize);
g
.
fill3DRect
(
snakeHead
.
x
*
tileSize
,
snakeHead
.
y
*
tileSize
,
tileSize
,
tileSize
,
true
);
//Snake Body
for
(
int
i
=
0
;
i
<
snakeBody
.
size
();
i
++) {
Tile
snakePart
=
snakeBody
.
get
(
i
);
// g.fillRect(snakePart.x*tileSize, snakePart.y*tileSize, tileSize, tileSize);
g
.
fill3DRect
(
snakePart
.
x
*
tileSize
,
snakePart
.
y
*
tileSize
,
tileSize
,
tileSize
,
true
);
}
//Score
g
.
setFont
(
new
Font
(
"Arial"
,
Font
.
PLAIN
,
16
));
if
(
gameOver
) {
g
.
setColor
(
Color
.
red
);
g
.
drawString
(
"Game Over: "
+
String
.
valueOf
(
snakeBody
.
size
()),
tileSize
-
16
,
tileSize
);
}
else
{
g
.
drawString
(
"Score: "
+
String
.
valueOf
(
snakeBody
.
size
()),
tileSize
-
16
,
tileSize
);
}
}
public
void
placeFood
(){
food
.
x
=
random
.
nextInt
(
boardWidth
/
tileSize
);
food
.
y
=
random
.
nextInt
(
boardHeight
/
tileSize
);
}
public
void
move
() {
//eat food
if
(
collision
(
snakeHead
,
food
)) {
snakeBody
.
add
(
new
Tile
(
food
.
x
,
food
.
y
));
placeFood
();
}
//move snake body
for
(
int
i
=
snakeBody
.
size
()-
1
;
i
>=
0
;
i
--) {
Tile
snakePart
=
snakeBody
.
get
(
i
);
if
(
i
==
0
) {
//right before the head
snakePart
.
x
=
snakeHead
.
x
;
snakePart
.
y
=
snakeHead
.
y
;
}
else
{
Tile
prevSnakePart
=
snakeBody
.
get
(
i
-
1
);
snakePart
.
x
=
prevSnakePart
.
x
;
snakePart
.
y
=
prevSnakePart
.
y
;
}
}
//move snake head
snakeHead
.
x
+=
velocityX
;
snakeHead
.
y
+=
velocityY
;
//game over conditions
for
(
int
i
=
0
;
i
<
snakeBody
.
size
();
i
++) {
Tile
snakePart
=
snakeBody
.
get
(
i
);
//collide with snake head
if
(
collision
(
snakeHead
,
snakePart
)) {
gameOver
=
true
;
}
}
if
(
snakeHead
.
x
*
tileSize
<
0
||
snakeHead
.
x
*
tileSize
>
boardWidth
||
//passed left border or right border
snakeHead
.
y
*
tileSize
<
0
||
snakeHead
.
y
*
tileSize
>
boardHeight
) {
//passed top border or bottom border
gameOver
=
true
;
}
}
public
boolean
collision
(
Tile
tile1
,
Tile
tile2
) {
return
tile1
.
x
==
tile2
.
x
&&
tile1
.
y
==
tile2
.
y
;
}
@
Override
public
void
actionPerformed
(
ActionEvent
e
) {
//called every x milliseconds by gameLoop timer
move
();
repaint
();
if
(
gameOver
) {
gameLoop
.
stop
();
}
}
@
Override
public
void
keyPressed
(
KeyEvent
e
) {
// System.out.println("KeyEvent: " + e.getKeyCode());
if
(
e
.
getKeyCode
() ==
KeyEvent
.
VK_UP
&&
velocityY
!=
1
) {
velocityX
=
0
;
velocityY
= -
1
;
}
else
if
(
e
.
getKeyCode
() ==
KeyEvent
.
VK_DOWN
&&
velocityY
!= -
1
) {
velocityX
=
0
;
velocityY
=
1
;
}
else
if
(
e
.
getKeyCode
() ==
KeyEvent
.
VK_LEFT
&&
velocityX
!=
1
) {
velocityX
= -
1
;
velocityY
=
0
;
}
else
if
(
e
.
getKeyCode
() ==
KeyEvent
.
VK_RIGHT
&&
velocityX
!= -
1
) {
velocityX
=
1
;
velocityY
=
0
;
}
}
//not needed
@
Override
public
void
keyTyped
(
KeyEvent
e
) {}
@
Override
public
void
keyReleased
(
KeyEvent
e
) {}
}
Back
|
FazBrowse Home
|
New Git URL