ساخت بازی سه بعدی با پایتون
مقالات
دوشنبه 11 تیر 1403
جهت مطالعه این مقاله به 10 دقیقه زمان نیاز دارید
آنچه در این مقاله خواهیم خواند:

مقدمه:

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

 

پیش نیاز‌ها: 

ساخت محیط مجازی : 

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

برای ساختن یک محیط مجازی در vscode می‌توانیم دستور زیر را در ترمینال بنویسیم. 


py -m venv .venv 


بعد از نوشتن این دستور در ترمینال vscode، فولدر جدیدی برای ما نمایش داده خواهد شد.

برای استفاده از محیط مجازی نیاز داریم تا آن را فعال کنیم. برای فعال کردن محیط مجازی می‌توانیم دستور زیر را در ترمینال بنویسیم. 

.venv/Scripts/activate 

با نوشتن این دستور، محیط مجازی ما فعال خواهد شد.

 

نصب کتابخانه panda3d : 

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

pip install panda3d

با نوشتن این دستور در صفحه ترمینال، کتابخانه 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 می‎توانیم پروژه‌های پیچیده تری نیز بسازیم و از امکانات این کتابخانه مانند اضافه کردن انیمیشن به بازی، افزودن صدا، مدل‌های سه بعدی مختلف و… استفاده کنیم.