آموزش ساخت بازی مار با پایتون – ساده و رایگان + نمونه کد
پایتون یکی از بهترین زبانهای برنامه نویسی حال حاضر به حساب میآید و محبوبیت زیادی دارد و افراد بسیاری به دنبال یادگیری پایتون هستند. یکی از مهمترین مراحل در مسیر یادگیری برنامه نویسی ، خصوصاً مسیر یادگیری پایتون، انجام پروژههای عملی است. یادگیری واقعی با تمرین حاصل میشود و مهارت برنامه نویسی را تنها میتوان با انجام پروژه تقویت کرد. یکی از پروژههای رایجی که در آموزش پایتون و به ویژه در حوزه بازیسازی و آن هم در حیطه ساخت بازی با پایتون بسیار رایج است و محبوبیت دارد، ساخت بازی مار با پایتون به حساب میآید. در این مقاله از مجله فرادرس به آموزش ساخت بازی مار با پایتون پرداخته شده است.
آموزش ساخت بازی مار با پایتون
ساخت بازی مار در این مقاله از ۸ گام مختلف تشکیل شده است. 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 به میزان زیادی جابجاپذیر است و میتوان آن را تقریباً روی هر پلتفرم و سیستم عاملی اجرا کرد.
جمعبندی
در یادگیری پایتون باید اطمینان حاصل کرد که تا جای امکان تمرینها و پروژههای عملی انجام شوند تا بتوان تجربه لازم را کسب کرد و مهارت برنامه نویسی پایتون را در سطح یک فرد حرفهای و متخصص به دست آورد. به همین دلیل در این مقاله از مجله فرادرس آموزش ساخت بازی مار با پایتون ارائه شده است. استفاده از این مقاله خصوصاً برای افرادی مناسب است که قصد فعالیت در زمینه ساخت بازی با پایتون را دارند. در صورتی که سوالی پیرامون این مقاله وجود دارد، مخاطبان میتوانند آن را از طریق بخش نظرها درمیان بگذارند. در آینده مقالههای آموزشی پروژهمحور بیشتری برای پایتون و سایر زبانهای برنامه نویسی در مجله فرادرس ارائه خواهند شد.
سلام خیلی ممنون . کار میکنه و برای کسانی که ارور میده فکر کنم باید بعضی از کتابخانه هار و نصب کنید. میخواستم بپرسم میشه جای کلید ها رو عوض کرد؟
سلام وقتی کد پایانی رو ران میکنیم اصلا خرکت نمیکنه
با سلام و احترام؛
کد پایانی، تست شده و بدون مشکل اجرا میشود.
ممنون از همراهی شما با مجله فرادرس
سلام
وقتی 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)
امیدواریم با این راهکار مشکل برطرف شود.
برای شما آرزوی سلامتی و موفقیت داریم.