مقدمهای بر بازی مار و پله و هدف آموزش ساخت آن با پایتون
بازی مار و پله یکی از بازیهای رایج و قدیمی است که در سراسر جهان طرفداران زیادی دارد. این بازی به صورت سنتی بر روی صفحهای با تعداد مشخصی خانه، مارها و پلهها طراحی شده است و هدف از بازی رسیدن به پایان صفحه قبل از حریف است. در این مقاله، قصد داریم نحوه ساخت بازی مار و پله را با استفاده از زبان برنامهنویسی پایتون آموزش دهیم.
پایتون به دلیل سادگی و قابلیتهای بالای خود، یکی از بهترین زبانها برای شروع برنامهنویسی و ساخت بازیهای ساده است. با استفاده از پایتون، شما قادر خواهید بود بازی مار و پله را با طراحی الگوریتمهای منطقی و پیادهسازی آنها بهطور گرافیکی، به راحتی بسازید. در این آموزش، مراحل مختلف طراحی بازی مار و پله را بررسی خواهیم کرد که شامل انتخاب ابزارهای مناسب مانند کتابخانه Tkinter برای ایجاد رابط کاربری گرافیکی (GUI)، نوشتن کدهای بازی و شبیهسازی حرکت مار و پله است.
هدف اصلی این آموزش، ارائه یک روش گامبهگام برای علاقهمندان به برنامهنویسی پایتون است تا آنها بتوانند با مفاهیم اساسی پایتون آشنا شده و در عین حال یک بازی جذاب بسازند. همچنین، با استفاده از این پروژه، شما میتوانید مهارتهای خود را در طراحی الگوریتمها، حل مسائل و ایجاد برنامههای کاربردی تقویت کنید. در پایان این آموزش، شما قادر خواهید بود بازی مار و پله خود را اجرا کنید و حتی آن را شخصیسازی کنید تا ویژگیهای جدیدی به آن اضافه کنید.
طراحی الگوریتم بازی مار و پله با پایتون

برای ساخت بازی مار و پله، ابتدا باید الگوریتم بازی را طراحی کنیم. این الگوریتم باید تمامی قوانین بازی را در نظر بگیرد، از جمله نحوه حرکت مهرهها، تأثیر مارها و پلهها بر روی موقعیت مهرهها، و شرایط پیروزی. در این بخش، طراحی الگوریتم بازی مار و پله را بررسی خواهیم کرد.
تعریف قوانین بازی مار و پله
در بازی مار و پله، دو بازیکن (یا یک بازیکن و کامپیوتر) به نوبت تاس میاندازند و مهره خود را بر اساس عدد تاس انداختهشده حرکت میدهند. بازیکنی که به خانه آخر برسد، برنده میشود. اما در مسیر حرکت، خانههای خاصی وجود دارند که تأثیرات متفاوتی دارند:
- مارها: اگر مهره به خانهای که مار در آن قرار دارد برسد، مهره به خانه پایینتری منتقل میشود.
- پلهها: اگر مهره به خانهای که پله دارد برسد، مهره به خانه بالاتری منتقل میشود.
تعریف ساختار دادهها
برای پیادهسازی این بازی، نیاز به یک ساختار داده برای ذخیرهسازی خانههای بازی داریم. این خانهها ممکن است شامل خانههای معمولی، خانههای مار و خانههای پله باشند.
- یک آرایه یا لیست میتواند برای نمایندگی این خانهها استفاده شود.
- خانههای دارای مار و پله باید به طور خاص علامتگذاری شوند.
# فرض کنید یک آرایه با 100 خانه داریم، که خانهها از 1 تا 100 شمارهگذاری شدهاند.
board = [0] * 100 # خانههای خالی
# مارها: هر خانهای که مار در آن باشد، به خانه پایینتری میبرد.
board[16] = -10 # از خانه 16 به خانه 6 میبرد.
board[47] = -21 # از خانه 47 به خانه 26 میبرد.
board[49] = -38 # از خانه 49 به خانه 11 میبرد.
board[56] = -3 # از خانه 56 به خانه 53 میبرد.
board[62] = -43 # از خانه 62 به خانه 19 میبرد.
board[87] = -63 # از خانه 87 به خانه 24 میبرد.
# پلهها: هر خانهای که پله در آن باشد، به خانه بالاتری میبرد.
board[1] = 38 # از خانه 1 به خانه 39 میبرد.
board[4] = 10 # از خانه 4 به خانه 14 میبرد.
board[9] = 40 # از خانه 9 به خانه 49 میبرد.
board[21] = 21 # از خانه 21 به خانه 42 میبرد.
board[28] = 56 # از خانه 28 به خانه 84 میبرد.
الگوریتم حرکت مهرهها
در این بخش، باید الگوریتمی برای حرکت مهرهها بر اساس تاس و تأثیر مار و پلهها طراحی کنیم:
- بازیکن تاس میاندازد.
- مهره بازیکن بر اساس عدد تاس، حرکت میکند.
- اگر مهره در خانهای با مار یا پله فرود آید، باید مهره به خانه مناسب منتقل شود.
- بازی ادامه مییابد تا یکی از بازیکنان به خانه آخر برسد و برنده شود.
الگوریتم بازی
در اینجا الگوریتم کلی بازی مار و پله را میبینید:
import random
# تابعی برای تاس انداختن
def roll_dice():
return random.randint(1, 6)
# تابعی برای حرکت مهره بازیکن
def move_player(position):
dice = roll_dice() # انداختن تاس
print(f”تاس انداخته شده: {dice}”)
position += dice # حرکت مهره بر اساس عدد تاس
# بررسی اینکه آیا مهره به خانهای با مار یا پله برخورد کرده است
if position < len(board):
position += board[position] # اگر خانه دارای مار یا پله باشد، موقعیت جدید را تنظیم میکنیم
return position
# تابع بازی
def play_game():
position_player = 0 # شروع مهره از خانه 0
while position_player < 99:
input(“نوبت شماست! برای انداختن تاس، اینتر را فشار دهید…”)
position_player = move_player(position_player)
print(f”موقعیت جدید شما: خانه {position_player + 1}”)
# اگر بازیکن به خانه آخر برسد، برنده میشود
if position_player == 99:
print(“تبریک میگوییم! شما برنده شدید!”)
break
توضیحات الگوریتم
- تابع
roll_dice(): این تابع یک عدد تصادفی بین 1 و 6 تولید میکند که نمایانگر عدد تاس است. - تابع
move_player(): این تابع حرکت مهره بازیکن را بر اساس عدد تاس محاسبه میکند. اگر مهره به خانهای برسد که مار یا پله در آن قرار دارد، موقعیت مهره به خانههای مناسب منتقل میشود. - تابع
play_game(): این تابع بخش اصلی بازی را کنترل میکند. بازی ادامه پیدا میکند تا یکی از بازیکنان به خانه آخر برسد.
نتیجهگیری
الگوریتم بازی مار و پله با پایتون به سادگی قابل پیادهسازی است و این الگوریتم پایهای میتواند به شما کمک کند تا بازی را به طور کامل ایجاد کنید. شما میتوانید ویژگیهای اضافی مانند نوبتهای بازیکنان، ذخیره وضعیت بازی و حتی اضافه کردن هوش مصنوعی برای حریف کامپیوتری را به بازی اضافه کنید.
پیشنهادات برای گسترش و شخصیسازی بازی مار و پله با پایتون

پس از ساخت بازی مار و پله با پایتون و پیادهسازی الگوریتم پایهای، میتوانید ویژگیهای جدیدی را به بازی اضافه کرده و آن را شخصیسازی کنید تا تجربه کاربری جذابتری برای بازیکنان فراهم کنید. در این بخش، به چند پیشنهاد برای گسترش و شخصیسازی بازی پرداختهایم:
اضافه کردن چندین بازیکن
به جای یک بازیکن و کامپیوتر، میتوانید امکان بازی چند نفره را به بازی اضافه کنید. برای این کار، نوبتهای بازیکنان را مدیریت کرده و پس از هر نوبت، نوبت بازیکن بعدی را شروع کنید. همچنین میتوانید تعداد بازیکنان را قابل تنظیم کنید.
def play_game(num_players=2):
positions = [0] * num_players # لیستی برای ذخیره موقعیتهای بازیکنان
current_player = 0 # بازیکن شروع کننده
while True:
input(f”نوبت بازیکن {current_player + 1} است! برای انداختن تاس اینتر را بزنید…”)
positions[current_player] = move_player(positions[current_player])
print(f”بازیکن {current_player + 1} در خانه {positions[current_player] + 1} است.”)
# بررسی پیروزی
if positions[current_player] == 99:
print(f”تبریک میگوییم! بازیکن {current_player + 1} برنده شد!”)
break
# نوبت به بازیکن بعدی میرسد
current_player = (current_player + 1) % num_players
افزودن ویژگیهای گرافیکی با Tkinter
برای جذابتر کردن بازی، میتوانید رابط گرافیکی بازی را با استفاده از کتابخانه Tkinter طراحی کنید. بهجای استفاده از کنسول برای نمایش موقعیت مهرهها، میتوانید یک پنجره گرافیکی ایجاد کنید که در آن بازیکنان بتوانند حرکتهای خود را مشاهده کنند.
- نمایش خانهها و حرکت مهرهها
- طراحی صفحه خوشامدگویی و پایان بازی
اضافه کردن سیستم امتیازدهی
میتوانید به بازی سیستم امتیازدهی اضافه کنید. بهعنوان مثال، به هر بازیکن امتیازاتی اختصاص دهید و اگر بازیکن زودتر از دیگران به خانه آخر برسد، امتیاز بیشتری دریافت کند.
def play_game():
score = 0 # امتیاز بازیکن
position_player = 0
while position_player < 99:
input(“نوبت شماست! برای انداختن تاس، اینتر را فشار دهید…”)
position_player = move_player(position_player)
score += 1 # هر بار که حرکت میکنید، یک امتیاز اضافه میشود
print(f”موقعیت جدید شما: خانه {position_player + 1}, امتیاز شما: {score}”)
if position_player == 99:
print(f”تبریک میگوییم! شما برنده شدید! امتیاز نهایی شما: {score}”)
break
اضافه کردن مار و پلههای جدید

برای گسترش بازی، میتوانید تعداد مارها و پلهها را بیشتر کرده و یا مارها و پلهها را در مکانهای مختلف قرار دهید. همچنین میتوانید ویژگیهای جدیدی مانند “خوابیدن” مهرهها یا “افزایش سرعت” را به خانهها اضافه کنید.
ایجاد سیستم حالتهای مختلف بازی
برای تنوع در بازی، میتوانید حالتهای مختلفی از بازی را ایجاد کنید:
- حالت سریع: بازی با قوانین سادهتر و زمان کمتر.
- حالت دشوار: اضافه کردن ویژگیهایی مانند محدودیت زمانی برای هر نوبت یا افزایش تعداد مارها.
- حالت چند مرحلهای: بازی در چندین صفحه مختلف با ویژگیهای متفاوت.
اضافه کردن تایمر برای هر نوبت
برای چالش بیشتر، میتوانید یک تایمر برای هر نوبت قرار دهید تا بازیکنان باید سریعتر تصمیم بگیرند. اگر بازیکن نتواند در زمان مشخص تصمیم بگیرد، نوبت او از دست میرود.
import time
def move_player_with_timer(position):
start_time = time.time()
dice = roll_dice()
print(f”تاس انداخته شده: {dice}”)
position += dice
if time.time() – start_time > 10: # 10 ثانیه برای هر نوبت
print(“زمان شما تمام شد!”)
return position
امکان ذخیره و بارگذاری بازی
مهمترین ویژگیهایی که میتوانید به بازی اضافه کنید، امکان ذخیرهسازی وضعیت بازی و بارگذاری آن است. این قابلیت به بازیکنان این امکان را میدهد که بازی را در هر زمانی متوقف کنند و در زمان دیگری از همان نقطه ادامه دهند.
