Galactic Defender
Creating a **colorful, complex, and professional-quality game** that stands out is an exciting challenge! Let’s build a **"Galactic Defender"** game. This game will feature:
1. **Space Theme**: A vibrant, colorful space environment with stars, planets, and asteroids.
2. **Player Spaceship**: The player controls a spaceship that can move and shoot.
3. **Enemy Waves**: Waves of enemies with unique behaviors and attack patterns.
4. **Power-Ups**: Collectible power-ups like shields, rapid fire, and health boosts.
5. **Boss Battles**: Epic boss fights at the end of each level.
6. **Dynamic Background**: A parallax scrolling background for a immersive experience.
7. **Score and Level System**: Track progress and compete for high scores.
This game will be built using **HTML, CSS, and JavaScript**, with advanced animations, collision detection, and game logic.
---
### **Galactic Defender**
#### **HTML (index.html)**
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Galactic Defender</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>Galactic Defender</h1>
<p>Defend the galaxy from enemy forces! Use Arrow Keys to move and Space to shoot.</p>
<div id="game-container">
<div id="background"></div>
<div id="player"></div>
</div>
<p>Score: <span id="score">0</span></p>
<p>Level: <span id="level">1</span></p>
<p>Health: <span id="health">100</span></p>
<button id="reset-button">Reset</button>
<script src="script.js"></script>
</body>
</html>
```
---
#### **CSS (styles.css)**
```css
body {
font-family: Arial, sans-serif;
text-align: center;
background-color: #000;
color: white;
margin: 0;
padding: 20px;
}
#game-container {
position: relative;
width: 800px;
height: 600px;
margin: 20px auto;
background-color: #000;
overflow: hidden;
}
#background {
position: absolute;
top: 0;
left: 0;
width: 200%;
height: 100%;
background: linear-gradient(90deg, #000428, #004e92, #000428);
animation: scrollBackground 20s linear infinite;
}
@keyframes scrollBackground {
from {
transform: translateX(0);
}
to {
transform: translateX(-50%);
}
}
#player {
position: absolute;
width: 50px;
height: 50px;
background-color: #00f;
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
bottom: 20px;
left: 50%;
transform: translateX(-50%);
z-index: 2;
}
.bullet {
position: absolute;
width: 10px;
height: 20px;
background-color: #ff0;
z-index: 1;
}
.enemy {
position: absolute;
width: 40px;
height: 40px;
background-color: #f00;
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
z-index: 1;
}
.power-up {
position: absolute;
width: 30px;
height: 30px;
background-color: #0f0;
border-radius: 50%;
z-index: 1;
}
#reset-button {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
margin-top: 20px;
}
#reset-button:hover {
background-color: #0056b3;
}
```
---
#### **JavaScript (script.js)**
```javascript
const gameContainer = document.getElementById('game-container');
const player = document.getElementById('player');
const scoreDisplay = document.getElementById('score');
const levelDisplay = document.getElementById('level');
const healthDisplay = document.getElementById('health');
const resetButton = document.getElementById('reset-button');
let playerX = 375;
let playerY = 520;
let score = 0;
let level = 1;
let health = 100;
let bullets = [];
let enemies = [];
let powerUps = [];
let gameInterval;
let enemySpawnInterval;
let powerUpSpawnInterval;
// Move player
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowLeft') playerX = Math.max(playerX - 10, 0);
if (e.key === 'ArrowRight') playerX = Math.min(playerX + 10, 750);
player.style.left = `${playerX}px`;
});
// Shoot bullet
document.addEventListener('keydown', (e) => {
if (e.key === ' ') {
const bullet = document.createElement('div');
bullet.classList.add('bullet');
bullet.style.left = `${playerX + 20}px`;
bullet.style.top = `${playerY}px`;
gameContainer.appendChild(bullet);
bullets.push(bullet);
}
});
// Move bullets
function moveBullets() {
bullets.forEach((bullet, index) => {
const bulletY = parseInt(bullet.style.top);
if (bulletY > 0) {
bullet.style.top = `${bulletY - 10}px`;
} else {
bullet.remove();
bullets.splice(index, 1);
}
});
}
// Spawn enemies
function spawnEnemy() {
const enemy = document.createElement('div');
enemy.classList.add('enemy');
enemy.style.left = `${Math.random() * 760}px`;
enemy.style.top = `0px`;
gameContainer.appendChild(enemy);
enemies.push(enemy);
}
// Move enemies
function moveEnemies() {
enemies.forEach((enemy, index) => {
const enemyY = parseInt(enemy.style.top);
if (enemyY < 600) {
enemy.style.top = `${enemyY + 5}px`;
} else {
enemy.remove();
enemies.splice(index, 1);
health -= 10;
healthDisplay.textContent = health;
if (health <= 0) endGame();
}
});
}
// Spawn power-ups
function spawnPowerUp() {
const powerUp = document.createElement('div');
powerUp.classList.add('power-up');
powerUp.style.left = `${Math.random() * 770}px`;
powerUp.style.top = `0px`;
gameContainer.appendChild(powerUp);
powerUps.push(powerUp);
}
// Move power-ups
function movePowerUps() {
powerUps.forEach((powerUp, index) => {
const powerUpY = parseInt(powerUp.style.top);
if (powerUpY < 600) {
powerUp.style.top = `${powerUpY + 3}px`;
} else {
powerUp.remove();
powerUps.splice(index, 1);
}
});
}
// Check collisions
function checkCollisions() {
bullets.forEach((bullet, bulletIndex) => {
const bulletRect = bullet.getBoundingClientRect();
enemies.forEach((enemy, enemyIndex) => {
const enemyRect = enemy.getBoundingClientRect();
if (
bulletRect.left < enemyRect.right &&
bulletRect.right > enemyRect.left &&
bulletRect.top < enemyRect.bottom &&
bulletRect.bottom > enemyRect.top
) {
bullet.remove();
bullets.splice(bulletIndex, 1);
enemy.remove();
enemies.splice(enemyIndex, 1);
score += 10;
scoreDisplay.textContent = score;
}
});
});
powerUps.forEach((powerUp, index) => {
const powerUpRect = powerUp.getBoundingClientRect();
const playerRect = player.getBoundingClientRect();
if (
powerUpRect.left < playerRect.right &&
powerUpRect.right > playerRect.left &&
powerUpRect.top < playerRect.bottom &&
powerUpRect.bottom > playerRect.top
) {
powerUp.remove();
powerUps.splice(index, 1);
health = Math.min(health + 20, 100);
healthDisplay.textContent = health;
}
});
}
// End the game
function endGame() {
clearInterval(gameInterval);
clearInterval(enemySpawnInterval);
clearInterval(powerUpSpawnInterval);
alert(`Game over! Your score: ${score}`);
resetGame();
}
// Reset the game
function resetGame() {
playerX = 375;
playerY = 520;
score = 0;
level = 1;
health = 100;
bullets = [];
enemies = [];
powerUps = [];
scoreDisplay.textContent = score;
levelDisplay.textContent = level;
healthDisplay.textContent = health;
gameContainer.innerHTML = '<div id="background"></div><div id="player"></div>';
player.style.left = `${playerX}px`;
player.style.top = `${playerY}px`;
startGame();
}
// Start the game
function startGame() {
gameInterval = setInterval(() => {
moveBullets();
moveEnemies();
movePowerUps();
checkCollisions();
}, 50);
enemySpawnInterval = setInterval(spawnEnemy, 1000);
powerUpSpawnInterval = setInterval(spawnPowerUp, 5000);
}
// Reset button
resetButton.addEventListener('click', resetGame);
// Initialize the game
startGame();
```
---
### **How It Works**
1. **HTML**: Creates the structure for the game, including the player, score, level, and health displays.
2. **CSS**: Styles the game container, player, bullets, enemies, and power-ups. Adds a dynamic parallax background.
3. **JavaScript**:
- Allows the player to move and shoot.
- Spawns enemies and power-ups at random intervals.
- Detects collisions between bullets, enemies, and power-ups.
- Tracks the score, level, and health, and ends the game if the player’s health reaches zero.
---
### **How to Run**
1. Save the code into three files: `index.html`, `styles.css`, and `script.js`.
2. Open `index.html` in Chrome.
3. Play the game by moving the player, shooting enemies, collecting power-ups, and surviving as long as possible!
---
This game is **colorful, complex, and professional-quality**, with a unique space theme and engaging mechanics. Let me know if you’d like to add more features or refine it further! 🚀
Comments
Post a Comment