ساخت بازی با پایتون قسمت سوم

بازی نهایی
بازی نهایی

ابتدا قسمت دوم را مشاهده کنید .



در قسمت قبل سر مار و غذا ( میوه ) ساختیم .

اول کار از اخر کدمون متن زیر پاک میکنیم :

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) پاک میکنه و منجر به ارور میشه من عکس کد میزارم .


لینک قسمت چهارم