Migration to Codeberg

This commit is contained in:
Joaquin Gottlebe
2026-07-30 16:38:22 +02:00
commit 17048b703a
556 changed files with 3040 additions and 0 deletions
+58
View File
@@ -0,0 +1,58 @@
# Asteroids
## Overview
Asteroids game is built using the [Pygame](https://www.pygame.org/) library, which provides tools for creating 2D games in Python.
## Prerequisites
To run the game, ensure you have the following installed on your system:
- **Python 3.13 or later**: Install the latest version of Python from the [official Python website](https://www.python.org/).
- **Pygame**: The game relies on Pygame for graphics and input handling.
## Setting Up the Environment
To set up the game environment, follow these steps:
1. **Create a virtual environment:**
```bash
python3 -m venv venv
```
This command creates a virtual environment in the `venv` directory.
2. **Activate the virtual environment:**
On macOS or Linux:
```bash
source venv/bin/activate
```
On Windows:
```cmd
venv\Scripts\activate
```
3. **Install Pygame:**
With the virtual environment activated, install Pygame:
```bash
pip3 install pygame
```
## Running the Game
To start the game, ensure the virtual environment is activated, then run the following command:
```bash
python3 asteroids.py
```
## Troubleshooting
- Ensure the virtual environment is activated before running the game or installing dependencies.
- If you encounter issues with Pygame installation, ensure your Python version is compatible with the latest Pygame release.
- Check that all game files, including `asteroids.py`, are in the correct directory.
## License
This project is distributed under the MIT License. See the `LICENSE` file for details.
## Contributions
Contributions are welcome! Feel free to fork the repository and submit pull requests.
## Credits
- **Developer:** Joaquin Gottlebe
- **Built With:** Pygame and Python
+187
View File
@@ -0,0 +1,187 @@
import pygame
import sys
from random import randint, uniform
class Ship(pygame.sprite.Sprite):
def __init__(self, groups):
super().__init__(groups)
self.image = pygame.image.load('ship.png').convert_alpha()
self.rect = self.image.get_rect(center=(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2))
self.mask = pygame.mask.from_surface(self.image)
self.can_shoot = True
self.shoot_time = None
self.laser_sound = pygame.mixer.Sound('laser.ogg')
def laser_timer(self):
if not self.can_shoot:
current_time = pygame.time.get_ticks()
if current_time - self.shoot_time > 500:
self.can_shoot = True
def input_position(self):
pos = pygame.mouse.get_pos()
self.rect.center = pos
def laser_shoot(self):
if pygame.mouse.get_pressed()[0] and self.can_shoot:
self.can_shoot = False
self.shoot_time = pygame.time.get_ticks()
Laser(self.rect.midtop, laser_group)
self.laser_sound.play().set_volume(0.1)
def meteor_collision(self):
if pygame.sprite.spritecollide(self, meteor_group, False, pygame.sprite.collide_mask):
pygame.quit()
sys.exit()
def update(self):
self.laser_timer()
self.laser_shoot()
self.input_position()
self.meteor_collision()
class Laser(pygame.sprite.Sprite):
def __init__(self, pos, groups):
super().__init__(groups)
self.image = pygame.image.load('laser.png').convert_alpha()
self.rect = self.image.get_rect(midbottom=pos)
self.mask = pygame.mask.from_surface(self.image)
self.pos = pygame.math.Vector2(self.rect.topleft)
self.direction = pygame.math.Vector2(0, -1)
self.speed = 600
self.explosio_sound = pygame.mixer.Sound('explosion.wav')
def meteor_collision(self):
if pygame.sprite.spritecollide(self, meteor_group, True, pygame.sprite.collide_mask):
self.kill()
self.explosio_sound.play().set_volume(0.1)
def update(self):
self.pos += self.direction * self.speed * dt
self.rect.topleft = (round(self.pos.x), round(self.pos.y))
self.meteor_collision()
if self.rect.bottom < 0:
self.kill()
class Meteor(pygame.sprite.Sprite):
def __init__(self, pos, groups):
# basic setup
super().__init__(groups)
# surface
meteor_surf = pygame.image.load('meteor.png').convert_alpha()
meteor_size = pygame.math.Vector2(meteor_surf.get_size()) * uniform(0.5,2)
self.scaled_surf = pygame.transform.scale(meteor_surf, meteor_size)
self.image = self.scaled_surf
# rectangle
self.rect = self.image.get_rect(center=pos)
self.mask = pygame.mask.from_surface(self.image)
# positioning
self.pos = pygame.math.Vector2(self.rect.topleft)
self.direction = pygame.math.Vector2(uniform(-0.5, 0.5), 1)
self.speed = randint(400, 600)
# rotation
self.rotation = 0
self.rotation_speed = randint(-20,20)
def rotate(self):
self.rotation += self.rotation_speed * dt
rotated_surf = pygame.transform.rotozoom(self.scaled_surf, self.rotation,1 )
self.image = rotated_surf
self.rect = self.image.get_rect(center=self.rect.center)
self.mask = pygame.mask.from_surface(self.image)
def update(self):
self.pos += self.direction * self.speed * dt
self.rect.topleft = (round(self.pos.x), round(self.pos.y))
self.rotate()
if self.rect.top > WINDOW_HEIGHT:
self.kill()
class Score:
def __init__(self):
self.font = pygame.font.Font('subatomic.ttf',50)
def display(self):
score_text = f'Score: {pygame.time.get_ticks() // 1000}'
text_surf = self.font.render(score_text, True, (255,255,255))
text_rect = text_surf.get_rect(midbottom=(WINDOW_WIDTH / 2, WINDOW_HEIGHT - 80))
display_surface.blit(text_surf,text_rect)
pygame.draw.rect(display_surface,
(255,255,255),
text_rect.inflate(30,30),
width=8,
border_radius=5)
# basic setup
pygame.init()
WINDOW_WIDTH, WINDOW_HEIGHT = 1280,720
display_surface = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption('Space shooter')
clock = pygame.time.Clock()
# background
background_surf = pygame.image.load('background.png').convert()
# sprite groups
spaceship_group = pygame.sprite.GroupSingle()
laser_group = pygame.sprite.Group()
meteor_group = pygame.sprite.Group()
score = Score()
music = pygame.mixer.Sound('music.wav').play(loops = -1).set_volume(0.01)
# sprite creation
ship = Ship(spaceship_group)
# timer
meteor_timer = pygame.event.custom_type()
pygame.time.set_timer(meteor_timer, 200)
# game loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == meteor_timer:
meteor_y_pos = randint(-150, -50)
meteor_x_pos = randint(-100, WINDOW_WIDTH + 100)
Meteor((meteor_x_pos, meteor_y_pos), groups=meteor_group)
dt = clock.tick() / 1000
display_surface.blit(background_surf, (0, 0))
spaceship_group.update()
laser_group.update()
meteor_group.update()
score.display()
spaceship_group.draw(display_surface)
laser_group.draw(display_surface)
meteor_group.draw(display_surface)
pygame.display.update()
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.