cara membuat game ular - ularan di tkinter

BelajarPython - assalamualaikum wr. wb.

Jumpa lagi nih temen  -  temen... Pada kesempatan kali ini saya akan mencoba untuk memberikan sebuah contoh game pade postingan kali ini.. Dan tentu saja saya akan menggunakan modul tkinter untuk belajar tampilan python tersebut. Namun sebelum kita melanjutkan postingan kali ini, kalian harus mengistall bahasa pemrogramannya dulu ya.. Tentu saja bahasa python temen - temen... Kalian udah install belum nih ? Nah bagi kalian yang berlum install, di install dulu ya temen - temen.. Kalian bisa mendapatkan file instalasinya pada situs atau laman resmi nya python ya.. Yaitu di Https://python.org/download yaa...

Namun jika kalian membutuhkan sebuah bimbingan instalasinya, kalian tidak perlu khawatir ya.. Karena saya sudah menyiapkan postingan yang khusus membahas mengenai cara untuk melakukan proses install dari bahasa pemrograman python ini... Nah jika kalian tertarik untuk membaca postingan yang saya maksud tadi, KALIAN BISA KLIK DISINI YA temen - temen.... Dan silahkan install dengan mengikuti setiap instruksi yang sudah saya sediakan tersebut ya....

Nah setelah kalian install python nya, yuk kita lanjut lagi potingan kita kali ini.. Jadi. Seperti yang sudah saya katakan tadi ya... Saya akan memberikan sebuah contoh game dari tkinter python 3 ya.. Dan lebih tepatnya, saya akan membuat sebuah permainan ular.. Udah pada tau kan permainan ular ini ?? Saya yakin kalian sudah paham ya.. Karena sudah banyak di temukan permainan ular ini di HP - HP jadul... Nah jika sudah paham, yuk langsung saja yuk kita simak sama - sama postingan saya kali ini.. Let’s check it out temen - temen...

Code program untuk membuat game ular di tkinter python 3.

Nah pada segment yang pertama ini, saya akan mencoba untuk langsung memberikan code program untuk membuat game ular ini.. Dan tentu saja program nya sepanjang jalan raya ya.. Hehe maapp lebay.. Karena memang code program nya yang cukup panjang dan bisa ditambahi dengan kata “banget”. Hehe.. Oke tanpa lama - lama lagi, langsung saja kita lihat code program nya di bawah ini ya guys... Oke silahkan di lihat dan jangan di pahami yaa.. Karena susah banget.. Oke silahkan dilihat ya.. Hehe

"""
nilai keycode arah kanan, kiri, atas dan bawah pada keybord memiliki nilai yang berbeda.. silahkan cek di bawah ini

#untuk pengguna windows, silahkan ubah nilai pengecekan keycode nya seperti di bawa  ini
            if event.keycode == 38:
                self.direction = "up"
            elif event.keycode == 39:
                self.direction = "right"
            elif event.keycode == 40:
                self.direction = "down"
            elif event.keycode == 37:
                self.direction = "left"

#untuk pengguna linux, silahkan ubah nilai pengecekan keycode nya seperti di bawa  ini
            if event.keycode == 111:
                self.direction = "up"
            elif event.keycode == 114:
                self.direction = "right"
            elif event.keycode == 116:
                self.direction = "down"
            elif event.keycode == 113:
                self.direction = "left"
"""


import threading
import random
import os.path
from tkinter import *

WIDTH = 500
HEIGHT = 500

class Snake(Frame):

    def __init__(self):
        Frame.__init__(self)

        self.master.title("Permainan ular. mn-belajarpython.blogspot.com")
        self.grid()

        frame1 = Frame(self)
        frame1.grid()

        self.canvas = Canvas(frame1, width = WIDTH, height = HEIGHT, bg ="white")
        self.canvas.grid(columnspan = 3)
        self.canvas.focus_set()
        self.canvas.bind("<Button-1>", self.create)
        self.canvas.bind("<Key>", self.create)

        newGame = Button(frame1, text = "Permainan Baru", command = self.new_game)
        newGame.grid(row = 1, column = 0, sticky = E)

        self.score_label = Label(frame1)
        self.score_label.grid(row = 1, column = 1)

        self.high_score_label = Label(frame1)
        self.high_score_label.grid(row = 1, column = 2)

        self.new_game()

    def new_game(self):
        self.canvas.delete(ALL)
        self.canvas.create_text(WIDTH/2,HEIGHT/2-50,text="selamat datang di game ular ini!"\
                                + "\nklik window atau tekan salah satu tombol arah"
                                + "\nuntuk memulai game ini..", tag="welcome_text")

        rectWidth = WIDTH/25

        rect1 = self.canvas.create_rectangle(WIDTH/2-rectWidth/2, HEIGHT/2-rectWidth/2, WIDTH/2+rectWidth/2\
                                             , HEIGHT/2+rectWidth/2, outline="#dbf", fill="#dbf"\
                                             , tag="rect1")
        rect2 = self.canvas.create_rectangle(WIDTH/2-rectWidth/2, HEIGHT/2-rectWidth/2, WIDTH/2+rectWidth/2\
                                             , HEIGHT/2+rectWidth/2, outline="#dbf", fill="#dbf"\
                                             , tag="rect2")
        rect3 = self.canvas.create_rectangle(WIDTH/2-rectWidth/2, HEIGHT/2-rectWidth/2, WIDTH/2+rectWidth/2\
                                             , HEIGHT/2+rectWidth/2, outline="#dbf", fill="#dbf"\
                                             , tag="rect3")



        self.rectWidth = rectWidth
        self.lastDirection = None
        self.direction = None
        self.started = False
        self.game_over = False
        self.score = 0


        if (os.path.isfile("high_score.txt")):
            scoreFile = open("high_score.txt")
            self.high_score = int(scoreFile.read())
            scoreFile.close()
        else:
            self.high_score = 0

        self.high_score_label["text"] = "Score tertinggi: " + str(self.high_score)

        self.rectangles = [rect1,rect2,rect3]

        self.dot = None

        self.move()


    def create(self, event):
        self.lastDirection = self.direction
        if self.game_over == False:
            if event.keycode == 38: #untuk linux nilai nya adalah 111
                self.direction = "up"
            elif event.keycode == 39: #untuk linux nilai nya adalah 114
                self.direction = "right"
            elif event.keycode == 40: #untuk linux nilai nya adalah 116
                self.direction = "down"
            elif event.keycode == 37: #untuk linux nilai nya adalah 113
                self.direction = "left"
            elif event.x < WIDTH/2 and HEIGHT/3 < event.y < HEIGHT-HEIGHT/3:
                self.direction = "left"
            elif event.x > WIDTH/2 and HEIGHT/3 < event.y < HEIGHT-HEIGHT/3:
                self.direction= "right"
            elif WIDTH/3 < event.x < WIDTH-WIDTH/3 and event.y < HEIGHT/2:
                self.direction = "up"
            elif WIDTH/3 < event.x < WIDTH-WIDTH/3 and event.y > HEIGHT/2:
                self.direction= "down"

    def first_movement(self):
        w = self.rectWidth
        self.canvas.delete("welcome_text")

        if self.direction == "left":
                self.canvas.move("rect1",-w,0)
                self.canvas.after(100)
                self.canvas.move("rect1",-w,0)
                self.canvas.move("rect2",-w,0)
        elif self.direction == "down":
                self.canvas.move("rect1",0,w)
                self.canvas.after(100)
                self.canvas.move("rect1",0,w)
                self.canvas.move("rect2",0,w)
        elif self.direction == "right":
                self.canvas.move("rect1",w,0)
                self.canvas.after(100)
                self.canvas.move("rect1",w,0)
                self.canvas.move("rect2",w,0)
        elif self.direction == "up":
            self.canvas.move("rect1",0,-w)
            self.canvas.after(100)
            self.canvas.move("rect1",0,-w)
            self.canvas.move("rect2",0,-w)
        self.canvas.after(100)

    def _move(self):
        w = self.rectWidth
        while True:
            self.score_label["text"] = "Score: " + str(self.score)
            if self.started == False and self.direction != None:
                self.first_movement()
                self.started = True
            elif self.started == True and self.game_over == False:
                if self.dot == None:
                    self.make_new_dot()
                lock = threading.Lock()
                lock.acquire()
                endRect = self.rectangles.pop()
                frontCoords = self.canvas.coords(self.rectangles[0])
                endCoords = self.canvas.coords(endRect)

                if self.direction == "left":
                    self.canvas.move(self.canvas.gettags(endRect), int(frontCoords[0]-endCoords[0])-w,\
                                     int(frontCoords[1]-endCoords[1]))
                elif self.direction == "down":
                    self.canvas.move(self.canvas.gettags(endRect), int(frontCoords[0]-endCoords[0]),\
                                     int(frontCoords[1]-endCoords[1])+w)
                elif self.direction == "right":
                    self.canvas.move(self.canvas.gettags(endRect), int(frontCoords[0]-endCoords[0])+w,\
                                     int(frontCoords[1]-endCoords[1]))
                elif self.direction == "up":
                    self.canvas.move(self.canvas.gettags(endRect), int(frontCoords[0]-endCoords[0]),\
                                     int(frontCoords[1]-endCoords[1])-w)
                self.canvas.after(100)
                self.rectangles.insert(0, endRect)
                lock.release()
                self.check_bounds()
                self.check_collide()
            elif self.game_over == True:
                break;

    def move(self):
        threading.Thread(target=self._move).start()

    def make_new_dot(self):
        if self.dot != None:
            self.canvas.delete(self.dot)
            self.dot = None
        dotX = random.random()*(WIDTH-self.rectWidth*2) + self.rectWidth
        dotY = random.random()*(HEIGHT-self.rectWidth*2) + self.rectWidth
        self.dot = self.canvas.create_rectangle(dotX,dotY,dotX+self.rectWidth,dotY+self.rectWidth\
                                                ,outline="#ddd", fill="#ddd", tag="dot")

    def grow(self):
        w = self.rectWidth
        lock = threading.Lock()
        lock.acquire()

        self.score += 100

        endCoords = self.canvas.coords(self.rectangles[len(self.rectangles)-1])

        thisTag = "rect" + str(len(self.rectangles) + 1)
        x1 = int(endCoords[0])
        y1 = int(endCoords[1])
        x2 = int(endCoords[2])
        y2 = int(endCoords[3])

        if self.direction == "left":
            x1 += w
            x2 += w
        elif self.direction == "right":
            x1 -= w
            x2 -= w
        elif self.direction == "down":
            y1 -= w
            y2 -= w
        elif self.direction == "up":
            y1 += w
            y2 += w

        thisRect = self.canvas.create_rectangle(x1, y1, x2, y2, outline="#dbf",\
                                     fill="#dbf", tag=thisTag)
        self.rectangles.append(thisRect)
        lock.release()


    def check_bounds(self):
        coordinates = self.canvas.coords(self.rectangles[0])
        if len(coordinates) > 0:
            if coordinates[0] < 0 or coordinates[1] < 0 or coordinates[2] > WIDTH\
               or coordinates[3] > HEIGHT:
                self.end_game()

    def check_collide(self):
        frontCoords = self.canvas.coords(self.rectangles[0])

        overlapping = self.canvas.find_overlapping(frontCoords[0],frontCoords[1]\
                                                         ,frontCoords[2],frontCoords[3])
        for item in overlapping:
            if item == self.dot:
                #Snake collided with dot, grow snake and move dot
                self.grow()
                self.make_new_dot()
            if item in self.rectangles[3:]:
                #Snake has collided with its body, end game
                self.end_game()


        if (self.lastDirection == "left" and self.direction == "right") or\
           (self.lastDirection == "right" and self.direction == "left") or\
           (self.lastDirection == "up" and self.direction == "down") or\
           (self.lastDirection == "down" and self.direction == "up"):
            self.end_game()

    def end_game(self):
        self.game_over = True
        self.canvas.create_text(WIDTH/2,HEIGHT/2,text="GAME OVER!")
        if self.score > self.high_score:
            scoreFile = open("high_score.txt", "w")
            scoreFile.write(str(self.score))
            scoreFile.close()
            self.canvas.create_text(WIDTH/2,HEIGHT/2+20,text=\
                                    "wew.... Kamu mendapatkan Score tinggi baru!")

Snake().mainloop()


Nah itu dia temen - temen code program nya... Gimana ? Panjang sekali dan panjang banget ya.. Waw... Saya tidak merekomendasikan untuk kalian pahami.. Karena code programnya yang cukup panjang sekali itu ya alasan saya.. Silahkan salin code program di atas untuk memainkan game nya ya... Game ini merupakan game sederhana yang bisa menjadikan sebagai referensi bagi kalian nantinya ya.. Oke silahkan di coba game nya ya...

Tampilan game ular sederhana di tkinter python 3.

Nah pada segment ini saya akan mencoba untuk memberikan tampilan dari game yang sudah saya bagikan ini... Nah seperti apa ya kira - kira tampilannya.. Dan seperti apa hasil tampilannya jika kita jalankan code program sepanjang itu ? Untuk menjawabnya, silahkan simak gambar - gambar di bawah ini ya...  Untuk menetralkan rasa penasaran kalian.. Hehe.. Oke silahkan disimak sama - sama gambar hasil screenshoot nya di bawah ini ya temen - temen... Let’s check it out..
Nah gambar di atas merupakan gambar yang saya ambil saat game ini saya mulai pertama kali... Bisa kalian lihat sendiri ya disana.... Terdapat beberapa elemen.. Seperti teks pembuka. Tombol untuk memulai permainan, dan scorer disana...
Dan gambar di atas ini merupakan gambar saat kita memulai permainannya ya.. Dan kita mengendalikan gamenya dengan tombol arah di kerboard ya... Silahkan dicoba.. Dan tentu saja kita harus memakan kotak yang berwarna abu - abu itu ya temen - temen.. Seperti game ular pada umumnya ya...
Dan gambar di atas merupakan gambar yang di ambil ketika saya kalah.. Yaitu menabrak pembatas di window nya.. Dan juga jika kita memakan diri kita sendiri.. Maksudnya adalah memakan ularnya itu sendiri ya... Silahkan klik tombol “permainan baru” untuk memulai game baru ya...
Dan gambar di atas lah yang akan kita dapatkan jika kita berhasil mengalahkan score tertinggi yang pernah di capai sebelumnya.... Gimana udah pahamm kan? Ya saya rasa kalian sudah pahmam banget ya.. Hehe Oke sekian dulu ya temen - temen postingan saya kali ini.. Semoga apa yang sudah saya sajikan di atas dapat menambah pengetahuan dan ilmu baru bagi kalian.. Dan terimakasih ya sudah berkunjung dan membaca postingan saya kali ini.. Dan mohon maaf ya atas kekurangan ataupun ketidak jelasan yang ada di blog ini maupun pada postingan kali ini.. Jika kalian berkenan untuk menyampaikan kritik dan saran, kalian bisa menyampaikannya pada laman hubungi kami yang ada di blog ini ya... Dan jangan lupa share ke temen kalian ya.. Hehe oke teriamakasi banyak ya dan sampai disini dulu.. Sampai jumpa di postingan saya yang lainnya ya temen - teme.. Oke terimakasi... Wassalamualaikum wr. wb.
Previous
Next Post »
Thanks for your comment