آموزش ساخت بازی مار با پایتون — ساده و رایگان + نمونه کد

۲۸۸۴۱ بازدید
آخرین به‌روزرسانی: ۱۲ مهر ۱۴۰۲
زمان مطالعه: ۱۴ دقیقه
آموزش ساخت بازی مار با پایتون — ساده و رایگان + نمونه کد

پایتون یکی از بهترین زبان‌های برنامه نویسی حال حاضر به حساب می‌آید و محبوبیت زیادی دارد و افراد بسیاری به دنبال یادگیری پایتون هستند. یکی از مهم‌ترین مراحل در مسیر یادگیری برنامه نویسی ، خصوصاً مسیر یادگیری پایتون، انجام پروژه‌های عملی است. یادگیری واقعی با تمرین حاصل می‌شود و مهارت برنامه نویسی را تنها می‌توان با انجام پروژه تقویت کرد. یکی از پروژه‌های رایجی که در آموزش پایتون و به ویژه در حوزه بازی‌سازی و آن هم در حیطه ساخت بازی با پایتون بسیار رایج است و محبوبیت دارد، ساخت بازی مار با پایتون به حساب می‌آید. در این مقاله از مجله فرادرس به آموزش ساخت بازی مار با پایتون پرداخته شده است.

آموزش ساخت بازی مار با پایتون

ساخت بازی مار در این مقاله از ۸ گام مختلف تشکیل شده است. Pygame کتابخانه‌ای محبوب و قدرتمند برای ساخت بازی با پایتون به حساب می‌آید.

در این مطلب هم از Pygame برای ساخت بازی مار با پایتون استفاده شده است. اولین کاری که باید برای ساخت بازی در پایتون با Pygame انجام شود، نصب این کتابخانه روی سیستم است.

۱. نصب Pygame

باید به این نکته توجه داشت که پیش از هر چیز باید نصب پایتون در ویندوز، مک یا لینوکس انجام شود. نصب PIP پایتون نیز در صورت نصب نبودن آن، پیش از نصب Pygame‌ ضروری است. برای انجام این کار می‌توان به سادگی از دستور زیر در خط فرمان استفاده کرد:

1pip install pygame

پس از نصب مجموعه ماژول‌های Pygame با استفاده از PIP، فقط باید آن را ایمپورت کرد و به این ترتیب کار توسعه و ساخت بازی مار با پایتون شروع می‌شود. پیش از ادامه آموزش ساخت بازی مار با پایتون ، بهتر است به بررسی اجمالی آن دسته از توابع Pygame پرداخته شود که در این مقاله از آن‌ها استفاده شده است. این توابع Pygame به همراه شرح هر کدام در جدول زیر فهرست شده‌اند:

تابعشرح تابع
init()‎راه‌اندازی اولیه تمام ماژول‌های ایمپورت شده پای‌گیم را انجام می‌دهد (تاپلی را بازمی‌گرداند که مشخص کننده موفقیت یا عدم موفقیت راه‌اندازی اولیه هر یکی از ماژول‌ها است).
display.set_mode()‎برای ایجاد سطح (Surface)، یک تاپل یا لیست (با ترجیح تاپل) را به عنوان پارامتر خود دریافت می‌کند.
update()‎صفحه را به‌روزرسانی می‌کند.
quit()‎برای قطع راه‌اندازی همه چیز استفاده می‌شود.
set_caption()‎متن عنوان در بالای صفحه نمایش را تنظیم می‌کند.
event.get()‎لیستی از تمام رویدادها (Eventها) را بازمی‌گرداند.
Surface.fill()‎سطح را با رنگی یکنواخت پُر می‌کند.
time.Clock()‎به ردیابی زمان کمک می‌کند.
font.SysFont()‎یک فونت Pygame را با استفاده از منابع فونت سیستم ایجاد خواهد کرد.

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

یک برنامه نویس نشسته پشت سیستم کامپیوتری در حال کدنویسی

۲. ایجاد صفحه برای ساخت بازی مار با پایتون

برای ایجاد صفحه با استفاده از Pygame، باید از تابع display.set_mode()‎ استفاده کرد. همچنین، لازم است متُدهای init()‎ و quit()‎ نیز برای راه‌اندازی اولیه و قطع اجرای (Uninitialize) همه چیز در آغاز و پایان کدها به کار گرفته شوند. متُد update()‎ برای به‌روزرسانی هر گونه تغییرات انجام شده در صفحه مورد استفاده قرار می‌گیرد.

یک متُد دیگر، یعنی flip()‎، هم وجود دارد که مشابه تابع update()‎ عمل می‌کند. تفاوتش این است که متُد update()‎ تنها تغییرات انجام شده را به‌روزرسانی می‌کند. البته، اگر هیچ پارامتری ارجاع داده نشده باشد، این متُد تمام صفحه را به‌روزرسانی خواهد کرد. اما، متُد flip()‎ همیشه کل صفحه را دوباره بارگذاری می کند.

1import pygame
2pygame.init()
3dis=pygame.display.set_mode((400,300))
4pygame.display.update()
5pygame.quit()
6quit()

خروجی کدهای فوق، صفحه‌ای خالی برای ساخت بازی مار با پایتون به صورت زیر است:

ایجاد صفحه برای ساخت بازی مار با پایتون

با اجرای کدهای بالا، صفحه بازی ظاهر خواهد شد اما این صفحه بلافاصله بسته می‌شود. برای رفع این مشکل، باید از یک حلقه بازی با While قبل از خروج از بازی استفاده کرد. این کار در کدهای زیر انجام شده است:

1import pygame
2pygame.init()
3dis=pygame.display.set_mode((400,300))
4pygame.display.update()
5pygame.display.set_caption('Snake Game by Faradars')
6game_over=False
7while not game_over:
8    for event in pygame.event.get():
9        print(event)   #prints out all the actions that take place on the screen
10 
11pygame.quit()
12quit()

با اجرای کدهای بالا، ملاحظه خواهد شد که صفحه ایجاد شده این بار بسته نمی‌شود و همچنین، تمام رخدادهایی (Event) را که روی آن اتفاق می‌افتند هم بازگردانده می‌شوند. این کار با استفاده از تابع event.get()‎ انجام شده است. همچنین در کدهای فوق با استفاده از تابع display.set_caption()‎، نام «Snake Game by Faradars» برای صفحه بازی انتخاب شده است. خروجی به صورت زیر خواهد بود:

حالا صفحه‌ای برای بازی مار با پایتون ساخته شده است، اما وقتی قصد بستن صفحه با کلیک کردن دکمه ضربدر وجود داشته باشد، صفحه بسته نمی‌شود. این اتفاق به این دلیل رخ می‌دهد که کدهای لازم برای بستن صفحه هنگام کلیک خوردن دکمه ضربدر هنوز نوشته نشده‌اند. برای انجام این کار، رویدادی (Event) به نام «QUIT» در Pygame ارائه شده است که به صورت زیر باید از آن استفاده کرد:

1import pygame
2pygame.init()
3dis=pygame.display.set_mode((400,300))
4pygame.display.update()
5pygame.display.set_caption('Snake game by Faradars')
6game_over=False
7while not game_over:
8    for event in pygame.event.get():
9        if event.type==pygame.QUIT:
10            game_over=True
11 
12pygame.quit()
13quit()

به این ترتیب صفحه بازی آماده است. در گام بعدی ساخت بازی مار با پایتون باید رسم مار روی صفحه را انجام داد که در بخش بعدی این مقاله آموزشی به آن پرداخته می‌شود.

۳. ایجاد مار در ساخت بازی مار با پایتون

برای ساخت مار ، ابتدا باید چند متغیر مربوط به رنگ را ایجاد و راه‌اندازی اولیه کرد؛ این متغیرها برای رنگ‌آمیزی مار، غذا، صفحه و سایر المان‌ها در بازی مورد استفاده قرار خواهند گرفت. قالب رنگی استفاده شده در Pygame قالب RGB یعنی «قرمز،سبز، آبی» است.

یک دستگاه نینتندو که یک مار از آن بیرون آمده است

در صورتی که تمام این رنگ‌ها صفر باشند، رنگ سیاه به دست خواهد آمد و اگر هر سه شاخص رنگ‌های قرمز، سبز و آبی مقدارشان ۲۵۵ باشد، رنگ سفید حاصل خواهد شد. مار ما در این آموزش ساخت بازی مار با پایتون به صورت مستطیلی خواهد بود. برای رسم مستطیل در Pygame، می‌توان از تابعی به نام draw.rect()‎ استفاده کرد. این تابع برای رسم مستطیل با رنگ و اندازه دلخواه به کار گرفته شده است.

1import pygame
2pygame.init()
3dis=pygame.display.set_mode((400,300))
4 
5pygame.display.set_caption('Snake game by Faradars')
6 
7blue=(0,0,255)
8red=(255,0,0)
9 
10game_over=False
11while not game_over:
12    for event in pygame.event.get():
13        if event.type==pygame.QUIT:
14            game_over=True
15    pygame.draw.rect(dis,blue,[200,150,10,10])
16    pygame.display.update()
17pygame.quit()
18quit()

خروجی کدهای فوق به صورت زیر است:

ایجاد مار در ساخت بازی مار با پایتون

همان‌طور که در تصویر خروجی فوق ملاحظه می‌شود، سر مار به صورت یک مربع آبی رنگ ساخته شده است. در گام بعدی باید مار را به حرکت در آورد.

۴. حرکت دادن مار در ساخت بازی مار با پایتون

برای حرکت دادن مار، لازم است از رویدادهای کلید موجود در کلاس KEYDOWN ماژول‌های Pygame استفاده کرد. رویدادهایی که در اینجا از آن‌ها استفاده شده است، شامل موارد زیر می‌شوند:

  • K_UP
  • K_DOWN
  • K_LEFT
  • K_LEFT

رویدادهای فوق به ترتیب برای حرکت دادن مار در بازی به جهت‌های بالا، پایین، چپ و راست مورد استفاده قرار می‌گیرند. همچنین، صفحه نمایش در بازی با استفاده از متُد fill()‎ از رنگ پیش‌فرض یعنی مشکی به سفید تغییر رنگ داده شده است. متغیرهای جدیدی با نام‌های x1_change و y1_change نیز برای ذخیره مقادیر به‌روزرسانی شده مختصات x و y ایجاد شده‌اند:

1import pygame
2 
3pygame.init()
4 
5white = (255, 255, 255)
6black = (0, 0, 0)
7red = (255, 0, 0)
8 
9dis = pygame.display.set_mode((800, 600))
10pygame.display.set_caption('Snake Game by Faradars')
11 
12game_over = False
13 
14x1 = 300
15y1 = 300
16 
17x1_change = 0       
18y1_change = 0
19 
20clock = pygame.time.Clock()
21 
22while not game_over:
23    for event in pygame.event.get():
24        if event.type == pygame.QUIT:
25            game_over = True
26        if event.type == pygame.KEYDOWN:
27            if event.key == pygame.K_LEFT:
28                x1_change = -10
29                y1_change = 0
30            elif event.key == pygame.K_RIGHT:
31                x1_change = 10
32                y1_change = 0
33            elif event.key == pygame.K_UP:
34                y1_change = -10
35                x1_change = 0
36            elif event.key == pygame.K_DOWN:
37                y1_change = 10
38                x1_change = 0
39 
40    x1 += x1_change
41    y1 += y1_change
42    dis.fill(white)
43    pygame.draw.rect(dis, black, [x1, y1, 10, 10])
44 
45    pygame.display.update()
46 
47    clock.tick(30)
48 
49pygame.quit()
50quit()

خروجی کدهای فوق به صورت زیر است:

حرکت دادن مار در ساخت بازی مار با پایتون

در ادامه این مقاله به پیاده‌سازی وضعیت «Game Over» یا اتمام بازی (بازنده شدن) در ساخت بازی مار با پایتون پرداخته شده است. اما پیش از آن، دوره‌های آموزش پایتون فرادرس به علاقه‌مندان معرفی شده‌اند تا آشنایی لازم با منابع تمرینی بیش‌تر برای ادامه یادگیری و تقویت مهارت به دست آید.

فیلم های آموزش پایتون فرادرس

فیلم های آموزش برنامه نویسی پایتون فرادرس

ساخت بازی مار با پایتون تنها یکی از پروژه‌های اولیه‌ای است که برای تمرین برنامه نویسی پایتون انجام می‌شود. این پروژه تنها مخصوص علاقه‌مندان به بازی‌سازی نیست و همه افرادی که مشغول یادگیری برنامه نویسی پایتون هستند می‌توانند از این پروژه برای تقویت مهارت خود استفاده کنند. در پلتفرم فرادرس دوره‌های آموزش پایتون در قالب یک مجموعه گردآوری شده‌اند که علاقه‌مندان به برنامه نویسی پایتون می‌توانند برای شروع یادگیری از دوره‌های مقدماتی آن استفاده کنند. همچنین، چندین دوره آموزشی پروژه‌محور نیز در این مجموعه برای ادامه یادگیری و تقویت مهارت برنامه نویسی پایتون در دسترس قرار دارند. در تصویر فوق تنها برخی از دوره‌های آموزشی مجموعه آموزش پایتون فرادرس ملاحظه می‌شوند.

۵. کدنویسی حالت اتمام بازی در صورت برخورد مار با دیواره ها

در بازی مار، اگر بازیکن به دیواره‌های صفحه برخورد کند، بازنده خواهد شد. جهت پیاده‌سازی این حالت با پایتون در این مقاله آموزشی از یک گزاره if استفاده شده است. در این if بررسی می‌شود که محدوده‌های مختصات x و y برای مار از مختصات صفحه بازی کوچک‌تر باشند.

همچنین، باید این مورد را هم مد نظر قرار داد که کدهای منبع (Hardcodeها) در اینجا حذف شده‌اند و به جای آن‌ها از چند متغیر استفاده شده است تا در صورت نیاز به ایجاد تغییراتی در بازی، بتوان این تغییرات را به آسانی در کدها انجام داد.

1import pygame
2import time
3pygame.init()
4 
5white = (255, 255, 255)
6black = (0, 0, 0)
7red = (255, 0, 0)
8 
9dis_width = 800
10dis_height  = 600
11dis = pygame.display.set_mode((dis_width, dis_width))
12pygame.display.set_caption('Snake Game by Faradars')
13 
14game_over = False
15 
16x1 = dis_width/2
17y1 = dis_height/2
18 
19snake_block=10
20 
21x1_change = 0
22y1_change = 0
23 
24clock = pygame.time.Clock()
25snake_speed=30
26 
27font_style = pygame.font.SysFont(None, 50)
28 
29def message(msg,color):
30    mesg = font_style.render(msg, True, color)
31    dis.blit(mesg, [dis_width/2, dis_height/2])
32 
33while not game_over:
34    for event in pygame.event.get():
35        if event.type == pygame.QUIT:
36            game_over = True
37        if event.type == pygame.KEYDOWN:
38            if event.key == pygame.K_LEFT:
39                x1_change = -snake_block
40                y1_change = 0
41            elif event.key == pygame.K_RIGHT:
42                x1_change = snake_block
43                y1_change = 0
44            elif event.key == pygame.K_UP:
45                y1_change = -snake_block
46                x1_change = 0
47            elif event.key == pygame.K_DOWN:
48                y1_change = snake_block
49                x1_change = 0
50 
51    if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
52        game_over = True
53 
54    x1 += x1_change
55    y1 += y1_change
56    dis.fill(white)
57    pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block])
58 
59    pygame.display.update()
60 
61    clock.tick(snake_speed)
62 
63message("You lost",red)
64pygame.display.update()
65time.sleep(2)
66 
67pygame.quit()
68quit()

در صورت برخورد مار به دیواره‌های صفحه، بازی تمام می‌شود و خروجی به صورت زیر خواهد بود:

کدنویسی حالت اتمام بازی در صورت برخورد مار با دیواره ها

حالا باید عملکرد مربوط به رشد مار و پیشرفت بازی (سخت‌تر شدن بازی) را توسعه داد. در بازی مار کلاسیک، با هدایت مار به سمت غذا و خوردن آن، طول مار افزایش می‌یابد. در بخش‌های بعدی آموزش ساخت بازی مار با پایتون به کدنویسی کارکردهای مربوط به غذا و رشد مار پرداخته شده است.

نمای نزدیک یک لپ تاپ با تم زرد و آبی

۶. قرار دادن غذا برای رشد مار در ساخت بازی مار با پایتون

در این بخش از آموزش ساخت بازی مار با پایتون ، غذا برای مار در صفحه بازی اضافه می‌شود و وقتی که مار غذا را می‌خورد، پیامی با عنوان «Yummy!!‎» (یعنی به‌به!!) در ترمینال نمایش داده خواهد شد. علاوه بر این، تغییر کوچک دیگری هم اعمال شده است که در آن گزینه‌هایی برای خروج از بازی یا شروع مجدد بازی در زمان بازنده شدن بازیکن لحاظ شده‌اند:

1import pygame
2import time
3import random
4 
5pygame.init()
6 
7white = (255, 255, 255)
8black = (0, 0, 0)
9red = (255, 0, 0)
10blue = (0, 0, 255)
11 
12dis_width = 800
13dis_height = 600
14 
15dis = pygame.display.set_mode((dis_width, dis_height))
16pygame.display.set_caption('Snake Game by Faradars')
17 
18clock = pygame.time.Clock()
19 
20snake_block = 10
21snake_speed = 30
22 
23font_style = pygame.font.SysFont(None, 30)
24 
25 
26def message(msg, color):
27    mesg = font_style.render(msg, True, color)
28    dis.blit(mesg, [dis_width/3, dis_height/3])
29 
30 
31def gameLoop():  # creating a function
32    game_over = False
33    game_close = False
34 
35    x1 = dis_width / 2
36    y1 = dis_height / 2
37 
38    x1_change = 0
39    y1_change = 0
40 
41    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
42    foody = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
43 
44    while not game_over:
45 
46        while game_close == True:
47            dis.fill(white)
48            message("You Lost! Press Q-Quit or C-Play Again", red)
49            pygame.display.update()
50 
51            for event in pygame.event.get():
52                if event.type == pygame.KEYDOWN:
53                    if event.key == pygame.K_q:
54                        game_over = True
55                        game_close = False
56                    if event.key == pygame.K_c:
57                        gameLoop()
58 
59        for event in pygame.event.get():
60            if event.type == pygame.QUIT:
61                game_over = True
62            if event.type == pygame.KEYDOWN:
63                if event.key == pygame.K_LEFT:
64                    x1_change = -snake_block
65                    y1_change = 0
66                elif event.key == pygame.K_RIGHT:
67                    x1_change = snake_block
68                    y1_change = 0
69                elif event.key == pygame.K_UP:
70                    y1_change = -snake_block
71                    x1_change = 0
72                elif event.key == pygame.K_DOWN:
73                    y1_change = snake_block
74                    x1_change = 0
75 
76        if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
77            game_close = True
78 
79        x1 += x1_change
80        y1 += y1_change
81        dis.fill(white)
82        pygame.draw.rect(dis, blue, [foodx, foody, snake_block, snake_block])
83        pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block])
84        pygame.display.update()
85 
86        if x1 == foodx and y1 == foody:
87            print("Yummy!!")
88        clock.tick(snake_speed)
89 
90    pygame.quit()
91    quit()
92 
93 
94gameLoop()

تصویر خروجی به صورت زیر است:

اضافه کردن غذا برای رشد مار در ساخت بازی مار با پایتون

همچنین در هنگام بازی و با خوردن غذا به وسیله مار، خروجی ترمینال چیزی شبیه به تصویر زیر خواهد بود:

اضافه کردن غذا برای رشد مار در ساخت بازی مار با پایتون

حال پس از اضافه کردن المان غذا در ساخت بازی مار با پایتون ، نوبت به پیاده‌سازی قابلیت افزایش طول مار با خوردن غذا فرا رسیده است. کدهای مربوط به این کارکرد در بخش بعدی ارائه شده‌اند.

۷. افزایش طول مار در ساخت بازی مار با پایتون

کدهایی که در ادامه این بخش از آموزش ساخت بازی مار با پایتون آمده‌اند، برای افزایش اندازه مار در زمانی هستند که مار غذا می‌خورد. علاوه بر این، اگر مار با بدن خودش برخورد کند، بازی تمام می‌شود و کاربر پیامی حاوی متن زیر را دریافت خواهد کرد:

  • You Lost! Press Q-Quit or C-Play Again (یعنی: شما باختید، برای خروج کلید Q و برای شروع دوباره، کلید C را بزنید)

طول مار اساساً در داخل یک لیست پایتون قرار گرفته و اندازه اولیه‌ای که در کدهای زیر تعیین شده، یک بلوک است:

1import pygame
2import time
3import random
4 
5pygame.init()
6 
7white = (255, 255, 255)
8yellow = (255, 255, 102)
9black = (0, 0, 0)
10red = (213, 50, 80)
11green = (0, 255, 0)
12blue = (50, 153, 213)
13 
14dis_width = 600
15dis_height = 400
16 
17dis = pygame.display.set_mode((dis_width, dis_height))
18pygame.display.set_caption('Snake Game by Faradars')
19 
20clock = pygame.time.Clock()
21 
22snake_block = 10
23snake_speed = 15
24 
25font_style = pygame.font.SysFont("bahnschrift", 25)
26score_font = pygame.font.SysFont("comicsansms", 35)
27 
28def our_snake(snake_block, snake_list):
29    for x in snake_list:
30        pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])
31 
32 
33def message(msg, color):
34    mesg = font_style.render(msg, True, color)
35    dis.blit(mesg, [dis_width / 6, dis_height / 3])
36 
37 
38def gameLoop():
39    game_over = False
40    game_close = False
41 
42    x1 = dis_width / 2
43    y1 = dis_height / 2
44 
45    x1_change = 0
46    y1_change = 0
47 
48    snake_List = []
49    Length_of_snake = 1
50 
51    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
52    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
53 
54    while not game_over:
55 
56        while game_close == True:
57            dis.fill(blue)
58            message("You Lost! Press C-Play Again or Q-Quit", red)
59 
60            pygame.display.update()
61 
62            for event in pygame.event.get():
63                if event.type == pygame.KEYDOWN:
64                    if event.key == pygame.K_q:
65                        game_over = True
66                        game_close = False
67                    if event.key == pygame.K_c:
68                        gameLoop()
69 
70        for event in pygame.event.get():
71            if event.type == pygame.QUIT:
72                game_over = True
73            if event.type == pygame.KEYDOWN:
74                if event.key == pygame.K_LEFT:
75                    x1_change = -snake_block
76                    y1_change = 0
77                elif event.key == pygame.K_RIGHT:
78                    x1_change = snake_block
79                    y1_change = 0
80                elif event.key == pygame.K_UP:
81                    y1_change = -snake_block
82                    x1_change = 0
83                elif event.key == pygame.K_DOWN:
84                    y1_change = snake_block
85                    x1_change = 0
86 
87        if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
88            game_close = True
89        x1 += x1_change
90        y1 += y1_change
91        dis.fill(blue)
92        pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
93        snake_Head = []
94        snake_Head.append(x1)
95        snake_Head.append(y1)
96        snake_List.append(snake_Head)
97        if len(snake_List) > Length_of_snake:
98            del snake_List[0]
99 
100        for x in snake_List[:-1]:
101            if x == snake_Head:
102                game_close = True
103 
104        our_snake(snake_block, snake_List)
105 
106 
107        pygame.display.update()
108 
109        if x1 == foodx and y1 == foody:
110            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
111            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
112            Length_of_snake += 1
113 
114        clock.tick(snake_speed)
115 
116    pygame.quit()
117    quit()
118 
119gameLoop()

برای درک بهتر خروجی آنچه در کدهای فوق انجام شده در ادامه به صورت تصویر متحرک نشان داده شده است:

افزایش طول مار در ساخت بازی مار با پایتون

در ادامه به گام هشتم و آخرین گام ساخت بازی مار با پایتون یعنی پیاده‌سازی عملکرد نمایش امتیاز بازیکن روی صفحه بازی پرداخته شده است.

تصویر یک مار در صفحه یک موبایل و یک مار در اطراف موبایل

۸. نمایش امتیاز بازیکن در ساخت بازی مار با پایتون

آخرین اما نه کم اهمیت‌ترین گام در ساخت بازی مار با پایتون ، نمایش امتیاز بازیکن در صفحه است. برای انجام این کار، باید یک تابع جدید مثلاً با نام «Your_score» ایجاد شود. این تابع طول مار منهای یک را نمایش خواهد داد؛ علت اینکه به مقدار یک از طول مار کم می‌شود این است که طول اولیه مار در هنگام شروع بازی یک است.

1import pygame
2import time
3import random
4 
5pygame.init()
6 
7white = (255, 255, 255)
8yellow = (255, 255, 102)
9black = (0, 0, 0)
10red = (213, 50, 80)
11green = (0, 255, 0)
12blue = (50, 153, 213)
13 
14dis_width = 600
15dis_height = 400
16 
17dis = pygame.display.set_mode((dis_width, dis_height))
18pygame.display.set_caption('Snake Game by Faradars')
19 
20clock = pygame.time.Clock()
21 
22snake_block = 10
23snake_speed = 15
24 
25font_style = pygame.font.SysFont("bahnschrift", 25)
26score_font = pygame.font.SysFont("comicsansms", 35)
27 
28 
29def Your_score(score):
30    value = score_font.render("Your Score: " + str(score), True, yellow)
31    dis.blit(value, [0, 0])
32 
33 
34 
35def our_snake(snake_block, snake_list):
36    for x in snake_list:
37        pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])
38 
39 
40def message(msg, color):
41    mesg = font_style.render(msg, True, color)
42    dis.blit(mesg, [dis_width / 6, dis_height / 3])
43 
44 
45def gameLoop():
46    game_over = False
47    game_close = False
48 
49    x1 = dis_width / 2
50    y1 = dis_height / 2
51 
52    x1_change = 0
53    y1_change = 0
54 
55    snake_List = []
56    Length_of_snake = 1
57 
58    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
59    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
60 
61    while not game_over:
62 
63        while game_close == True:
64            dis.fill(blue)
65            message("You Lost! Press C-Play Again or Q-Quit", red)
66            Your_score(Length_of_snake - 1)
67            pygame.display.update()
68 
69            for event in pygame.event.get():
70                if event.type == pygame.KEYDOWN:
71                    if event.key == pygame.K_q:
72                        game_over = True
73                        game_close = False
74                    if event.key == pygame.K_c:
75                        gameLoop()
76 
77        for event in pygame.event.get():
78            if event.type == pygame.QUIT:
79                game_over = True
80            if event.type == pygame.KEYDOWN:
81                if event.key == pygame.K_LEFT:
82                    x1_change = -snake_block
83                    y1_change = 0
84                elif event.key == pygame.K_RIGHT:
85                    x1_change = snake_block
86                    y1_change = 0
87                elif event.key == pygame.K_UP:
88                    y1_change = -snake_block
89                    x1_change = 0
90                elif event.key == pygame.K_DOWN:
91                    y1_change = snake_block
92                    x1_change = 0
93 
94        if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
95            game_close = True
96        x1 += x1_change
97        y1 += y1_change
98        dis.fill(blue)
99        pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
100        snake_Head = []
101        snake_Head.append(x1)
102        snake_Head.append(y1)
103        snake_List.append(snake_Head)
104        if len(snake_List) > Length_of_snake:
105            del snake_List[0]
106 
107        for x in snake_List[:-1]:
108            if x == snake_Head:
109                game_close = True
110 
111        our_snake(snake_block, snake_List)
112        Your_score(Length_of_snake - 1)
113 
114        pygame.display.update()
115 
116        if x1 == foodx and y1 == foody:
117            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
118            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
119            Length_of_snake += 1
120 
121        clock.tick(snake_speed)
122 
123    pygame.quit()
124    quit()
125 
126gameLoop()

تصویر خروجی پیاده‌سازی عملکرد نمایش امتیاز بازیکن روی صفحه در ادامه آمده است:

نمایش امتیاز بازیکن در ساخت بازی مار با پایتون

به این ترتیب به انتهای آموزش ساخت بازی مار با پایتون رسیده‌ایم. امید است این مقاله آموزشی واضح و قابل فهم بوده باشد. در انتها به برخی از سوالات رایج پیرامون ساخت بازی مار در پایتون پاسخ داده شده است.

سوالات رایج ساخت بازی مار با پایتون

در این بخش با هدف راهنمایی افرادی که به دنبال یادگیری نحوه ساخت بازی مار با پایتون هستند، به ارائه پاسخ به برخی از سوالات رایج پیرامون این موضوع پرداخته شده است.

ساخت بازی مار با پایتون چگونه انجام می‌شود؟

به‌طور کلی مراحل ساخت یک بازی مار ساده با پایتون را می‌توان به ۸ گام مختلف دسته‌بندی کرد. ابتدا باید مجموعه ماژول‌های مخصوص بازی برای پایتون یعنی Pygame را نصب کرد. سپس صفحه بازی ایجاد می‌شود و بعد هم باید مار را ساخت. در ادامه نیز حرکت دادن مار پیاده‌سازی می شود. پس از آن هم لازم است کدهای مربوط به اتمام بازی در صورت برخورد مار با دیواره صفحه نوشته شوند. سپس غذا برای پیشرفت بازی و بزرگ‌تر شدن مار اضافه می‌شود. در انتها هم باید ساز و کار افزودن طول مار با خوردن غذا و در نهایت، کدنویسی نمایش امتیاز را انجام داد.

آیا من هم می‌توانم ساخت بازی مار با پایتون را انجام دهم؟

بازی مار یکی از محبوب‌ترین بازی‌های Arcade در تمام دوران به حساب می‌آید. ساخت بازی مار با پایتون به عنوان یک چالش در حین یادگیری برنامه نویسی پایتون و آموزش ساخت بازی در پایتون با Pygame انجام می‌شود. تلاش برای پیاده‌سازی این پروژه تمرینی می‌تواند تا حد زیادی به یادگیری پایتون و تقویت مهارت برنامه نویسی با این زبان کمک کند و افراد می‌توانند از منابع آموزشی مرتبط برای یادگیری نحوه ساخت بازی مار با پایتون کمک بگیرند.

نصب Pygame‌ پایتون در ویندوز به چه صورت است؟

نصب Pygame‌ در پایتون را می‌توان به چهار گام تقسیم کرد. در مرحله اول بررسی می‌شود که خود پایتون حتماً روی سیستم نصب شده باشد. سپس باید بررسی کرد که PIP هم نصب باشد. در مرحله سوم نوبت به نصب Pygame فرا می‌رسد. در آخر هم باید بررسی کرد که آیا Pygame به درستی کار می‌کند یا خیر؟

ماژول Pygame‌ در پایتون چیست؟

کتابخانه Pygame مجموعه‌ای از ماژول‌های پایتون به حساب می‌آید که برای ساخت بازی‌های کامپیوتری مورد استفاده قرار می‌گیرد. Pygame قابلیت‌های عملکردی افزوده‌ای را برای ساخت بازی با پایتون به کتابخانه بی‌نظیر SDL اضافه می‌کند. Pygame برای برنامه نویسان این امکان را فراهم می‌سازد تا بتوانند بازی‌هایی را با قابلیت‌های جامع بسازند. Pygame‌ به میزان زیادی جابجاپذیر است و می‌توان آن را تقریباً روی هر پلتفرم و سیستم عاملی اجرا کرد.

جمع‌بندی

در یادگیری پایتون باید اطمینان حاصل کرد که تا جای امکان تمرین‌ها و پروژه‌های عملی انجام شوند تا بتوان تجربه لازم را کسب کرد و مهارت برنامه نویسی پایتون را در سطح یک فرد حرفه‌ای و متخصص به دست آورد. به همین دلیل در این مقاله از مجله فرادرس آموزش ساخت بازی مار با پایتون ارائه شده است. استفاده از این مقاله خصوصاً برای افرادی مناسب است که قصد فعالیت در زمینه ساخت بازی با پایتون را دارند. در صورتی که سوالی پیرامون این مقاله وجود دارد، مخاطبان می‌توانند آن را از طریق بخش نظرها درمیان بگذارند. در آینده مقاله‌های آموزشی پروژه‌محور بیش‌تری برای پایتون و سایر زبان‌های برنامه نویسی در مجله فرادرس ارائه خواهند شد.

بر اساس رای ۳۸ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
EdurekaGeeksforGeeks
۱۸ دیدگاه برای «آموزش ساخت بازی مار با پایتون — ساده و رایگان + نمونه کد»

سلام وقتی کد پایانی رو ران میکنیم اصلا خرکت نمیکنه



با سلام و احترام؛

کد پایانی، تست شده و بدون مشکل اجرا می‌شود.

ممنون از همراهی شما با مجله فرادرس

سلام
وقتی pygame.init() رو میزنم ارور میده میگه
module ‘pygame’ has no attribute ‘init’
باید چیکار کنم؟

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

واسه منم همین بود کدو کپی کردم درست شد اصلا وقتی کدو خودم نوشتم حدود ۴۰ تا ارور داد و لی وقتی کپی کردم کاملا درست بود

اولش حرکت نمی کنه خودت باید حرکتش بدی

این بازی عالی است.

سلام
ببخشید pygame رو نصب نمیکنه
یعنی وقتی می‌خوام import رو بزنم ارور میده
قبلش از دستور pip install pygame استفاده کردم

سلام.می تونین از یک روش برید:اگر اپ command prompt را دارید برید داخلش pip install pygame را بنویسید و enter را بزنید.اگر بعد چند ثانیه کلمه ی successfully installed pygame یعنی دانلود شده

سلام چطور از چند تا کد خروجی بگیرم ؟

سلام چطور از چند تا کد به صورت زنده خروجی بگیرم ؟

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

باید روی Run بزنی بعد هم 3 تا گزینه داره گزینه سومی رو انتخاب کن

import pygame,sys
import pygame.locals as GAME_GLOBALS
import pygame.event as GAME_EVENTS
pygame.init()

window=pygame.display.set_mode((500,600))
pygame.display.set_caption(‘game1’)

x=0
y=0
speedx=2
speedy=10

a=10
b=0

wX=10
wY=10

flg=0

wA=10
wB=10

while True:
window.fill((50,205,50))
pygame.draw.rect(window,(138,43,255),(x,y,wX,wY))
pygame.draw.rect(window,(255,0,0),(a,b,10,10))

x+=speedx

if x > 499 – wX:
y+=0
speedx = -10

if x (1000 – 500):
y = 0

if b > (1000- 500):
b = 0

if x + 10 < a :
wX+=1
print(wX)
print(x)
b+=speedy
flg=1

print(y)

#y+=speedy
#print(x)
#print(y)
for event in GAME_EVENTS.get():
if event.type==GAME_GLOBALS.QUIT:
pygame.quit()
sys.exit()

pygame.display.update()

سلام خسته نباشید ببخشید من همه کد هارو نوشتم ولی وقتی میزنم ک بازی بیاد صفحه باز میشه ولی متحرک نیستن میدونید مشکلش چیه؟

سلام من کدی به اسم foody ندارم چیکار کنم؟وقتی میزنم میگه همچین کدی نیست

import pygame
ببخشید موقع اجرا ب این خط گیرمیده
متنشم اینه :
No module named ‘pygame’


با سلام و احترام؛

صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاس‌گزاریم.

برای رفع این باگ لازم است به پوشه python و سپس scripts وارد شوید و در این مسیر یک صفحه خط فرمان باز و در آن دستور زیر را وارد کنید:
C:\python34\scripts> python -m pip install pygame
حالا برای تست اینکه مشکل حل شده است یا خیر، در کد ادیتور یا IDE کدهای زیر را اجرا کنید:
import pygame
print (pygame.ver)
امیدواریم با این راهکار مشکل برطرف شود.

برای شما آرزوی سلامتی و موفقیت داریم.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *