شباب حاولت اعمل لعبة ثلاثية الابعاد بسيط ببايثون مفهومة مطاردة الباندا بس فيها مشكلة لا تعمل اصلا بعد التعديل عشان تكون كويسة فيها اخطاء ممكن مساعدة هبعت الكود و تشوفه
from direct.showbase.ShowBase import ShowBase
from panda3d.core import DirectionalLight, AmbientLight, Vec4, CollisionTraverser, CollisionNode, CollisionSphere, CollisionHandlerQueue, OnscreenText
from panda3d.core import TextNode
from direct. gui. OnscreenText import onscreenText
import random
class PandaChaseGame(ShowBase):
def __init__(self):
# إنشاء نافذة اللعبة
ShowBase.__init__(self)
# تحميل نموذج الباندا
self.panda = self.loader.loadModel("models/misc/rgbCube") # استخدام مكعب افتراضي كنموذج
self.panda.reparentTo(self.render)
self.panda.setScale(0.5) # تصغير الحجم
self.panda.setPos(random.uniform(-8, 8), random.uniform(-3, 18), 0)
# إعداد الكاميرا
self.disableMouse()
self.camera.setPos(0, -20, 10)
self.camera.lookAt(0, 0, 0)
# إضافة إضاءة
self.add_lights()
# إنشاء لاعب
self.player = self.loader.loadModel("models/misc/rgbCube") # استخدام مكعب افتراضي كلاعب
self.player.reparentTo(self.render)
self.player.setScale(0.5)
self.player.setPos(0, -8, 0)
# إعداد التحكم
self.key_map = {"left": False, "right": False, "forward": False, "backward": False}
self.accept("arrow_left", self.update_key, ["left", True])
self.accept("arrow_left-up", self.update_key, ["left", False])
self.accept("arrow_right", self.update_key, ["right", True])
self.accept("arrow_right-up", self.update_key, ["right", False])
self.accept("arrow_up", self.update_key, ["forward", True])
self.accept("arrow_up-up", self.update_key, ["forward", False])
self.accept("arrow_down", self.update_key, ["backward", True])
self.accept("arrow_down-up", self.update_key, ["backward", False])
# إعداد التصادم
self.c_trav = CollisionTraverser()
self.c_handler = CollisionHandlerQueue()
player_collider = self.player.attachNewNode(CollisionNode("player"))
player_collider.node().addSolid(CollisionSphere(0, 0, 0, 0.5))
self.c_trav.addCollider(player_collider, self.c_handler)
panda_collider = self.panda.attachNewNode(CollisionNode("panda"))
panda_collider.node().addSolid(CollisionSphere(0, 0, 0, 0.5))
self.c_trav.addCollider(panda_collider, self.c_handler)
# إعداد النصوص
self.score = 0
self.score_text = OnscreenText(text=f"Score: {self.score}",
style=1, fg=(1, 1, 1, 1),
pos=(-1.2, 0.9), scale=0.07, align=TextNode.ALeft)
# حركة الباندا
self.panda_speed = [random.uniform(-2, 2), random.uniform(-2, 2)]
self.taskMgr.add(self.move_panda, "MovePanda")
# تحديث اللعبة
self.taskMgr.add(self.update_game, "UpdateGame")
def add_lights(self):
# إضافة إضاءة اتجاهية
d_light = DirectionalLight("d_light")
d_light.setColor(Vec4(0.8, 0.8, 0.8, 1))
light_node = self.render.attachNewNode(d_light)
light_node.setHpr(45, -45, 0)
self.render.setLight(light_node)
# إضافة إضاءة محيطة
a_light = AmbientLight("a_light")
a_light.setColor(Vec4(0.3, 0.3, 0.3, 1))
ambient_node = self.render.attachNewNode(a_light)
self.render.setLight(ambient_node)
def update_key(self, key, value):
self.key_map[key] = value
def move_panda(self, task):
# تحريك الباندا عشوائيًا
dt = globalClock.getDt()
x, y, z = self.panda.getPos()
x += self.panda_speed[0] * dt
y += self.panda_speed[1] * dt
# إذا اصطدمت الباندا بالجدران، عكس الاتجاه
if x < -8 or x > 8:
self.panda_speed[0] *= -1
if y < -3 or y > 18:
self.panda_speed[1] *= -1
self.panda.setPos(x, y, z)
return task.cont
def update_game(self, task):
# حركة اللاعب
dt = globalClock.getDt()
speed = 5 * dt
if self.key_map["left"]:
self.player.setX(self.player.getX() - speed)
if self.key_map["right"]:
self.player.setX(self.player.getX() + speed)
if self.key_map["forward"]:
self.player.setY(self.player.getY() + speed)
if self.key_map["backward"]:
self.player.setY(self.player.getY() - speed)
# منع اللاعب من الخروج عن الحدود
x, y, z = self.player.getPos()
self.player.setX(max(-8, min(8, x)))
self.player.setY(max(-3, min(18, y)))
# التحقق من التصادم
self.c_trav.traverse(self.render)
for entry in self.c_handler.getEntries():
if entry.getIntoNode().getName() == "panda":
self.score += 1
self.score_text.setText(f"Score: {self.score}")
self.panda.setPos(random.uniform(-8, 8), random.uniform(-3, 18), 0)
return task.cont
if __name__ == "__main__":
game = PandaChaseGame()
game.run()