diff --git a/maanjr b/maanjr new file mode 100644 index 0000000..ba2b2d8 --- /dev/null +++ b/maanjr @@ -0,0 +1,159 @@ +npx create-next-app@latest my-game +cd my-game +npm install + +# تثبيت مكتبة Phaser لإنشاء اللعبة +npm install phaser next-auth + +# إنشاء مجلد src وإضافة ملف اللعبة +mkdir src && cd src + +# إنشاء ملف تسجيل الدخول +cat > auth.js < selectCharacter.js < { + if (selectedCharacter) { + localStorage.setItem("selectedCharacter", selectedCharacter); + router.push("/game"); + } + }; + + return ( +
+

اختر شخصيتك

+
+ {characters.map((char) => ( +
setSelectedCharacter(char.image)}> + {char.name} +

{char.name} - {char.ability}

+
+ ))} +
+ +
+ ); +} +EOL + +# تعديل ملف اللعبة الأساسي لإضافة التحديات ولوحة المتصدرين +cat > game.js < { + const { data: session } = useSession(); + const [gameLoaded, setGameLoaded] = useState(false); + const selectedCharacter = typeof window !== "undefined" ? localStorage.getItem("selectedCharacter") || "assets/player1.png" : "assets/player1.png"; + + useEffect(() => { + if (session && !gameLoaded) { + new Phaser.Game(config(selectedCharacter)); + setGameLoaded(true); + } + }, [session, gameLoaded, selectedCharacter]); + + if (!session) { + return ; + } + return
; +}; + +const config = (character) => ({ + type: Phaser.AUTO, + width: 800, + height: 600, + scene: new MyGame(character), + physics: { + default: "arcade", + arcade: { + gravity: { y: 300 }, + }, + }, + parent: "game-container", +}); + +class MyGame extends Phaser.Scene { + constructor(character) { + super("MyGame"); + this.level = 1; + this.character = character; + this.score = 0; + } + + preload() { + this.load.image("sky", "assets/sky.png"); + this.load.image("player", this.character); + this.load.image("ground", "assets/platform.png"); + this.load.image("enemy", "assets/enemy.png"); + this.load.image("portal", "assets/portal.png"); + this.load.image("coin", "assets/coin.png"); + } + + create() { + this.add.image(400, 300, "sky"); + const platforms = this.physics.add.staticGroup(); + platforms.create(400, 580, "ground").setScale(2).refreshBody(); + + this.player = this.physics.add.sprite(400, 500, "player"); + this.player.setBounce(0.2); + this.player.setCollideWorldBounds(true); + this.physics.add.collider(this.player, platforms); + + this.coins = this.physics.add.group({ key: "coin", repeat: 5, setXY: { x: 100, y: 0, stepX: 120 } }); + this.physics.add.collider(this.coins, platforms); + this.physics.add.overlap(this.player, this.coins, this.collectCoin, null, this); + + this.scoreText = this.add.text(16, 16, "النقاط: 0", { fontSize: "32px", fill: "#fff" }); + } + + collectCoin(player, coin) { + coin.destroy(); + this.score += 10; + this.scoreText.setText(`النقاط: ${this.score}`); + localStorage.setItem("highscore", this.score); + } +} + +export default GameContainer; +EOL + +cd ..