برنامه نویس، علاقه مند به تکنولوژی های جدید .
ساخت بازی با پایتون قسمت پنجم (اخر)
ابتدا قسمت چهار را مطالعه کنید
در قسمت قبل برخورد مار با دیوار و خوردن میوه رو تموم کردیم حالا باید اون قسمت هایی که ایجاد میشن رو بچسبونیم به سر ماره .
زیر اضافه کردن سگمنت ( 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
مطلبی دیگر از این انتشارات
کامل کردن بازی پایتون قسمت یک
مطلبی دیگر از این انتشارات
ساخت بازی با پایتون قسمت دوم
مطلبی دیگر از این انتشارات
ساخت بازی با پایتون قسمت چهارم