ساخت بازی با پایتون قسمت پنجم (اخر)

تصویر بازی نهایی
تصویر بازی نهایی

ابتدا قسمت چهار را مطالعه کنید



در قسمت قبل برخورد مار با دیوار و خوردن میوه رو تموم کردیم حالا باید اون قسمت هایی که ایجاد میشن رو بچسبونیم به سر ماره .


زیر اضافه کردن سگمنت ( add segments) مینویسیم حواتون باشه که نباید داخل (if) خوردن باشه .

# move segments
for index in range(len(segments)-1,0,-1):
    x = segments[index-1].xcor()
    y = segments[index-1].ycor()
    segments[index].goto(x,y)

# move 0 segment
if len(segments) > 0:
    x = head.xcor()
    y = head.ycor()
    segments[0].goto(x,y)

در کد بالا در قسمت اول (move segments) کاری کردیک که سنگمنت ها از اخر به اول به ترتیب شوند : 0,1,2,3 بودند . الان شدند 3,2,1,0 .

در قسمت دوم کد (move 0 segment) سگمنت میچسبند به سر مار .



حالا اگر برنامه اجرا کنیم هر غذایی که می خوریم یک قسمت به بدن مار اضافه می شود ولی وقتی به دیوار بر خورد کنیم سگمنت ها ( segments) از بین نمی روند !! .

برای حل این مشکل در ادامه قسمت اگر به دیوار برخورد کند که من در اصطلاح اون رو در (wall happend) نوشتم مینویسیم :

# hide segments
for segment in segments:
    segment.goto(1000,1000)

# clear segments
segments.clear()
score = 0
x = random.randint(-290,290)
y = random.randint(-290,290)
food.goto(x,y)

در قسمت اول کد بالا (hide segments) نوشتیم که سگمنت هارو (segments) ببره به جایی خارج از دید پلیر یعنی (1000,1000) .

در قسمت دوم کد (clear segments) گفتیم که سگمنت های داخل لیست پاک کنه و تمتیاز هم صفر کنه و یک ایکس و وای رندوم بسازه وغذارو ببره به اونجا تا جاش عوض بشه .



تامام !!

حالا اگر برنامه رو اجرا کنیم همه چی درست هستش .



کد نهایی ما :

# 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'

        # hide segments
        for segment in segments:
            segment.goto(1000,1000)

        # clear segments
        segments.clear()
        score = 0
        x = random.randint(-290,290)
        y = random.randint(-290,290)
        food.goto(x,y)

    # 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 segments
    for index in range(len(segments)-1,0,-1):
        x = segments[index-1].xcor()
        y = segments[index-1].ycor()
        segments[index].goto(x,y)

    # move 0 segment
    if len(segments) > 0:
        x = head.xcor()
        y = head.ycor()
        segments[0].goto(x,y)

    move()
    time.sleep(delay)

win.mainloop()

یادتون نره ویرگول قسمت بایندینگ (bindings) خراب میکنه ، پس اون قسمت رو از روی عکس زیر ویرایش کنید :

بایندینگ درست
بایندینگ درست

بعدا اموزش گرفتن خروجی exe هم میزارم تا بتونید تو کامپیوتری که پایتون روش نصب نیست هم اجراش کنید .

اگر عیبی دیدید یا مشکلی داشتید = کامنت

فعلا .

# made by MOSTAFA mkl