برنامه نویس، علاقه مند به تکنولوژی های جدید .
ساخت بازی با پایتون قسمت چهارم
ابتدا قسمت سوم رو مشاهده کنید .
در قسمت قبل تا بایندینگ ها(bindings) اومدیم.
این قسمت میریم سراغ اینکه وقتی به دیوار برخورد کنه بازی از اول بشه و وقتی میوه رو می خوره میوه محو بشه .
برای اینکه وقتی به دیوار برخورد میکنه بازی از اول بشه :
اخر کدمون یه حلقه داشتیم برای رفرش شدن صفحه بعد از ()win.update و قبل از ()move مینویسیم :
if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
time.sleep(1)
print('GameOver')
head.goto(0,0)
head.direction = 'stop'
خط اول داریم میگیم که اگر سر مار 290 به سمت راست یا چپ یا بالا یا پایین رفت بزارش وسط زمین و حرکتشو قطع کن .
حالا چرا 290 ؟؟
چون اگر صفحتونو مثل من 600 در 600 گرفته باشید، 290 پیکسل از هر طرف دقیقا میشه لبه صفحه .
خط دوم هم میگه که یک ثانیه وایسا
خط سوم توی ترمینال بنویس game over
خط چهار، سر بیار وسط زمین .
خط پنج حرکتشو قطع کن .
حالا میریم سراغ اینکه وقتی سر مار به غذا بر خورد کرد غذا محو بشه .
زیر همون برخورد سر به دیوار مینویسیم( حواستون باشه این نباید داخل اون ایف (if) قبلیه باشه ) :
if head.distance(food) < 20:
x = random.randint(-290,290)
y = random.randint(-290,290)
food.goto(x,y)
برای اینکار گفتیم که اگه فاصله سر مار تا غذا کمتر از 20 پیکسل شد :
اول یه ایکس و وای جدید با رندوم ایجاد کن (نوشتم بین (-290,290) تا نره بیرون صفحه .
بعدشم غذا بره به همون ایکس و وای جدید .
شاید بگید چرا وقتی فاصله کمتر از 20 شد ؟؟
چون دور غذا تقریبا یه 20 پیکسلی هست و برای همین اینجوری بنویسیم بهتره .
حالا میریم سراغ اینکه وقتی به غذا خورد (فاصله با غذا کمتر از 20 پیکسل شد ) یک مربع به بدن مار اضافه بشه .
برای اینکار زیر همون اگر فاصله سر تا غذا ...... مینویسیم (به طوری داخل همون (if) باشه ) :
newsegment = turtle.Turtle()
newsegment.speed(0)
newsegment.shape('square')
newsegment.color('black')
newsegment.penup()
segments.append(newsegment)
score = score +1
print(score)
خط اول میگه یک شکل جدید ایجاد کن به اسم نیو سگمنت (newsegment)
خط دو . سرعتش هم که میزاریم روی 0.
خط سه . شکلش هم مربع
خط چهارم . رنگشو مشکی میزاریم تا معلوم باشه .
خط پنج . اضافه می کنیم به لیست سگمنت (segments) که قبلا ایجاد کرده بودیم .
حالا برای اینکه امتیاز هم به بازی اضافه کنیم یک score = 0 زیر delay مینویسیم .
و توی خط 6 یک امتیاز به کاربر اضافه میشه و امتیاز رو توی اینترنال پرینت میکنه .
حالا اگه برنامه رو اجرا کنیم و یک غذا بخوریم یک مربع سیاه وسط صفحه ایجاد میشه .
پس حالا باید کاری کنیم تا مربع ها بچسبه به سر ( توی قسمت 5)
این هم کد ما تا اینجای کار :
# start
import turtle
import time
import random
delay = 0.1
score = 0
# firt setting
win = turtle.Screen()
win.title('Python Game')
win.bgcolor('green')
win.setup(width=600, height=600)
win.tracer(0)
# snake head
head = turtle.Turtle()
head.speed(0)
head.shape('square')
head.color('white')
head.penup()
head.goto(0,0)
head.direction = 'stop'
# food
food = turtle.Turtle()
food.speed(0)
food.shape('circle')
food.color('red')
food.penup()
food.goto(0,100)
# segments
segments = []
# functions
def goup():
head.direction = 'up'
def godown():
head.direction = 'down'
def goright():
head.direction = 'right'
def goleft():
head.direction = 'left'
def move():
if head.direction == 'up':
y = head.ycor()
head.sety(y+20)
if head.direction == 'down':
y = head.ycor()
head.sety(y-20)
if head.direction == 'right':
x = head.xcor()
head.setx(x+20)
if head.direction == 'left':
x = head.xcor()
head.setx(x-20)
# bindings
win.listen()
win.(goup, 'w')
win.(godown, 's')
win.(goright, 'd')
win.(goleft, 'a')
while True:
win.update()
# wall happend
if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
time.sleep(1)
print('GameOver')
head.goto(0,0)
head.direction = 'stop'
# eat happend
if head.distance(food) < 20:
x = random.randint(-290,290)
y = random.randint(-290,290)
food.goto(x,y)
# add segments
newsegment = turtle.Turtle()
newsegment.speed(0)
newsegment.shape('square')
newsegment.color('black')
newsegment.penup()
segments.append(newsegment)
score = score +1
print(score)
move()
time.sleep(delay)
win.mainloop()
طبق چیزی که قسمت قبل گفتم ویرگول بایندینگ (bindigs) خراب میکنه بنا بر این این قسمت رو از روی عکس زیر ویرایش کنید :
اگر عیبی دیدید یا مشکلی داشتید در قسمت کامنت ها بنویسید .
مطلبی دیگر از این انتشارات
کامل کردن بازی پایتون قسمت یک
مطلبی دیگر از این انتشارات
ساخت بازی با پایتون قسمت سوم
مطلبی دیگر از این انتشارات
ساخت بازی با پایتون قسمت دوم