Selasa, 17 Juli 2018

Game Pesawatan Menggunakan Python Bergenre Arcade


GAME PESAWATAN BERGENRE ARCADE
MENGGUNAKAN APLIKASI PADA PYTHON


Disusun Oleh : 

                                                           Nama    : Toba Surya Pranata
                                                           Kelas    : 3 IA 24
                                                           NPM     : 56415920
                                                           Jurusan : Teknik Informatika



APLIKASI YANG DIGUNAKAN DALAM PEMBUATAN PADA GAME PESAWATAN :

- PYTHON ( 2.7.11 )

- PYGAME (1.9.1 )

- PHOTOSHOP CS6




ALUR CERITA TENTANG GAME PESAWATAN
    Pada game pesawatan ini dimana game yang bergenre arcade, dimana maksudnya dari arcade tersebut adalah mengumpulkan nilai setinggi – tingginya pada game tersebut. Pada game ini dimana ada 1 pesawat yang dimainkan oleh user, dimana user menggerakan pesawat tersebut ke kanan dan kekiri unuk menghindari pesawat yang dating dari arahnya tersebut, dimana setiap melewati rintangan 1 pesawat, maka user mendapatkan nilai +1 dan seterusnya, tetapi semakin lama dan semakin banyak nilai yang didapat, maka semakin cepat juga pesawat musuh yang dating untuk menghadang pesawat user tersebut.



INSTALASI PADA PYTHON

-> Yang pertama kita memiliki aplikasi python, lalu install python hingga seperti berikut ;








INSTALASI PADA PYGAME

->Lalu selanjutnya setelah sudah meng install Python, langkah kedua meng install Pygame ikuti       sampai seperti berikut ;




PROSES PEMBUATAN GAME PESAWATAN

-> Langkah pertama kita masuk ke aplikasi Python yang telah kita install tadi, lalu kita masuk  kedalam Idle Python seperti gambar berikut ;


-> Langkah selanjutnya kita klik File pada Idle Python yang tadi lalu pilih New File lalu akan masuk kedalam file baru yang nantinya akan memulai proses pembuatan pada script untuk game pesawat, contohnya seperti gambar berikut ;




PROSES PEMBUATAN SCRIPT
-> pada proses kali ini membuat script pada Python, dimana Python tidak menggunakan GUI, tetapi memanggil fungsi script yang nantinya akan menjalankan game tersebut dengan logika yang telah dibuat, berikut script game pada pesawatan ;




LOGIKA PADA PROGRAM

-> Langkah ke - 1 membuat tampilan frame untuk ditampilkan di output pada game, dimana gambar tersebut dibuat di PhotoShop seperti gambar berikut ;


pada tampilan diatas juga memiliki ukuran frame yang nantinya dijadikan tampilan awal didalam aplikasi dengan scrip sebagai berikut ; 

#ukuran frame yang digunakan 
display_width = 400 
display_height = 700 

lalu memasukan gambar dengan extensi .jpg, tetapi masukan file gambar kedalam folder yang ada file script game pesawatannya (.py) agar dapat dipanggil dengan sciprt sebagai berikut ; 

 backintro = pygame.image.load("background.jpg").convert()


-> Langkah ke – 2 memberikan tombol pada frame tampilan game tersebut seperti gambar berikut ;

Dimana pada proses pembuatan tombol button menggunakan 2 warna yaitu biru pada button dan hitam pada tulisannya, lalu setiap buton itu di klik akan menampilkan warna yang berbeda menandakan jika kursor terdapat tepat di button yang memiliki warna biru terang, berikut script nya ;

#variabel warna
black = (0,0,0)
blue = (100,149,237)

#kelap-kelip
bright_blue = (135,206,250)

Lanjut dari sebelumnya, dimana tombol button juga memiliki script agar dapat ditampilkan ke menu pada game tersebut, dimana memilki ukuran kanan kira yang diukur sebelumnya dan besar kecil pada buttonnya tersebut, berikut scriptnya ;

#buat menampilkan button menu
def game_intro():
intro = True

# pygame.mixer.music.play(-1)
while intro:
for event in pygame.event.get():

#print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameDisplay.blit(backintro, [0,0])
largeText = pygame.font.SysFont("comicsansms",66)
TextSurf, TextRect = text_objects("", largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
button("PLAY",150,400,130,50,blue,bright_blue,game_loop)
button("EXIT",150,600,130,50,blue,bright_blue,quit)
button("RESET HIGHSCORE",150,500,130,50,blue,bright_blue,delscore)
pygame.display.update()
clock.tick(60)



                                                                   
Lanjutan dari sebelumnya, dimana kali ini akan membuat action pada tombol play, reset score dan  exit, dimana pada tombol play jika di klik akan masuk ke dalam frame berikutnya dengan gambar sebagai berikut ;

Berikut script yang digunakan pada button play, reset score dan exit.
#membuat fungsi button menu
def button(msg,x,y,w,h,ic,ac,action=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x+w > mouse[0] > x and y+h > mouse[1] > y:
pygame.draw.rect(gameDisplay, ac,(x,y,w,h))
if click[0] == 1 and action != None:
action()
else:
pygame.draw.rect(gameDisplay, ic,(x,y,w,h))
smallText = pygame.font.SysFont("comicsansms",12)
textSurf, textRect = text_objects(msg, smallText)
textRect.center = ( (x+(w/2)), (y+(h/2)) )
gameDisplay.blit(textSurf, textRect)

Kemudian script pada tombol action reset score dan exit, dimana reset score berfungsi untuk menghapus script sebelumnya menjadi mulai dari 0 lagi.

#reset score
def delscore():
variabel = open("score.txt", "w")
variabel.write("0")
variabel.close() 
def text_objects(text, font):
textSurface = font.render(text, True, black)
return textSurface, textSurface.get_rect()

#untuk menulis data baru ke data score
if hindar>values:
print ("hindar : ",hindar)
print ("masuk nilai baru")
with open("score.txt","r+") as score:
with open("score.txt","r") as newScore:
for line in newScore:
output = str(hindar)
print (output)
score.writelines(line.replace(output2,output))

#exit pada game
pygame.quit()
quit()

-> Langkah ke – 3 membuat tampilan objek, dimana pada frame ini ada 3 objek yaitu, awan, pesawat 1 dan pesawat 2.

                                                      

Pada tampilan diatas, sebelum jadi pesawat objeknya tersebut berbentuk kotak, dimana disesuaikan dengan gambar .jpg, dimana terdapat 3 gambar .jpg yaitu pesawat 1, pesawat 2 dan awan dimana cara menyimpannya sama seperti yang tahap pertama, gambar .jpgnya disimpan jadi satu folder dengan file pesawat nya yang ber extensi .py, berikut scriptnya ;

#objek kotak jadi pesawat
def things(thingx, thingy, thingw, thingh, color):

#pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw, thingh])
gameDisplay.blit(plane2Img, (thingx, thingy))

#nampilin pesawat
def plane(x,y):
gameDisplay.blit(planeImg,(x,y))

#background gambar.jpg
background = pygame.image.load("sky.jpg").convert()
planeImg = pygame.image.load('pesawatutama.png')
plane2Img = pygame.image.load('pesawatai.png')

-> Langkah ke – 4 membuat tampilan objek agar bias berpindah kekakan dan kekiri untuk menghindari pesawat musuh yang dating unutk menabraknya.


Pada gambar diatas dimana objek pesawat yang bawah mencoba menghindar kekiri untuk menghindari serangan dari pesawat yang dating dari arah atas, berikut script untuk membuat objejk berpindah ke sisi kanan dan kiri ;

# kecepatan menghindar
things(thing_startx, thing_starty, thing_width, thing_height, black)
thing_starty += thing_speed
plane(x,y)
things_hindar(hindar)

#menghindar dari pesawat yang jatuh ke bawah
if y < thing_starty+thing_height:
print('y crossover')
print("nilai hindar :",hindar)
data = open("score.txt","r")
for value in data:
values = int(value.strip())
output2 = str(values)
print (values)
if hindar>values:
print ("hindar : ",hindar)
print ("masuk nilai baru")
with open("score.txt","r+") as score:
with open("score.txt","r") as newScore:
for line in newScore:
output = str(hindar)
print (output)
score.writelines(line.replace(output2,output))
if x > thing_startx and x < thing_startx + thing_width or x+plane_width > thing_startx and x + plane_width < thing_startx+thing_width:
print('x crossover')
data = open("score.txt","r")
for value in data:
values = int(value.strip())
output2 = str(values)
print (values)

-> Langkah ke – 5 membuat tampilan pesan jika pesawat yang di bawah ditabrak dengan pesawat yang dating dari atas dan memberikan peasan jika pesawat bersentuhan atau menabrak sisi kanan dan kiri pada lintasan yang ada.

akan memunculkan pesan GAME OVER jika pesawat tertabrak oleh pesawat lainnya, berikut script yang dibuat ;

#fungsi game over
def message_display(text):
largeText = pygame.font.Font('freesansbold.ttf',50)
TextSurf, TextRect = text_objects(text, largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
pygame.display.update()
time.sleep(2)
back()

#fungsi game over
def message_display2(text):
largeText = pygame.font.Font('freesansbold.ttf',15)
TextSurf, TextRect = text_objects(text, largeText)
TextRect.center = ((display_width/2),(display_height/2))
gameDisplay.blit(TextSurf, TextRect)
pygame.display.update()
time.sleep(2)
back() 

#ketika crash memunculkan pesan
def crash():
pygame.mixer.Sound.stop(sound)
pygame.mixer.Sound.stop(sound2)
pygame.mixer.Sound.play(crash_sound)
message_display('GAME OVER')

                                                         
Jika pada gambar diatas langkahnya jika terkena pesawat maka akan game over, sama seperti pada gambar disamping, dia akan memberikan pesan game over jika terkena sisi kanan dan kiri pada lintasan, berikut script yang dipakai untuk membuatnya;

# saat terkena pinggiran
if x > display_width - plane_width or x < 0:
crash()
if thing_starty > display_height:
thing_starty = 0 - thing_height
thing_startx = random.randrange(0,display_width)
hindar +=1
thing_speed += (hindar * 0.01)

Terdapat juga script yang terdapat pasa pesawat yang dari atas, dimana menggunakan script kapan dia harus turun, kecepatan dan random pada jatuhnya pesawat yang dari atas, berikut script nya; 

# settingan kecepatan pesawat dan random
thing_startx = random.randrange(0, display_width)
thing_starty = -600
thing_speed = 10
thing_width = 60
thing_height = 100
hindar = 0
gameExit = False
if x > display_width - plane_width or x < 0:
crash()
if thing_starty > display_height:
thing_starty = 0 - thing_height
thing_startx = random.randrange(0,display_width)
hindar +=1 thing_speed += (hindar * 0.01)

-> Langkah ke – 6 membuat tampilan dimana jika terjadi GAME OVER terdapat pesan dimana logikanya jika ingin mengulang lagi tekan tombol p jika tidak tekan tombol q


Pada gambar disamping terdapat sebuah pesan dimana jika Game Over kita dapat mengulanginya lagi ke gamenya, jika tidak kita juga bias langsung keluar dari gamneya, berikut scriptnya;

#untuk balik ke menu setelah game over
def back():
paused = True
while paused:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
game_loop()
elif event.key == pygame.K_q:
game_intro()
gameDisplay.fill(blue)
message_display2("P for Play again or Q for back to menu")
pygame.display.update()



OUTPUT PADA GAME PESAWATAN








KESIMPULAN
     Peran AI dalan Pesawatan ini akan selalu menghalangi perjalanan pemain mendapatkan score tertinggi. Selain itu pemain juga akan dipersulit dengan syarat tidak diperbolehkan menyentuh atau menabrak objek rintangan berupa Pesawat dan juga garis batasan pada tepi pinggir. Maka yang dibutuhkan dalam game ini adalah fokus, kesabaran dan, kecekatan dalam menghindari dan melewati objek rintangan berupa pesawat. 
     game akan terhenti apabila charater Icon pemain yang kita kendalikan menyentuh atau menabrak objek rintangan berupa pesawat, namun ketika charater Icon pemain yang kita kendalikan melewati objek rintangan berupa pesawat maka game akan mendapatkan nilai score. Apabila pemain menabrak layar atau menabrak objek rintangan berupa pesawat program akan menampilkan akhirnya game dan akan memulai game dari awal menu lagi dengan menampilkan score yang akan diperoleh menjadi nol lagi dan score tertinggi yang diperoleh dari game sebelumnya



SARAN
     Pada game “Pesawatan” ini masih banyak nilai kurangnya. game ini dapat ditambahkan dalam pengembangannya seperti memberi background yang bergerak ,mengganti pesawat yang dipakai dan memasukan nama Pemain pada saat memperoleh score lebih tinggi. Dengan demikian penulis berharap agar game ini dapat berkembang kearah yang lebih baik, dengan penyempurnaan dikemudian hari.
















0 komentar:

Posting Komentar