برنامه نویس، علاقه مند به تکنولوژی های جدید .
ساخت بازی با پایتون قسمت سوم
ابتدا قسمت دوم را مشاهده کنید .
در قسمت قبل سر مار و غذا ( میوه ) ساختیم .
اول کار از اخر کدمون متن زیر پاک میکنیم :
while True:
win.update()
win.mainloop()
حالا میریم سراغ حرکت ها (حرکت مار با فشار دکمه های کیبورد)
مینویسم که اگر فلان کلید فشار داده شد برو فلان تابع اجرا کن .
win.listen()
win.(goup, 'w')
win.(godown, 's')
win.(goright, 'd')
win.(goleft, 'a')
خط اول داره میگه صفحه گوش کن ( البته در اصطلاح )
خط دو : اگر دکمه (w) فشار داده شد تابع (goup) رو اجرا کن .
و الی اخر
حالا باید فانکشن ها شو (تابع هایی که قراره اجرا شن) بنویسیم .
میایم قبل از قسمت بایندینگ (binding) و بعد از سگمنت ( segments ) مینویسیم :
def goup():
head.direction = 'up'
def godown():
head.direction = 'down'
def goright():
head.direction = 'right'
def goleft():
head.direction = 'left'
تابع اول می گوید که اگر گو اپ(goup) صدا زده شود هد دایرکشن (head.direction) برابر اپ(up) می شود .
حالا برای اینکه سر مار (snake head) حرکت کند یک تابع جدید به نام موو ( move ) مینویسیم .
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)
در اینحا می گوید که اگر دایرکشن هد (head.direction) برابر با اپ (up) بود 20 تا به y هد (head) اضافه کن یعنی اگر تابع گو اپ (goup) اجرا شد 20 پیکسل برو بالا .
تا اینجا درست ولی باید یک تایم مشخص کنید تا وقتی مثلا دکمه w زدیم کله مار سریع نره تا نا کجا اباد .
برای اینکار میریم بالا و بعد از ایمپورت(import) ها و قبل از تنظیمات صفحه (win) مینویسیم :
delay = 0.1
و حالا به اخر کد متن زیر (حلقه رفرش شدن صفحه و موو(move) ) اضافه می کنیم
while True:
win.update()
move()
time.sleep(delay)
win.mainloop()
حالا وقتی برنامه را اجرا کنیم و دکمه w را روی کیبورد بزنیم کله مار به سمت بالا حرکت می کند .
اگر s را بزنیم به سمت پایین .
اگر a بزنیم به سمت چپ .
اگر d به سمت راست .
حواستون باشه باید زبان کیبورد اینگیلیسی باشه !!
کد ما تا اینجای کار :
# start
import turtle
import time
import random
delay = 0.1
# 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()
move()
time.sleep(delay)
win.mainloop()
دوستان عزیز نمی دونم چرا ویرگول یه قسمت بایندینگز(bindings) پاک میکنه و منجر به ارور میشه من عکس کد میزارم .
مطلبی دیگر از این انتشارات
کامل کردن بازی پایتون قسمت یک
مطلبی دیگر از این انتشارات
ساخت بازی با پایتون قسمت دوم
مطلبی دیگر از این انتشارات
ساخت بازی با پایتون قسمت پنجم (اخر)