بازیهای سه بعدی عمدتاً توسط موتورهای مشهور مانند یونیتی، آنریل انجین و زبانهایی مانند سی پلاس پلاس ساخته میشود. زبان برنامه نویسی پایتون نیز به دلیل خوانایی و سادگی که دارد، به حوزه ساخت بازی سه بعدی ورود پیدا کرده است. در این مقاله به آموزش ساخت بازی سه بعدی با پایتون میپردازیم.
قبل از اینکه کدهای پایتون مربوط به ساخت بازی سه بعدی را بگوییم باید با یک سری پیشنیازها روبرو شوید و آن ها را بدانید. این پیش نیازها به شما کمک می کند تا بتوانید بازی بهتر و جذاب تری بسازید.
برای ساخت بازی سه بعدی با پایتون نیاز داریم که از موتور panda3d استفاده کنیم. برای این کار بهتر است که یک محیط مجازی بسازیم و کتابخانه panda3d را در محیط مجازی نصب کنیم. برای ساختن یک محیط مجازی در vscode میتوانیم دستور زیر را در ترمینال بنویسیم.
py -m venv .venv
بعد از نوشتن این دستور در ترمینال vscode، فولدر جدیدی برای ما نمایش داده خواهد شد. برای استفاده از محیط مجازی نیاز داریم تا آن را فعال کنیم. برای فعال کردن محیط مجازی میتوانیم دستور زیر را در ترمینال بنویسیم.
.venv/Scripts/activate
با نوشتن این دستور، محیط مجازی ما فعال خواهد شد.
بیشتر بخوانید: ساخت بازی با پایتون
بعد از ساخت و فعال سازی محیط مجازی، میتوانیم کتابخانه panda3d را در آن نصب کنیم. برای انجام این کار دستور زیر را در صفحه ترمینال مینویسیم.
pip install panda3d
با نوشتن این دستور در صفحه ترمینال، کتابخانه panda3d در محیط مجازی ما نصب میشود. بعد از انجام مراحل بالا، میتوانیم ساخت بازی سه بعدی با پایتون را شروع کنیم.
ابتدا، یک فایل جدید برای ساخت بازی سه بعدی میسازیم و اسم فایل را mygame.py قرار میدهیم. ( اسم فایل میتواند به دلخواه شما باشد)
برای استفاده از کتابخانه ای که نصب کردیم. دستور زیر را در vscode مینویسیم.
from direct.showbase.ShowBase import ShowBase
کار showbase در واقع ساختن یک صفحه گرافیکی برای نمایش مدلهای سه بعدی میباشد.
در ادامه نیاز داریم تا یک کلاس جدید بسازیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
سپس، داخل کلاس Mygame تابع init را مینویسیم و showbase را در آن فعال میکنیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
در ادامه میتوانیم از کلاس خود یک شیء ایجاد کنیم و با استفاده از run، یک فضای خالی برای بازی خود بسازیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
game = Mygame()
game.run()
اگر این کد را اجرا کنیم، یک صفحه خالی برای ما نمایش داده خواهد شد که میتوانیم مدلهای سه بعدی بازی خود را به این صفحه اضافه کنیم.
برای اضافه کردن مدل سه بعدی میتوانیم داخل کلاس خود یک متغیر جدید درست کنیم. برای مثال میتوانیم یک مکعب سه بعدی را به بازی خود اضافه کنیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.cube = self.loader.loadModel(“models/box”)
game = Mygame()
game.run()
در ادامه نیاز داریم تا این مکعب را به صفحه بازی خود اضافه کرده و آن را نمایش دهیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.cube = self.loader.loadModel(“models/box”)
self.cube.reparentTo(self.render)
game = Mygame()
game.run()
بعد از انجام این مراحل، باید جایگاه قرارگیری این مکعب را مشخص کنیم. از آنجایی که بازی ما سه بعدی است پس مکعب داخل بازی هم از سه پارامتر x,y و z به عنوان مختصات استفاده میکند.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.cube = self.loader.loadModel(“models/box”)
self.cube.reparentTo(self.render)
self.cube.setpos(0,0,0)
game = Mygame()
game.run()
پس از مشخص کردن جایگاه قرارگیری مکعب، نیاز داریم که اندازه آن هم مشخص کنیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.cube = self.loader.loadModel(“models/box”)
self.cube.reparentTo(self.render)
self.cube.setPos(0,0,0)
self.cube.setScale(1,1,1)
game = Mygame()
game.run()
در ادامه، زاویه دید بازیکن را نسبت به محیط بازی تنظیم میکنیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.cube = self.loader.loadModel(“models/box”)
self.cube.reparentTo(self.render)
self.cube.setPos(0,0,0)
self.cube.setScale(1,1,1)
self.disableMouse()
self.camera.setpos(10, -60, 20)
self.camera.lookAt(self.cube)
game = Mygame()
game.run()
با اجرا کردن این کد، مکعب مورد نظر، در محیط سه بعدی بازی ما، نمایش داده خواهد شد.
پس از معرفی مدل سه بعدی مکعب، باید یک فضای مناسب برای بازی خود بسازیم و همانند مدل سه بعدی مکعب، جایگاه آن را مشخص کرده و آن را نمایش دهیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.cube = self.loader.loadModel(“models/box”)
self.cube.reparentTo(self.render)
self.cube.setPos(0,0,0)
self.cube.setScale(1,1,1)
self.ground = self.loader.loadModel(“models/box”)
self.ground.setPos(0,0,0)
self.ground.setScale(0.1,0.1,0.1)
self.disableMouse()
self.camera.setpos(10, -60, 20)
self.camera.lookAt(self.cube)
game = Mygame()
game.run()
با اجرا کردن این کد، میتوانیم محیط بازی و مدل سه بعدی مکعب را ببینیم. در مرحله بعد نیاز داریم که به مدل سه بعدی مکعب، قابلیت حرکت کردن را اضافه کنیم.
from direct.showbase.ShowBase import ShowBase
class Mygame(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.cube = self.loader.loadModel(“models/box”)
self.cube.reparentTo(self.render)
self.cube.setPos(0,0,0)
self.cube.setScale(1,1,1)
self.ground = self.loader.loadModel(“models/box”)
self.ground.setPos(0,0,0)
self.ground.setScale(0.1,0.1,0.1)
self.disableMouse()
self.camera.setpos(10, -60, 20)
self.camera.lookAt(self.cube)
self.accept(“arrow_up”, self.move_up)
self.accept(“arrow_down”, self.move_down)
self.accept(“arrow_left”, self.move_left)
self.accept(“arrow_right”, self.move_right)
def move_up(self):
self.cube.setY(self.cube.getY() + 1)
def move_down(self):
self.cube.setY(self.cube.getY() - 1)
def move_right(self):
self.cube.setX(self.cube.getX() + 1)
def move_left(self):
self.cube.setX(self.cube.getX() - 1)
game = Mygame()
game.run()
در این قسمت از accept استفاده کردیم که به بازی ما اجازه واکنش به فشرده شدن دکمههای کیبورد را میدهد. با استفاده از accept، میتوانیم هنگام فشرده شدن یک دکمه خاص، تابع مخصوصی را اجرا کنیم. برای مثال در این بازی که ساختیم، هنگام فشرده شدن دکمه فلش بالا (arrow_up) تابع move_up فراخوانده میشود. کار این تابع تغییر مقدار y مکعب است و با هر بار فشار دادن دکمه فلش بالا، یک واحد به مقدار Y اضافه میشود. با همین روش توانستیم به مدل سه بعدی مکعب، قابلیت حرکت کردن را بدهیم.
دکمه فلش پایین تابع move_down را فعال کرده و یک واحد از مقدار Y مکعب کم میکند.
دکمه فلش سمت چپ تابع move_left را فعال کرده و یک واحد از مقدار X مکعب کم میکند.
دکمه فلش سمت راست تابع move_right را فعال کرده و یک واحد به مقدار X اضافه میکند.
جمع بندی
در این مقاله به ساخت بازی سه بعدی با پایتون پرداختیم. نحوه ساخت محیط مجازی و نصب کتابخانه panda3d را یادگرفتیم. با استفاده از کتابخانه panda3d میتوانیم پروژههای پیچیده تری نیز بسازیم و از امکانات این کتابخانه مانند اضافه کردن انیمیشن به بازی، افزودن صدا، مدلهای سه بعدی مختلف و… استفاده کنیم.
موسسه پل استار یک موسسه شتابدهی استعداد در حوزه برنامه نویسی کودکان و نوجوانان است. این موسسه با برگزاری دورههای برنامهنویسی، رباتیک و هوش مصنوعی مخصوص کودکان و نوجوانان باعث کشف و رشد خلاقیت کودکان و نوجوانان میشود. از این رو پیشنهاد میشود پس از مطالعه این مقاله با مشاورین این موسسه تماس حاصل فرمایید تا اطلاعات تکمیلی را دریافت نمایید.