38413-vm/core/management/commands/populate_games.py
2026-02-14 03:19:20 +00:00

141 lines
5.2 KiB
Python

import random
from django.core.management.base import BaseCommand
from core.models import GameProject
class Command(BaseCommand):
help = 'Populates the database with a variety of online and traditional games'
def handle(self, *args, **options):
game_data = [
{
"title": "Space Invaders Pro",
"genre": "shooter",
"description": "Defenda a terra contra invasores espaciais nesta versão clássica.",
"type": "script"
},
{
"title": "Neon Runner",
"genre": "runner",
"description": "Corra por uma cidade futurista desviando de obstáculos neon.",
"type": "script"
},
{
"title": "Sudoku Online",
"genre": "puzzle",
"description": "Desafie sua mente com milhares de níveis de Sudoku.",
"type": "online",
"url": "https://www.247sudoku.com/"
},
{
"title": "Classic Solitaire",
"genre": "puzzle",
"description": "O jogo de cartas mais popular de todos os tempos.",
"type": "online",
"url": "https://www.247solitaire.com/"
},
{
"title": "Snake Classic",
"genre": "arcade",
"description": "O jogo da cobrinha original em versão moderna.",
"type": "script"
},
{
"title": "Tower Building",
"genre": "puzzle",
"description": "Construa a torre mais alta que puder!",
"type": "online",
"url": "https://www.crazygames.com/embed/tower-building"
},
{
"title": "2048",
"genre": "puzzle",
"description": "Combine os blocos para chegar ao número 2048.",
"type": "online",
"url": "https://play2048.co/"
}
]
# Categories for variety
categories = ['Ação', 'Aventura', 'Puzzle', 'Esportes', 'Estratégia', 'Arcade', 'Luta', 'Corrida']
count = 0
# Create base games
for data in game_data:
if not GameProject.objects.filter(title=data['title']).exists():
GameProject.objects.create(
title=data['title'],
genre=data['genre'],
description=data['description'],
external_url=data.get('url', ''),
script_code=self.get_placeholder_script(data['title']) if data['type'] == 'script' else '',
is_active=True
)
count += 1
# Generate 50 more "simulated" games to show scale
for i in range(1, 51):
title = f"Jogo Online {i} - {random.choice(categories)}"
if not GameProject.objects.filter(title=title).exists():
GameProject.objects.create(
title=title,
genre='online',
description=f"Um emocionante jogo de {title.split(' - ')[1]} para jogar online.",
external_url="https://www.crazygames.com/embed/shell-shockers" if i % 2 == 0 else "https://www.crazygames.com/embed/moto-x3m",
is_active=True
)
count += 1
self.stdout.write(self.style.SUCCESS(f'Sucesso! {count} novos jogos adicionados ao catálogo.'))
def get_placeholder_script(self, title):
return f"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ margin: 0; background: #000; color: #fff; font-family: sans-serif; display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; overflow: hidden; }}
canvas {{ border: 2px solid #333; max-width: 100%; }}
#ui {{ position: absolute; top: 20px; }}
</style>
</head>
<body>
<div id="ui">Score: <span id="score">0</span></div>
<canvas id="gameCanvas" width="800" height="600"></canvas>
<script>
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
let score = 0;
let x = 400, y = 300;
function draw() {{
ctx.fillStyle = 'black';
ctx.fillRect(0, 0, 800, 600);
ctx.fillStyle = '#00ff00';
ctx.beginPath();
ctx.arc(x, y, 20, 0, Math.PI * 2);
ctx.fill();
ctx.fillStyle = 'white';
ctx.font = '24px Arial';
ctx.fillText('Simulação de {title}', 280, 50);
ctx.fillText('Use as setas para mover', 280, 550);
requestAnimationFrame(draw);
}}
window.addEventListener('keydown', (e) => {{
if (e.key === 'ArrowUp') y -= 10;
if (e.key === 'ArrowDown') y += 10;
if (e.key === 'ArrowLeft') x -= 10;
if (e.key === 'ArrowRight') x += 10;
score++;
document.getElementById('score').innerText = score;
}});
draw();
</script>
</body>
</html>
"""