Python Öğreniyorum 10 – Pythonda yılan oyunu yapma
Python Öğreniyorum 10 – Pythonda yılan oyunu yapma. Merhabalar, bu videomuzda Python dilinde turtle modülünü kullanarak yılan oyununu yapacağız.
0:00 Oyun tanıtımı
0:55 Pencere hazırlama
3:00 Yılan kafasını hazırlama
4:38 Hareketi organize etme
6:30 Klavye kontrolü
10:30 Programı yavaşlatma
11:23 Yemek ekleme
12:30 Çarpışma kontrolü
14:00 Kuyruk ekleme
18:18 Kenar çarpma kontrolü
21:08 Puan ekleme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import random import turtle import time delay = 0.15 pencere = turtle.Screen() pencere.title('Yılan Oyunu') pencere.bgcolor('lightgreen') pencere.setup(width=600, height=600) pencere.tracer(0) kafa = turtle.Turtle() kafa.speed(0) kafa.shape("square") kafa.color("black") kafa.penup() kafa.goto(0, 100) kafa.direction = "stop" yemek = turtle.Turtle() yemek.speed(0) yemek.shape("circle") yemek.color("red") yemek.penup() yemek.shapesize(0.80, 0.80) yemek.goto(0, 0) kuyruklar = [] puan = 0 yaz = turtle.Turtle() yaz.speed(0) yaz.shape("square") yaz.color("white") yaz.penup() yaz.hideturtle() yaz.goto(0, 260) yaz.write("Puan: {}".format(puan), align="center", font=("Courier", 24, "normal")) def move(): if kafa.direction == "up": y = kafa.ycor() kafa.sety(y + 20) if kafa.direction == "down": y = kafa.ycor() kafa.sety(y - 20) if kafa.direction == "right": x = kafa.xcor() kafa.setx(x + 20) if kafa.direction == "left": x = kafa.xcor() kafa.setx(x - 20) def go_up(): if kafa.direction != "down": kafa.direction = "up" def go_down(): if kafa.direction != "up": kafa.direction = "down" def go_right(): if kafa.direction != "left": kafa.direction = "right" def go_left(): if kafa.direction != "right": kafa.direction = "left" pencere.listen() pencere.onkey(go_up, "Up") pencere.onkey(go_down, "Down") pencere.onkey(go_right, "Right") pencere.onkey(go_left, "Left") while True: pencere.update() if kafa.xcor() > 300 or kafa.xcor() < -300 or kafa.ycor() > 300 or kafa.ycor() < -300: time.sleep(1) kafa.goto(0, 0) kafa.direction = "stop" for kuyruk in kuyruklar: kuyruk.goto(1000, 1000) kuyruklar = [] puan = 0 delay = 0.1 yaz.clear() yaz.write("Puan: {}".format(puan), align="center", font=("Courier", 24, "normal")) if kafa.distance(yemek) < 20: x = random.randint(-250, 250) y = random.randint(-250, 250) yemek.goto(x, y) yeni_kuyruk = turtle.Turtle() yeni_kuyruk.speed(0) yeni_kuyruk.shape("square") yeni_kuyruk.color("white") yeni_kuyruk.penup() kuyruklar.append(yeni_kuyruk) delay -= 0.001 puan = puan + 10 yaz.clear() yaz.write("Puan: {}".format(puan), align="center", font=("Courier", 24, "normal")) for index in range(len(kuyruklar) - 1, 0, -1): x = kuyruklar[index - 1].xcor() y = kuyruklar[index - 1].ycor() kuyruklar[index].goto(x, y) if len(kuyruklar) > 0: x = kafa.xcor() y = kafa.ycor() kuyruklar[0].goto(x, y) move() for segment in kuyruklar: if segment.distance(kafa) < 20: time.sleep(1) kafa.goto(0, 0) kafa.direction = "stop" for segment in kuyruklar: segment.goto(1000, 1000) kuyruklar = [] puan = 0 yaz.clear() yaz.write('Puan: {}'.format(puan), align='center', font=('Courier', 24, 'normal')) hiz = 0.15 time.sleep(delay) |
Mer haba ben seni youtubede takip eden kişi bu yılan oyununuda ben yazdım nasıl ? 🙂
import pygame
import sys
import random
class Hedef():
def __init__(self):
self.konum = (0,0)
self.renk = (255, 0, 0)
self.rasgele_konumlandır()
def rasgele_konumlandır(self):
self.konum = (random.randint(0, kare_genisligi-5)*kareboyutu, random.randint(0, kare_uzunlugu-5)*kareboyutu)
def draw(self, yüzey):
r = pygame.Rect((self.konum[0], self.konum[1]), (kareboyutu, kareboyutu))
pygame.draw.rect(yüzey, self.renk, r)
pygame.draw.rect(yüzey, (0, 0, 0), r, 5)
def zemin_ciz(yüzey):
for y in range(0, int(kare_uzunlugu)):
for x in range(0, int(kare_genisligi)):
if (x+y)%2 == 0:
r = pygame.Rect((x*kareboyutu, y*kareboyutu), (kareboyutu,kareboyutu))
pygame.draw.rect(yüzey,(192, 192, 192), r)
else:
rr = pygame.Rect((x*kareboyutu, y*kareboyutu), (kareboyutu,kareboyutu))
pygame.draw.rect(yüzey, (192, 192, 192), rr)
class Yılan():
def __init__(self):
self.renk = (0, 0, 128)
self.puan = 0
self.uznluk = 5
self.konum = [((ekran_yüksekligi/2), (ekran_genişliği/2))]
self.kontrol = random.choice([yukarı, asagı, sol, sag])
def reset(self):
self.renk = (255, 0, 0)
def kafa_konumunu_don(self):
return self.konum[0]
def hareket(self):
kafa = self.kafa_konumunu_don()
x,y = self.kontrol
ek = (((kafa[0]+(x*kareboyutu))%ekran_yüksekligi), (kafa[1]+(y*kareboyutu))%ekran_genişliği)
if len(self.konum) > 2 and ek in self.konum[2:]:
self.reset()
else:
self.konum.insert(0,ek)
if len(self.konum) > self.uznluk:
self.konum.pop()
def don(self, point):
if self.uznluk > 1 and (point[0]*-1, point[1]*-1)== self.kontrol:
return
else:
self.kontrol = point
def draw(self,yüzey):
for p in self.konum:
r = pygame.Rect((p[0], p[1]), (kareboyutu,kareboyutu))
pygame.draw.rect(yüzey, self.renk, r)
pygame.draw.rect(yüzey, (0,0, 0), r, 1)
def draw(self,yüzey):
for p in self.konum:
r = pygame.Rect((p[0], p[1]), (kareboyutu,kareboyutu))
pygame.draw.rect(yüzey, self.renk, r)
pygame.draw.rect(yüzey, (0,0, 0), r, 10)
def tus_kontrol(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.don(yukarı)
elif event.key == pygame.K_DOWN:
self.don(asagı)
elif event.key == pygame.K_LEFT:
self.don(sol)
elif event.key == pygame.K_RIGHT:
self.don(sag)
ekran_yüksekligi = 800
ekran_genişliği = 600
kareboyutu = 20
kare_genisligi = ekran_yüksekligi / kareboyutu
kare_uzunlugu = ekran_genişliği / kareboyutu
yukarı = (0,-1)
asagı = (0,1)
sol = (-1,0)
sag = (1,0)
def main():
pygame.init()
zmn = pygame.time.Clock()
ekran = pygame.display.set_mode((ekran_yüksekligi, ekran_genişliği), 0, 32)
yüzey = pygame.Surface(ekran.get_size())
yüzey = yüzey.convert()
zemin_ciz(yüzey)
yılan = Yılan()
yemek = Hedef()
font = pygame.font.SysFont(“verdana bold”,36)
while (True):
zmn.tick(10)
yılan.tus_kontrol()
zemin_ciz(yüzey)
yılan.hareket()
if yılan.kafa_konumunu_don() == yemek.konum:
yılan.uznluk += 10
yılan.puan += 100000
yemek.rasgele_konumlandır()
if yılan.puan == 100:
break
yılan.draw(yüzey)
yemek.draw(yüzey)
ekran.blit(yüzey, (0,0))
text = font.render(“puan {0}”.format(yılan.puan), 1, (0,0,0))
ekran.blit(text, (5,10))
pygame.display.update()
main()
merhaba, girintili haliyle gönderebilirmisiniz?
iyi ama etni goturemiyom. Yani kopyalaiyorum 🙁
cok tesekur ederim pythona olan hevesim dahada artdi sayenizde
Merhaba Kolay gelsin hocam. Size biir sorum olacak. Benim final ödevim için oyun yapmam gerek. Sizin kodlarınızı aldım ama eğişiklik yapmamızı istiyor hoca. Ben de 2 kişilik yapmayı uygun gördüm. Sizin kodları derledim ve Kafa1,Kafa2 gibi tüm verileri 1,2 olarak yazdım. Kuyruklar puan yemek hepsini. İkisi çarptığında ölmesi için distance kullandım. Fakat girinti hatası alıyorum. Size atsam bana zaman ayırıp bakabilir misiniz? 30’unda teslim edeceğim. Benim için çok mühim. Teşekkür ederim hocam, bilgileriniz için.
import random
import turtle
import time
delay = 0.10
pencere = turtle.Screen()
pencere.title(‘Yılan Oyunu’)
pencere.bgcolor(‘pink’)
pencere.setup(width=600, height=600)
pencere.tracer(0)
kafa1 = turtle.Turtle()
kafa1.speed(0)
kafa1.shape(“circle”)
kafa1.color(“black”)
kafa1.penup()
kafa1.goto(0, 100)
kafa1.direction = “stop”
kafa2 = turtle.Turtle()
kafa2.speed(0)
kafa2.shape(“circle”)
kafa2.color(“white”)
kafa2.penup()
kafa2.goto(100, 0)
kafa2.direction = “stop”
#YEMEK
yemek1 = turtle.Turtle()
yemek1.speed(0)
yemek1.shape(“circle”)
yemek1.color(“red”)
yemek1.penup()
yemek1.shapesize(0.80, 0.80)
yemek1.goto(0, 0)
yemek2 = turtle.Turtle()
yemek2.speed(0)
yemek2.shape(“circle”)
yemek2.color(“blue”)
yemek2.penup()
yemek2.shapesize(0.80, 0.80)
yemek2.goto(0, 0)
kuyruklar1 = []
kuyruklar2 = []
puan1 = 0
puan2 = 0
yaz1 = turtle.Turtle()
yaz1.speed(0)
yaz1.shape(“square”)
yaz1.color(“white”)
yaz1.penup()
yaz1.hideturtle()
yaz1.goto(0, -260)
yaz1.write(“Puan: {}”.format(puan1), align=”center”, font=(“arial” , 24, “normal”))
yaz2 = turtle.Turtle()
yaz2.speed(0)
yaz2.shape(“square”)
yaz2.color(“white”)
yaz2.penup()
yaz2.hideturtle()
yaz2.goto(0, 260)
yaz2.write(“Puan: {}”.format(puan2), align=”center”, font=(“arial”, 24, “normal”))
#HAREKET
def move():
if kafa1.direction == “up”:
y = kafa1.ycor()
kafa1.sety(y + 20)
if kafa1.direction == “down”:
y = kafa1.ycor()
kafa1.sety(y – 20)
if kafa1.direction == “right”:
x = kafa1.xcor()
kafa1.setx(x + 20)
if kafa1.direction == “left”:
x = kafa1.xcor()
kafa1.setx(x – 20)
def go_up():
if kafa1.direction != “down”:
kafa1.direction = “up”
def go_down():
if kafa1.direction != “up”:
kafa1.direction = “down”
def go_right():
if kafa1.direction != “left”:
kafa1.direction = “right”
def go_left():
if kafa1.direction != “right”:
kafa1.direction = “left”
def move():
if kafa2.direction == “up”:
y = kafa2.ycor()
kafa2.sety(y + 20)
if kafa2.direction == “down”:
y = kafa2.ycor()
kafa2.sety(y – 20)
if kafa2.direction == “right”:
x = kafa2.xcor()
kafa2.setx(x + 20)
if kafa2.direction == “left”:
x = kafa2.xcor()
kafa2.setx(x – 20)
def go_up():
if kafa2.direction != “down”:
kafa2.direction = “up”
def go_down():
if kafa2.direction != “up”:
kafa2.direction = “down”
def go_right():
if kafa2.direction != “left”:
kafa2.direction = “right”
def go_left():
if kafa2.direction != “right”:
kafa2.direction = “left”
#KLAVYE
pencere.listen()
pencere.onkey(go_up, “Up”)
pencere.onkey(go_down, “Down”)
pencere.onkey(go_right, “Right”)
pencere.onkey(go_left, “Left”)
pencere.listen()
pencere.onkey(go_up, “w”)
pencere.onkey(go_down, “s”)
pencere.onkey(go_right, “d”)
pencere.onkey(go_left, “a”)
while True:
pencere.update()
if kafa1.xcor() > 300 or kafa1.xcor() 300 or kafa1.ycor() 300 or kafa2.xcor() 300 or kafa2.ycor() < -300:
time.sleep(1)
kafa2.goto(0, 0)
kafa2.direction = "stop"
for yeni_kuyruk2 in kuyruklar2:
yeni_kuyruk2.goto(1000, 1000)
kuyruklar2 = []
if kafa1.distance(kafa2) < 10:
time.sleep(1)
kafa1.goto(0,0)
kafa1.direction = "stop"
puan1 = 0
delay = 0.1
yaz.clear()
yaz.write("Puan: {}".format(puan1), align="center", font=("Courier", 24, "normal"))
if kafa2.distance(kafa1) < 10:
time.sleep(1)
kafa2.goto(0,0)
kafa2.direction = "stop"
puan2 = 0
delay = 0.1
yaz.clear()
yaz.write("Puan: {}".format(puan2), align="center", font=("Courier", 24, "normal"))
if kafa1.distance(yemek1,yemek2) < 20:
x = random.randint(-250, 250)
y = random.randint(-250, 250)
yemek1,yemek2.goto(x, y)
if kafa2.distance(yemek1,yemek2) 0:
x = kafa1.xcor()
y = kafa1.ycor()
kuyruklar1[0].goto(x, y)
for index in range(len(kuyruklar) – 1, 0, -1):
x = kuyruklar2[index – 1].xcor()
y = kuyruklar2[index – 1].ycor()
kuyruklar2[index].goto(x, y)
if len(kuyruklar2) > 0:
x = kafa2.xcor()
y = kafa2.ycor()
kuyruklar2[0].goto(x, y)
yaz.clear()
yaz.write(‘Puan: {}’.format(puan1), align=’center’, font=(‘Courier’, 24, ‘normal’))
yaz.write(‘Puan: {}’.format(puan2), align=’center’, font=(‘Courier’, 24, ‘normal’))
hiz = 0.15
time.sleep(delay)
malesef kopyala yapıştır yaptığımda girintili atmıyor. Fakat mail adresinize ilettim py. dosyamı. Teşekkür ederim
yapabildin mi acaba ne oldu merak ettim
bu python kaç?
acil cevap verirmisiniz lütfen
among us yaparmısın abiğğ