Tentu kita pernah memainkan game ular pada saat kecil, mungkin anak-anak 90an pada masanya menggunakan HP nokia ya hehe. Dalam kesempatan kali ini saya akan membagikan “Bagaimana cara membuat game ular dengan python”.
Saya asumsikan kalian sudah paham tentang dasar-dasar python. Dan pastikan di laptop kalian sudah terinstall python ya, disini penulis menggunakan python version 3.8 dan sudah terinstall pip.
Sebelum kita memulai, berikut ini adalah list materi yang akan kita bahas :
Install Pygame
Membuat Layar
Membuat Ular
Menggerakan ular
Menambahkan game over
Membuat Makanan
Menambah panjang ular
Menambahkan Score
Install Pygame
Langkah pertama yang perlu dilakukan adalah install pygame dengan perintah :
pip install pygame
Sebelum melakukan coding game ular, berikut ini adalah sedikit penjelasan beberapa fungsi yang digunakan di dalam coding .
- init() : Digunakan untuk melakukan inisialisasi modul pygame.
- display.set_mode() : Digunakan untuk melakukan set tupple parameter
- update() : Digunakan untuk update screen
- quit() : Digunakan untuk Uninitialize program
- set_caption() : Digunakan untuk set caption di header
- event.get() : Mengembalikan list semua event
- Surface.fill() : Digunakan untuk merubah warna
- time.Clock() : Untuk melakukan timer
- font.SysFont() : Digunakan untuk set font
import
pygame
pygame.init()
dis
=
pygame.display.set_mode((
400
,
300
))
pygame.display.update()
pygame.quit()
quit()
import
pygame
pygame.init()
dis
=
pygame.display.set_mode((
400
,
300
))
pygame.display.update()
pygame.display.set_caption(
'Snake game by Edureka'
)
game_over
=
False
while
not
game_over:
for
event
in
pygame.event.get():
(event)
#prints out all the actions that take place on the screen
pygame.quit()
quit()
Sekarang layar sudah selesai dibuat, langkah selanjutnya adalah membuat objek ular nya.
Membuat Ular
Untuk membuat ular, pertama-tama saya akan menginisialisasi beberapa variabel warna untuk mewarnai ular, makanan, layar, dll. Skema warna yang digunakan di Pygame adalah RGB yaitu “Red Green Blue”. Jika Anda menyetel semua ini ke 0, warnanya akan menjadi hitam dan semua 255 akan menjadi putih. Jadi ular kita akan menjadi persegi panjang. Untuk menggambar persegi panjang di Pygame, Anda bisa menggunakan fungsi bernama draw.rect() yang akan membantu Anda menggambar persegi panjang dengan warna dan ukuran yang diinginkan.
import
pygame
pygame.init()
dis
=
pygame.display.set_mode((
400
,
300
))
pygame.display.set_caption(
'Snake game by Edureka'
)
blue
=
(
0
,
0
,
255
)
red
=
(
255
,
0
,
0
)
game_over
=
False
while
not
game_over:
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.QUIT:
game_over
=
True
pygame.draw.rect(dis,blue,[
200
,
150
,
10
,
10
])
pygame.display.update()
pygame.quit()
quit()
OUTPUT :
Menggerakan ular
Untuk menggerakan ular dapat menggunakan event KEYDOWN yang ada di pygame class. Event yang digunakan disini adalah K_UP,K_DOWN,K_RIGHT, dan K_LEFT untuk membuat ular bergerak keatas, kebawah, kekanan dan kekiri.
import
pygame
pygame.init()
white
=
(
255
,
255
,
255
)
black
=
(
0
,
0
,
0
)
red
=
(
255
,
0
,
0
)
dis
=
pygame.display.set_mode((
800
,
600
))
pygame.display.set_caption(
'Snake Game by Edureka'
)
game_over
=
False
x1
=
300
y1
=
300
x1_change
=
0
y1_change
=
0
clock
=
pygame.time.Clock()
while
not
game_over:
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.QUIT:
game_over
=
True
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_LEFT:
x1_change
=
-
10
y1_change
=
0
elif
event.key
=
=
pygame.K_RIGHT:
x1_change
=
10
y1_change
=
0
elif
event.key
=
=
pygame.K_UP:
y1_change
=
-
10
x1_change
=
0
elif
event.key
=
=
pygame.K_DOWN:
y1_change
=
10
x1_change
=
0
x1
+
=
x1_change
y1
+
=
y1_change
dis.fill(white)
pygame.draw.rect(dis, black, [x1, y1,
10
,
10
])
pygame.display.update()
clock.tick(
30
)
pygame.quit()
quit()
Menambahkan game over
Dalam permainan ular ini, jika pemain mengenai batas layar, maka dia kalah. Untuk menentukannya, saya telah menggunakan pernyataan 'if' yang menentukan batas koordinat x dan y ular menjadi kurang dari atau sama dengan layar. Juga, perhatikan di sini bahwa saya telah menghapus hardcode dan menggunakan variabel sebagai gantinya sehingga menjadi mudah jika Anda ingin membuat perubahan apa pun pada game nanti.
import
pygame
import
time
pygame.init()
white
=
(
255
,
255
,
255
)
black
=
(
0
,
0
,
0
)
red
=
(
255
,
0
,
0
)
dis_width
=
800
dis_height
=
600
dis
=
pygame.display.set_mode((dis_width, dis_width))
pygame.display.set_caption(
'Snake Game by Edureka'
)
game_over
=
False
x1
=
dis_width
/
2
y1
=
dis_height
/
2
snake_block
=
10
x1_change
=
0
y1_change
=
0
clock
=
pygame.time.Clock()
snake_speed
=
30
font_style
=
pygame.font.SysFont(
None
,
50
)
def
message(msg,color):
mesg
=
font_style.render(msg,
True
, color)
dis.blit(mesg, [dis_width
/
2
, dis_height
/
2
])
while
not
game_over:
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.QUIT:
game_over
=
True
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_LEFT:
x1_change
=
-
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_RIGHT:
x1_change
=
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_UP:
y1_change
=
-
snake_block
x1_change
=
0
elif
event.key
=
=
pygame.K_DOWN:
y1_change
=
snake_block
x1_change
=
0
if
x1 >
=
dis_width
or
x1 <
0
or
y1 >
=
dis_height
or
y1 <
0
:
game_over
=
True
x1
+
=
x1_change
y1
+
=
y1_change
dis.fill(white)
pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block])
pygame.display.update()
clock.tick(snake_speed)
message(
"You lost"
,red)
pygame.display.update()
time.sleep(
2
)
pygame.quit()
quit()
Membuat makanan
Di sini, saya akan menambahkan beberapa makanan untuk ular itu dan ketika ular itu melintasi makanan itu, saya akan membuat pesan di console yang berbunyi “Yummy!!”. Selain itu, saya akan membuat perubahan kecil di mana saya akan menyertakan opsi untuk keluar dari game atau bermain lagi saat pemain kalah.
import
pygame
import
time
import
random
pygame.init()
white
=
(
255
,
255
,
255
)
black
=
(
0
,
0
,
0
)
red
=
(
255
,
0
,
0
)
blue
=
(
0
,
0
,
255
)
dis_width
=
800
dis_height
=
600
dis
=
pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption(
'Snake Game by Edureka'
)
clock
=
pygame.time.Clock()
snake_block
=
10
snake_speed
=
30
font_style
=
pygame.font.SysFont(
None
,
30
)
def
message(msg, color):
mesg
=
font_style.render(msg,
True
, color)
dis.blit(mesg, [dis_width
/
3
, dis_height
/
3
])
def
gameLoop():
# creating a function
game_over
=
False
game_close
=
False
x1
=
dis_width
/
2
y1
=
dis_height
/
2
x1_change
=
0
y1_change
=
0
foodx
=
round
(random.randrange(
0
, dis_width
-
snake_block)
/
10.0
)
*
10.0
foody
=
round
(random.randrange(
0
, dis_width
-
snake_block)
/
10.0
)
*
10.0
while
not
game_over:
while
game_close
=
=
True
:
dis.fill(white)
message(
"You Lost! Press Q-Quit or C-Play Again"
, red)
pygame.display.update()
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_q:
game_over
=
True
game_close
=
False
if
event.key
=
=
pygame.K_c:
gameLoop()
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.QUIT:
game_over
=
True
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_LEFT:
x1_change
=
-
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_RIGHT:
x1_change
=
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_UP:
y1_change
=
-
snake_block
x1_change
=
0
elif
event.key
=
=
pygame.K_DOWN:
y1_change
=
snake_block
x1_change
=
0
if
x1 >
=
dis_width
or
x1 <
0
or
y1 >
=
dis_height
or
y1 <
0
:
game_close
=
True
x1
+
=
x1_change
y1
+
=
y1_change
dis.fill(white)
pygame.draw.rect(dis, blue, [foodx, foody, snake_block, snake_block])
pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block])
pygame.display.update()
if
x1
=
=
foodx
and
y1
=
=
foody:
(
"Yummy!!"
)
clock.tick(snake_speed)
pygame.quit()
quit()
gameLoop()
OUTPUT :
Menambah panjang ular
Kode berikut akan menambah ukuran ular kita saat memakan makanan. Juga, jika ular bertabrakan dengan tubuhnya sendiri, permainan berakhir dan Anda akan melihat pesan sebagai “You Lost! Press C-Play Again or Q-Quit“. Panjang ular pada dasarnya terdapat dalam daftar dan ukuran awal yang ditentukan dalam kode berikut adalah satu blok.
import
pygame
import
time
import
random
pygame.init()
white
=
(
255
,
255
,
255
)
yellow
=
(
255
,
255
,
102
)
black
=
(
0
,
0
,
0
)
red
=
(
213
,
50
,
80
)
green
=
(
0
,
255
,
0
)
blue
=
(
50
,
153
,
213
)
dis_width
=
600
dis_height
=
400
dis
=
pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption(
'Snake Game by Edureka'
)
clock
=
pygame.time.Clock()
snake_block
=
10
snake_speed
=
15
font_style
=
pygame.font.SysFont(
"bahnschrift"
,
25
)
score_font
=
pygame.font.SysFont(
"comicsansms"
,
35
)
def
our_snake(snake_block, snake_list):
for
x
in
snake_list:
pygame.draw.rect(dis, black, [x[
0
], x[
1
], snake_block, snake_block])
def
message(msg, color):
mesg
=
font_style.render(msg,
True
, color)
dis.blit(mesg, [dis_width
/
6
, dis_height
/
3
])
def
gameLoop():
game_over
=
False
game_close
=
False
x1
=
dis_width
/
2
y1
=
dis_height
/
2
x1_change
=
0
y1_change
=
0
snake_List
=
[]
Length_of_snake
=
1
foodx
=
round
(random.randrange(
0
, dis_width
-
snake_block)
/
10.0
)
*
10.0
foody
=
round
(random.randrange(
0
, dis_height
-
snake_block)
/
10.0
)
*
10.0
while
not
game_over:
while
game_close
=
=
True
:
dis.fill(blue)
message(
"You Lost! Press C-Play Again or Q-Quit"
, red)
pygame.display.update()
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_q:
game_over
=
True
game_close
=
False
if
event.key
=
=
pygame.K_c:
gameLoop()
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.QUIT:
game_over
=
True
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_LEFT:
x1_change
=
-
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_RIGHT:
x1_change
=
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_UP:
y1_change
=
-
snake_block
x1_change
=
0
elif
event.key
=
=
pygame.K_DOWN:
y1_change
=
snake_block
x1_change
=
0
if
x1 >
=
dis_width
or
x1 <
0
or
y1 >
=
dis_height
or
y1 <
0
:
game_close
=
True
x1
+
=
x1_change
y1
+
=
y1_change
dis.fill(blue)
pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
snake_Head
=
[]
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if
len
(snake_List) > Length_of_snake:
del
snake_List[
0
]
for
x
in
snake_List[:
-
1
]:
if
x
=
=
snake_Head:
game_close
=
True
our_snake(snake_block, snake_List)
pygame.display.update()
if
x1
=
=
foodx
and
y1
=
=
foody:
foodx
=
round
(random.randrange(
0
, dis_width
-
snake_block)
/
10.0
)
*
10.0
foody
=
round
(random.randrange(
0
, dis_height
-
snake_block)
/
10.0
)
*
10.0
Length_of_snake
+
=
1
clock.tick(snake_speed)
pygame.quit()
quit()
gameLoop()
OUTPUT :
Menambahkan Score
Terakhir tetapi tidak kalah pentingnya, Anda harus menampilkan skor pemain. Untuk melakukan ini, saya telah membuat fungsi baru sebagai “Your_score”. Fungsi ini akan menampilkan panjang ular dikurangi 1 karena itu adalah ukuran awal ular.
import
pygame
import
time
import
random
pygame.init()
white
=
(
255
,
255
,
255
)
yellow
=
(
255
,
255
,
102
)
black
=
(
0
,
0
,
0
)
red
=
(
213
,
50
,
80
)
green
=
(
0
,
255
,
0
)
blue
=
(
50
,
153
,
213
)
dis_width
=
600
dis_height
=
400
dis
=
pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption(
'Snake Game by Edureka'
)
clock
=
pygame.time.Clock()
snake_block
=
10
snake_speed
=
15
font_style
=
pygame.font.SysFont(
"bahnschrift"
,
25
)
score_font
=
pygame.font.SysFont(
"comicsansms"
,
35
)
def
Your_score(score):
value
=
score_font.render(
"Your Score: "
+
str
(score),
True
, yellow)
dis.blit(value, [
0
,
0
])
def
our_snake(snake_block, snake_list):
for
x
in
snake_list:
pygame.draw.rect(dis, black, [x[
0
], x[
1
], snake_block, snake_block])
def
message(msg, color):
mesg
=
font_style.render(msg,
True
, color)
dis.blit(mesg, [dis_width
/
6
, dis_height
/
3
])
def
gameLoop():
game_over
=
False
game_close
=
False
x1
=
dis_width
/
2
y1
=
dis_height
/
2
x1_change
=
0
y1_change
=
0
snake_List
=
[]
Length_of_snake
=
1
foodx
=
round
(random.randrange(
0
, dis_width
-
snake_block)
/
10.0
)
*
10.0
foody
=
round
(random.randrange(
0
, dis_height
-
snake_block)
/
10.0
)
*
10.0
while
not
game_over:
while
game_close
=
=
True
:
dis.fill(blue)
message(
"You Lost! Press C-Play Again or Q-Quit"
, red)
Your_score(Length_of_snake
-
1
)
pygame.display.update()
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_q:
game_over
=
True
game_close
=
False
if
event.key
=
=
pygame.K_c:
gameLoop()
for
event
in
pygame.event.get():
if
event.
type
=
=
pygame.QUIT:
game_over
=
True
if
event.
type
=
=
pygame.KEYDOWN:
if
event.key
=
=
pygame.K_LEFT:
x1_change
=
-
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_RIGHT:
x1_change
=
snake_block
y1_change
=
0
elif
event.key
=
=
pygame.K_UP:
y1_change
=
-
snake_block
x1_change
=
0
elif
event.key
=
=
pygame.K_DOWN:
y1_change
=
snake_block
x1_change
=
0
if
x1 >
=
dis_width
or
x1 <
0
or
y1 >
=
dis_height
or
y1 <
0
:
game_close
=
True
x1
+
=
x1_change
y1
+
=
y1_change
dis.fill(blue)
pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
snake_Head
=
[]
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if
len
(snake_List) > Length_of_snake:
del
snake_List[
0
]
for
x
in
snake_List[:
-
1
]:
if
x
=
=
snake_Head:
game_close
=
True
our_snake(snake_block, snake_List)
Your_score(Length_of_snake
-
1
)
pygame.display.update()
if
x1
=
=
foodx
and
y1
=
=
foody:
foodx
=
round
(random.randrange(
0
, dis_width
-
snake_block)
/
10.0
)
*
10.0
foody
=
round
(random.randrange(
0
, dis_height
-
snake_block)
/
10.0
)
*
10.0
Length_of_snake
+
=
1
clock.tick(snake_speed)
pygame.quit()
quit()
gameLoop()
OUTPUT :
Dengan ini kita telah menyelesaikan sebuah game ular dengan python. Saya harap artikel ini berguna untuk teman - teman yang sedang belajar membuat game. JIka ada hal yang kurang jelas, silahkan tinggalkan komentar.
No comments: