logo

Python'da oyun nasıl geliştirilir

En uyarlanabilir dil, oyun geliştirme, web geliştirme, makine öğrenimi, yapay zeka ve GUI uygulamaları dahil olmak üzere neredeyse her sektörde kullanılan Python'dur.

Oyun, Python'un yerleşik bir özelliği olan pygame paketi kullanılarak geliştirilmiştir. Python programlamanın temel anlayışıyla, pygame modülünü kullanarak uygun animasyon, ses efektleri ve müzikle görsel olarak çekici oyunlar yaratabiliriz.

Video oyunları oluşturmak için Pygame adlı çapraz platform kütüphanesi kullanılır. Oyuncuya tipik bir oyun deneyimi sunmak için ses kütüphaneleri ve bilgisayar görselleri vardır.

Pete Shinners bunu PySDL'nin yerini alacak şekilde geliştiriyor.

Pygame için önkoşullar

Pygame'i öğrenebilmek için Python programlama dilini kavramamız gerekiyor.

dizeye tarih

Pygame'i yükleme

Pygame'i kurmak için bir komut satırı terminali açın ve aşağıdaki komutu girin.

json veri örneği
 pip install pygame 

IDE aracılığıyla da kurabiliriz. Daha fazla kurulum kılavuzu için pygame eğitimimizin tamamını ziyaret edin ( https://www.javatpoint.com/pygame ). Burada tüm önemli pygame açıklamalarını bulacaksınız.

Basit Pygame Örneği

Basit bir pygame penceresi oluşturmanın aşağıdaki örneği:

 import pygame pygame.init() screen = pygame.display.set_mode((400,500)) done = False while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True pygame.display.flip() 

Çıktı:

Python'da oyun nasıl geliştirilir

Açıklama:

Sağlanan kod 400x500 piksellik bir Pygame penceresi açar ve her zaman olayları izleyen bir döngü başlatır. Döngü 'done' değişkenini True olarak değiştirir; bu da döngüyü sonlandırır ve bir QUIT olayı algılanırsa (genellikle kullanıcı pencereden çıktığında) programı sonlandırır. 'pygame.display.flip()' yöntemi sayesinde ekranı günceller ve herhangi bir değişikliğin ekranda gösterilmesini sağlar. Kısaca açıklamak gerekirse kod, kullanıcı onu kapatana kadar aktif kalan, olay odaklı temel bir program yapısı sergileyen küçük bir Pygame penceresi oluşturur.

Tüm grafikler pygame penceresinde çizilecektir.

Yukarıdaki programın temel sözdizimini anlayalım.

görüntüyü css ile hizala
    pygame'i içe aktar:Pygame'in tüm fonksiyonlarına erişmemizi sağlayan modüldür.sıcaklık():Pygame'in gerekli modüllerinin her birini başlatmak için kullanılır.display.set_mode((genişlik, yükseklik)):Pencerenin boyutunu ayarlamak için kullanılır. Yüzeydeki eşyayı geri verecektir. Grafiksel eylemler yüzey nesnesi aracılığıyla gerçekleştirilir.event.get():Sonuç olarak boş bir olay kuyruğu ortaya çıkar. Eğer çağırmazsak işletim sistemi oyunu yanıt vermiyor olarak algılayacak ve pencere mesajları birikmeye başlayacaktır.ÇIKIŞ YAPMAK:Pencerenin köşesindeki çarpı butonuna tıkladığımızda olayı kapatmak için kullanılır.display.flip():Oyuna yapılan herhangi bir güncelleme buna yansıtılır. Herhangi bir değişiklik yaptığımızda ekranla iletişime geçmeliyiz.flip() bir fonksiyondur.

Güzel yazı tipleri ve resimler de dahil olmak üzere Pygame yüzeyine herhangi bir form çizilebilir. Pygame'deki çok sayıda yerleşik yöntem, ekranda geometrik şekiller çizmenize olanak tanır. Bu formlar bir oyun yaratmanın ilk adımlarını temsil eder.

Aşağıdaki ekran üzerine çizilen formun çizimini inceleyelim.

Örnek -

 import pygame from math import pi pygame.init() # size variable is using for set screen size size = [400, 300] screen = pygame.display.set_mode(size) pygame.display.set_caption('Example program to draw geometry') # done variable is using as flag done = False clock = pygame.time.Clock() while not done: # clock.tick() limits the while loop to a max of 10 times per second. clock.tick(10) for event in pygame.event.get(): # User did something if event.type == pygame.QUIT: # If user clicked on close symbol done = True # done variable that we are complete, so we exit this loop # All drawing code occurs after the for loop and but # inside the main while done==False loop. # Clear the default screen background and set the white screen background screen.fill((0, 0, 0)) # Draw on the screen a green line which is 5 pixels wide. pygame.draw.line(screen, (0, 255, 0), [0, 0], [50, 30], 5) # Draw on the screen a green line which is 5 pixels wide. pygame.draw.lines(screen, (0, 0, 0), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 5) # Draw a rectangle outline pygame.draw.rect(screen, (0, 0, 0), [75, 10, 50, 20], 2) # Draw a solid rectangle pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20]) # This draw an ellipse outline, using a rectangle as the outside boundaries pygame.draw.ellipse(screen, (255, 0, 0), [225, 10, 50, 20], 2) # This draw a solid ellipse, using a rectangle as the outside boundaries pygame.draw.ellipse(screen, (255, 0, 0), [300, 10, 50, 20]) # Draw a triangle using the polygon function pygame.draw.polygon(screen, (0, 0, 0), [[100, 100], [0, 200], [200, 200]], 5) # This draw a circle pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40) # This draw an arc pygame.draw.arc(screen, (0, 0, 0), [210, 75, 150, 125], 0, pi / 2, 2) # This function must write after all the other drawing commands. pygame.display.flip() # Quite the execution when clicking on close pygame.quit() 

Çıktı:

Python'da oyun nasıl geliştirilir

Açıklama:

Verilen Python programı Pygame paketini kullanarak içine farklı geometrik şekillerin çizildiği grafiksel bir pencere oluşturmaktadır. Program 400x300 piksellik bir Pygame penceresi oluşturuyor ve ardından her zaman olayları izleyen bir döngü başlatarak, kullanıcı pencereden çıkana kadar pencerenin açık kalmasını sağlıyor. Bu döngünün başlangıcında ekranı temizler ve ardından Pygame'in çizim rutinlerini kullanarak değişen renklere ve çizgi genişliklerine sahip çeşitli formlar oluşturur. Bu şekiller çizgiler, çokgenler, elipsler, daireler ve yayları içerir. Her formun kendine ait koordinatları ve tanımlanmış özellikleri vardır. Son olarak ekranı yenilemek için 'pygame.display.flip()' kullanılır. Program, pencere kapatıldığında pygame'i sonlandırır.

Uygulama, Pygame'in çizim yeteneklerinin uyarlanabilirliğine ve çeşitliliğine bir örnek teşkil eder ve etkileşimli grafik uygulamaları geliştirmek için bir çerçeve sağlar. Geliştiriciler, koordinatlar, renkler ve çizgi genişlikleri gibi parametreleri ayarlayarak Pygame'in grafik ortamında çok çeşitli görsel bileşenler oluşturabilirler. Bu, etkileşimli multimedya uygulamalarının, oyunların ve simülasyonların oluşturulmasına olanak tanır.

git çekme sözdizimi

Örnek - Pygame Kullanarak Yılan Oyunu Geliştirme

Programı -

 # Snake Tutorial Using Pygame import math import random import pygame import tkinter as tk from tkinter import messagebox class cube(object): rows = 20 w = 500 def __init__(self, start, dirnx=1, dirny=0, color=(255, 0, 0)): self.pos = start self.dirnx = 1 self.dirny = 0 self.color = color def move(self, dirnx, dirny): self.dirnx = dirnx self.dirny = dirny self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny) def draw(self, surface, eyes=False): dis = self.w // self.rows i = self.pos[0] j = self.pos[1] pygame.draw.rect(surface, self.color, (i * dis + 1, j * dis + 1, dis - 2, dis - 2)) if eyes: centre = dis // 2 radius = 3 circleMiddle = (i * dis + centre - radius, j * dis + 8) circleMiddle2 = (i * dis + dis - radius * 2, j * dis + 8) pygame.draw.circle(surface, (0, 0, 0), circleMiddle, radius) pygame.draw.circle(surface, (0, 0, 0), circleMiddle2, radius) # This class is defined for snake design and its movement class snake(object): body = [] turns = {} def __init__(self, color, pos): self.color = color self.head = cube(pos) self.body.append(self.head) self.dirnx = 0 self.dirny = 1 def move(self): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() keys = pygame.key.get_pressed() # It will manage the keys movement for the snake for key in keys: if keys[pygame.K_LEFT]: self.dirnx = -1 self.dirny = 0 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_RIGHT]: self.dirnx = 1 self.dirny = 0 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_UP]: self.dirnx = 0 self.dirny = -1 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] elif keys[pygame.K_DOWN]: self.dirnx = 0 self.dirny = 1 self.turns[self.head.pos[:]] = [self.dirnx, self.dirny] # Snake when hit the boundary wall for i, c in enumerate(self.body): p = c.pos[:] if p in self.turns: turn = self.turns[p] c.move(turn[0], turn[1]) if i == len(self.body) - 1: self.turns.pop(p) else: if c.dirnx == -1 and c.pos[0] = c.rows - 1: c.pos = (0, c.pos[1]) elif c.dirny == 1 and c.pos[1] &gt;= c.rows - 1: c.pos = (c.pos[0], 0) elif c.dirny == -1 and c.pos[1] <= 0 1 0: c.pos="(c.pos[0]," c.rows - 1) else: c.move(c.dirnx, c.dirny) def reset(self, pos): self.head="cube(pos)" self.body="[]" self.body.append(self.head) self.turns="{}" self.dirnx="0" self.dirny="1" # it will add the new cube in snake tail after every successful score addcube(self): dx, dy="tail.dirnx," tail.dirny if dx="=" and self.body.append(cube((tail.pos[0] 1, tail.pos[1]))) elif -1 + 1: self.body.append(cube((tail.pos[0], tail.pos[1] 1))) -1: self.body[-1].dirnx="dx" self.body[-1].dirny="dy" draw(self, surface): for i, c enumerate(self.body): i="=" c.draw(surface, true) c.draw(surface) drawgrid(w, rows, sizebtwn="w" rows x="0" y="0" l range(rows): draw grid line pygame.draw.line(surface, (255, 255, 255), (x, 0), w)) (0, y), (w, y)) this class define game surface redrawwindow(surface): global width, s, snack is used to surface.fill((0, 0, 0)) s.draw(surface) snack.draw(surface) drawgrid(width, surface) pygame.display.update() randomsnack(rows, item): positions="item.body" while true: len(list(filter(lambda z: z.pos="=" positions)))> 0: continue else: break return (x, y) # Using Tkinter function to display message def message_box(subject, content): root = tk.Tk() root.attributes(&apos;-topmost&apos;, True) root.withdraw() messagebox.showinfo(subject, content) try: root.destroy() except: pass # main() function def main(): global width, rows, s, snack width = 500 rows = 20 win = pygame.display.set_mode((width, width)) s = snake((255, 0, 0), (10, 10)) snack = cube(randomSnack(rows, s), color=(0, 255, 0)) flag = True clock = pygame.time.Clock() while flag: pygame.time.delay(50) clock.tick(10) s.move() if s.body[0].pos == snack.pos: s.addCube() snack = cube(randomSnack(rows, s), color=(0, 255, 0)) for x in range(len(s.body)): if s.body[x].pos in list(map(lambda z: z.pos, s.body[x + 1:])): print(&apos;Score: 
&apos;, len(s.body)) message_box(&apos;You Lost!
&apos;, &apos;Play again...
&apos;) s.reset((10, 10)) break redrawWindow(win) pass main() </=>

Çıktı:

iş parçacığı.destroy
Python'da oyun nasıl geliştirilir

Yılan kendisine dokunursa oyunu sonlandıracak ve aşağıdaki mesajı görüntüleyecektir.

Python'da oyun nasıl geliştirilir

Devam etmek için Tamam düğmesine tıklamanız yeterlidir. Pycharm terminali puanımızı görüntüler (biz Pycharm IDE'yi kullandık, ancak siz herhangi bir Python IDE'yi kullanabilirsiniz).

Python'da oyun nasıl geliştirilir

Açıklama:

Sağlanan Python betiği, basit bir Snake oyunu oluşturmak için Pygame paketini kullanır. Hem Yılan hem de vücudunu oluşturan ayrı küpler için sınıflar oluşturur. Pygame, ızgara yapısı ve hareketli bir yılan içeren oyun penceresini ayarlamak için kullanılır. Bir 'atıştırmalık' küpünü yedikten sonra yılan uzar ve kendisine veya sınır duvarlarına çarparsa oyun biter.

Yılanın yönünü yönetmek, ızgaradaki rastgele noktalarda atıştırmalıklar oluşturmak, yılanın başı ile vücudu arasındaki çarpışmaları tespit etmek, oyun durumunu güncellemek ve oyun penceresini yeniden çizmek için oyun mantığının kullanıcı girişini işlemesi gerekir. Betik, oyun etkileşimlerini ve görsel güncellemeleri kontrol etmek için Pygame'in olay işleme ve çizim yöntemlerinden yararlanır. Aynı zamanda, örneğin bir oyunu kaybettiklerinde oyuncu mesajlarını göstermek için Tkinter'ı kullanan temel bir mesaj kutusu özelliğine de sahiptir. Genel olarak senaryo, Pygame oyun programlamasındaki temel fikirleri gösteriyor ve eski Snake oyununun ilkel bir yorumunu sunuyor.