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

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