Şu anda temel olarak soft testte kullanılacak araçlar veya üçüncü taraf kütüphaneler yazılmıştır.Yün için koyun yakalamama prensibinden yola çıkarak, yolu değiştirin ve bu sefer basit bir yılan yazmak için pygame kütüphanesini kullanın. Python'a aşina olmak ve pratik yapmak da iyidir.
2. Kurulum ve içe aktarma
Kuruluma girmek için pip install pygame kullanın ve başarılı kurulumdan sonra gerekli modülleri içe aktarın:
import pygame,sys,random
from pygame.locals import *
Bunlar arasında sys, takipte kullanılacak çıkış programı mekanizmasıdır, bu yüzden buraya import edilmesi gerekir.
3. Sonraki işlemler için gerekli parametreleri tanımlayın
#Pygame kitaplığını başlat
pygame.init()
Pygame kullanırken, aşağıdaki çıkış koduna karşılık gelen kitaplığı başlatmak gerekir, bu ikisi bir çifttir.
#Oyun arayüzünü başlat
DISPLAY=pygame.display.set_mode((800,800))
#Oyun penceresi başlığını ayarla
pygame.display.set_caption('Yılan Oyunum')Yukarıdaki kodu yazdıktan sonra, çalıştırmak için tıklayın ve yanıp sönen bir arayüz olacaktır, bu normaldir çünkü hiçbir şey çalışmıyor.
#Oyun hızını kontrol etmek için bir değişken tanımla
FPSCLOCK=pygame.time.Clock()
#renk tanımlama
BLACK=pygame.Color(0,0,0)
WHITE=pygame.Color(255,255,255)
RED=pygame.Color(255,0,0)
# Yılan kafasının başlangıç konumunu tanımlayın
snake_Head=[100,100]
# Bir yılanın ilk uzunluğunu tanımlayın, çünkü arayüz 20*20 olduğundan uzunluk 20 azaltılır
snake_Body=[[80,100], [60,100]]
# # Yılan başlangıç yönü
direction="right"
# Yönü değiştirmek için değişkeni tanımlayın, tuşuna basın
changeDirection = direction
#başlangıçtaki yemek pozisyonunu tanımlayın
food_Postion = [300,300]
# Yemek durumunu tanımlayın, 0 yenilmiş, 1 yenilmemiş anlamına gelir
food_Total = 1
NOT:Yukarıdakilerin tümü daha sonra kullanılacak tanımlayıcı parametrelerdir. 4. Yılan ve Yiyecek Çizimi
#yılanı çiz
def drawSnake(snake_Body):
for i in snake_Body:
pygame.draw.rect(DISPLAY,WHITE,Rect(i[0],i[1],20,20))
# yemek yerini çiz
def drawFood(food_Postion):
pygame.draw.rect(DISPLAY,RED,Rect(food_Postion[0],food_Postion[1],20,20))Yukarıdaki pygame.draw.rect(DISPLAY,RED,Rect(food_Postion[0],food_Postion[1],20,20)) çizimi pygame'in çizim modülüdür, DISPLAY in rect ise oyun arayüzündeki rengi çizmek içindir. küme, çizilen dikdörtgenin alanı, dikdörtgenin genişliği ve yüksekliği.
5. Oyun kuralları ve işleyişi
def gameover():
#pygame'den çık
pygame.quit()
#programdan çık
sys.exit()NOT:Burada ayarlanan çıkış, yukarıdaki pygame.init() işlevine karşılık gelir. game_flag=True
while game_flag:
# arka plan rengini oluştur
DISPLAY.fill(BLACK)
#açgözlü yılan çizimi
drawSnake(snake_Body)
#yemek yeri çiz
drawFood(food_Postion)Burada arka plan siyah olarak ayarlanmıştır, bu da tanım rengindeki ayara karşılık gelir ve yılanın ve yiyeceğin konumu da yukarıdakine karşılık gelir.
#Oyun hızını artır
game_speed=1+len(snake_Body)//3
#Görüntü katmanını yenile, yılan ve yiyecek her hareket ettiğinde görüntü katmanı yenilenir
pygame.display.flip()
FPSCLOCK.tick(game_speed)
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()Oyunun hızı burada belirtilir ve yemek yedikten sonra hareket hızı artar.
elif event.type == KEYDOWN:
# Sağ ok veya d ise yılan sağa doğru hareket eder
if event.key == K_RIGHT or event.key == K_d:
changeDirection = 'right'
# Ok veya a ise yılan sola hareket eder
if event.key == K_LEFT or event.key == K_a:
changeDirection = 'left'
if event.key == K_UP or event.key == K_w:
changeDirection = 'up'
if event.key == K_DOWN or event.key == K_s:
changeDirection = 'down'
# Çıkmak için esc'ye tıklayın
if event.key == KSCAN_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# Yönü onaylayın ve ters yönün girilip girilmediğini belirleyin
if changeDirection == 'right' and not direction == 'left':
direction = changeDirection
if changeDirection == 'left' and not direction == 'right':
direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
direction = changeDirection
#Yılan kafasını yöne göre hareket ettir
if direction=='right':
snake_Head[0]+=20
if direction=='left':
snake_Head[0]-=20
if direction=='up':
snake_Head[1]-=20
if direction=='down':
snake_Head[1]+=20Buradaki tırnak içindeki kelimenin, yılanın ilk yönündeki kelimeyle tutarlı olması gerektiğine dikkat edin, aksi takdirde, changeDirection == 'sağ' ve yön == 'sol' değilse, çalışma zamanında sorunlar olacaktır: Bu, şu anlama gelir: Sağ hareketi gerçekleştirmek için "→" veya "D" kullanabilirsiniz, ayrıca changeDirection == 'sağ' ve yön değil == 'sol': Bu, yürürken "A" veya "←" ye basarsanız anlamına gelir doğru, bunun hiçbir etkisi olmaz ve ayrıca, eğer yön==' right':snake_Head[0]+=20 ise bir kare sağa hareket etmek için "→" veya "D"ye tıklamak anlamına gelir, çünkü kare 20'dir *20, yani bir kare 20'dir
#Yılanın uzunluğunu artırın
snake_Body.insert(0,list(snake_Head))
#Yemek yiyip yememeye karar verin
if snake_Head[0] == food_Postion[0] and snake_Head[1] == food_Postion[1]:
food_Total = 0
else:
snake_Body.pop()yılan_Body.pop(), yemek yenmezse yeni yemek eklenmeyecek demektir, böyle bir kod yoksa yılanın yemek yemeden boyunun uzamasına neden olacaktır.
if food_Total == 0:
x = random.randrange(1, 32)
y = random.randrange(1, 24)
food_Postion = [int(x * 20), int(y * 20)]
food_Total = 1Bu, eğer yiyecek yenirse ve durum 0 ise, rastgele bir yerde üretileceği anlamına gelir.
if snake_Head[0] > 800 or snake_Head[0] < 0:
gameover()
elif snake_Head[0] > 800 or snake_Head[0] < 0:
gameover()
# Kendine çarparsan
for body in snake_Body[1:]:
if snake_Head[0] == body[0] and snake_Head[1] == body[1]:
gameover()if snake_Head[0] > 800 veya snake_Head[0] < 0: Bu, sınırla karşılaştığında oyundan çıktığı anlamına gelir ve 800 tam olarak ayarlanmış arayüz boyutudur
Son Ekran
Tüm Kodlar import pygame,sys,random
from pygame.locals import *
#Pygame kitaplığını başlat
pygame.init()
#Oyun arayüzünü başlat
DISPLAY=pygame.display.set_mode((800,800))
#Oyun penceresi başlığını ayarla
pygame.display.set_caption('Yılan')
#Oyun hızını kontrol etmek için bir değişken tanımla
FPSCLOCK=pygame.time.Clock()
#renk tanımla
BLACK=pygame.Color(0,0,0)
WHITE=pygame.Color(255,255,255)
RED=pygame.Color(255,0,0)
# Yılan kafasının başlangıç konumunu tanımlayın
snake_Head=[100,100]
# Bir yılanın başlangıç uzunluğunu tanımlayın, çünkü arayüz 20*20 olduğundan uzunluk 20 azaltılır
snake_Body=[[80,100], [60,100],[40,100]]
# # Yılan başlangıç yönü
direction="right"
# Yönü değiştirmek için değişkeni tanımlayın, tuşuna basın
changeDirection = direction
#başlangıçtaki yemek pozisyonunu tanımlayın
food_Postion = [300,300]
# Yemek durumunu tanımlayın, 0 yenilmiş, 1 yenilmemiş anlamına gelir
food_Total = 1
#yılan çiz
def drawSnake(snake_Body):
for i in snake_Body:
pygame.draw.rect(DISPLAY,WHITE,Rect(i[0],i[1],20,20))
# yemek yerini çiz
def drawFood(food_Postion):
pygame.draw.rect(DISPLAY,RED,Rect(food_Postion[0],food_Postion[1],20,20))
def gameover():
#pygame'den çık
pygame.quit()
#programdan çık
sys.exit()
game_flag=True
while game_flag:
# arka plan rengini oluştur
DISPLAY.fill(BLACK)
#açgözlü yılan çizimi
drawSnake(snake_Body)
#yemek yeri çiz
drawFood(food_Postion)
#Oyun hızını artır
game_speed=1+len(snake_Body)//3
#Görüntü katmanını yenile, yılan ve yiyecek her hareket ettiğinde görüntü katmanı yenilenir
pygame.display.flip()
FPSCLOCK.tick(game_speed)
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
# Sağ ok veya d ise yılan sağa doğru hareket eder
if event.key == K_RIGHT or event.key == K_d:
changeDirection = 'right'
# Ok veya a ise yılan sola hareket eder
if event.key == K_LEFT or event.key == K_a:
changeDirection = 'left'
if event.key == K_UP or event.key == K_w:
changeDirection = 'up'
if event.key == K_DOWN or event.key == K_s:
changeDirection = 'down'
# Çıkmak için esc'ye tıklayın
if event.key == KSCAN_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
if changeDirection == 'right' and not direction == 'left':
direction = changeDirection
if changeDirection == 'left' and not direction == 'right':
direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
direction = changeDirection
if direction=='right':
snake_Head[0]+=20
if direction=='left':
snake_Head[0]-=20
if direction=='up':
snake_Head[1]-=20
if direction=='down':
snake_Head[1]+=20
snake_Body.insert(0,list(snake_Head))
if snake_Head[0] == food_Postion[0] and snake_Head[1] == food_Postion[1]:
food_Total = 0
else:
snake_Body.pop()
if food_Total == 0:
x = random.randrange(1, 32)
y = random.randrange(1, 24)
food_Postion = [int(x * 20), int(y * 20)]
food_Total = 1
if snake_Head[0] > 800 or snake_Head[0] < 0:
gameover()
elif snake_Head[0] > 800 or snake_Head[0] < 0:
gameover()
for body in snake_Body[1:]:
if snake_Head[0] == body[0] and snake_Head[1] == body[1]:
gameover()