Compare commits
68 Commits
6abca13d4c
...
main
Author | SHA1 | Date | |
---|---|---|---|
d57c16ceea | |||
62bd1bd253 | |||
27d545326e | |||
5fb1308bd6 | |||
207fd7e7ca | |||
4e84473dff | |||
57111e5766 | |||
47ceeca0cd | |||
cbece676a6 | |||
63044ece48 | |||
6042fa2fac | |||
fe911b62bd | |||
63f2b48b96 | |||
b692082203 | |||
62e4655056 | |||
73182e90b9 | |||
b0b449cef0 | |||
b3f15d46e7 | |||
b70ebb007f | |||
eb547c65b7 | |||
deb66dd64e | |||
5c5efb40b4 | |||
12f8a02d64 | |||
ad2a0b8209 | |||
250920f8ca | |||
93aa628943 | |||
535258e76a | |||
3fc03445e5 | |||
c6a1b1c038 | |||
e83dec026a | |||
e08074c22e | |||
47d8af9953 | |||
5dcd723dba | |||
7324c4374c | |||
b4981edd2b | |||
97ac3c46ad | |||
10a691d4c3 | |||
2588a87a24 | |||
9595305c20 | |||
5ca7323cb2 | |||
73efb26db2 | |||
442d5f14c6 | |||
46c25b99ef | |||
cf2f5bb9da | |||
196e16b404 | |||
f5537d0644 | |||
cad6758f1c | |||
bb5a1b03d6 | |||
7daecb7dad | |||
1cbc1e5bce | |||
2fb0243117 | |||
e32280cfc5 | |||
d705971a16 | |||
032229a115 | |||
5a5550b29b | |||
d964caf807 | |||
15b3fd2046 | |||
618348294c | |||
6d5790c1e0 | |||
bb17938ab5 | |||
09b34d1dbd | |||
ebfa3ca1da | |||
322f808f38 | |||
89f820f1f7 | |||
f4fa36e941 | |||
76694f3407 | |||
315e3764d1 | |||
f59b875d1d |
2
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
|
||||
__pycache__/
|
||||
.idea/
|
||||
|
8
.idea/.gitignore
generated
vendored
@ -1,8 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
10
.idea/TruckSimulator.iml
generated
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.9 (Arbeit1)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
6
.idea/inspectionProfiles/profiles_settings.xml
generated
@ -1,6 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
4
.idea/misc.xml
generated
@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (Arbeit1)" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
.idea/modules.xml
generated
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/TruckSimulator.iml" filepath="$PROJECT_DIR$/.idea/TruckSimulator.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
31
README.md
@ -1 +1,30 @@
|
||||
# TruckSimulator
|
||||
# Trucksimulator
|
||||
|
||||
Willkommen im Trucksimulator-Repository! In diesem Spiel geht es darum, einen Truck zu fahren und eine Ladung von einer Mine abzuholen und zum Ziel zu bringen, ohne dabei von einem Helikopter erwischt zu werden, der einen verfolgt.
|
||||
|
||||
## Installation
|
||||
|
||||
Um das Spiel zu spielen, müssen Sie es zuerst herunterladen und auf Ihrem Computer installieren. Hier sind die Schritte:
|
||||
|
||||
1. Klonen Sie das Repository auf Ihren Computer mit dem Befehl
|
||||
`git clone https://git.braveslave.duckdns.org/Yadciel/LF08.git`.
|
||||
Oder
|
||||
Ziehen sie sich die ".Exe" aus dem Pakete Tab.
|
||||
2. Stellen Sie sicher, dass Sie die neueste Version von Python und der pygame-Bibliothek installiert haben.
|
||||
3. Navigieren Sie zum Ordner `LF08` und führen Sie das Spiel mit dem Befehl `python main.py` aus.
|
||||
|
||||
## Spielanleitung
|
||||
|
||||
Das Ziel des Spiels ist es, eine Ladung von einer Mine abzuholen und zum Ziel zu bringen, ohne dabei von einem Helikopter erwischt zu werden. Hier sind die Schritte:
|
||||
|
||||
1. Starten Sie das Spiel, indem Sie die Datei `main.py` ausführen oder die main.exe.
|
||||
(Wichtig! der resourcen Ordner muss im selben Ordner sein wie die main.py und oder main.exe)
|
||||
2. Fahren Sie den Truck zur Mine und laden Sie die Ladung auf.
|
||||
3. Bringen Sie die Ladung zum Ziel, indem Sie den Truck auf der Straße halten und "Hindernissen" ausweichen.
|
||||
(Hindernisse folgen noch)
|
||||
4. Seien Sie vorsichtig und vermeiden Sie es, vom Helikopter erwischt zu werden, der Sie verfolgt. Wenn er zu nahe kommt, verlieren Sie das Spiel.
|
||||
5. Wenn Sie erfolgreich 1000 Erz zum Ziel gebracht haben, haben Sie das Spiel gewonnen!
|
||||
|
||||
## Mitwirkende
|
||||
|
||||
Dieses Spiel wurde von Nico Schmidt entwickelt.
|
||||
|
@ -1,45 +0,0 @@
|
||||
import pygame
|
||||
|
||||
|
||||
class Erz(pygame.sprite.Sprite):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("Erzmine.jpg").convert_alpha()
|
||||
self.rect = self.image.get_rect()
|
||||
self.rect = 330, 20
|
||||
|
||||
|
||||
def draw(self, win):
|
||||
groesse = pygame.transform.scale(self.image, (100, 100))
|
||||
win.blit(groesse, self.rect)
|
||||
|
||||
|
||||
|
||||
class Tank(pygame.sprite.Sprite):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("Tank.png").convert_alpha()
|
||||
self.rect = self.image.get_rect()
|
||||
self.rect = 30, 220
|
||||
|
||||
|
||||
def draw(self, win):
|
||||
groesse = pygame.transform.scale(self.image, (100, 100))
|
||||
win.blit(groesse, self.rect)
|
||||
|
||||
|
||||
|
||||
class Ziel(pygame.sprite.Sprite):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("Ziel.jpg").convert_alpha()
|
||||
self.rect = self.image.get_rect()
|
||||
self.rect = 330, 520
|
||||
|
||||
|
||||
def draw(self, win):
|
||||
groesse = pygame.transform.scale(self.image, (100, 100))
|
||||
win.blit(groesse, self.rect)
|
||||
|
36
fahrzeug.py
Normal file
@ -0,0 +1,36 @@
|
||||
import pygame
|
||||
import math
|
||||
|
||||
|
||||
def get_angle(p1, p2):
|
||||
dx = p2[0] - p1[0]
|
||||
dy = p2[1] - p1[1]
|
||||
rads = math.atan2(-dy, dx)
|
||||
rads %= 2 * math.pi
|
||||
degs = math.degrees(rads)
|
||||
return degs
|
||||
|
||||
|
||||
class Fahrzeug(pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
super().__init__()
|
||||
self.speed = 1
|
||||
self.dest_x = x
|
||||
self.dest_y = y
|
||||
self.direction = pygame.math.Vector2(0, -1)
|
||||
self.angle = 0
|
||||
self.Tank = 250
|
||||
|
||||
def update(self):
|
||||
self.move()
|
||||
|
||||
if self.rect.centerx != self.dest_x or self.rect.centery != self.dest_y:
|
||||
if self.Tank > 0:
|
||||
self.Tank -= 0.1
|
||||
self.angle = get_angle((self.rect.centerx, self.rect.centery), (self.dest_x, self.dest_y)) - 90
|
||||
|
||||
def move(self):
|
||||
pass
|
||||
|
||||
def dest(self, pos):
|
||||
self.dest_x, self.dest_y = pos
|
126
game.py
@ -1,31 +1,33 @@
|
||||
import pygame
|
||||
|
||||
import background
|
||||
import player
|
||||
import helicopter
|
||||
import object
|
||||
import game_over
|
||||
import win_screen
|
||||
import tilemap
|
||||
import sys
|
||||
|
||||
|
||||
def start():
|
||||
pygame.init()
|
||||
win = pygame.display.set_mode((800, 800))
|
||||
player1 = player.Player(0, 0)
|
||||
Erzmine = background.Erz()
|
||||
Tanken = background.Tank()
|
||||
Ziele = background.Ziel()
|
||||
player1 = player.Player(500, 500)
|
||||
enemy = helicopter.Helicopter(50, 50)
|
||||
erzmine = object.Erz(600, 40)
|
||||
tanken = object.Tank(200, 220)
|
||||
ziele = object.Ziel(600, 750)
|
||||
gameover = ''
|
||||
go_screen = game_over.GameOver()
|
||||
w_screen = win_screen.WinScreen()
|
||||
debug = False
|
||||
ziel_erz = 0
|
||||
|
||||
tile_set = pygame.image.load("resources/roads2W.png").convert_alpha()
|
||||
|
||||
# Farben
|
||||
white = (255, 255, 255)
|
||||
blue = (0, 0, 255)
|
||||
|
||||
# Tilemap
|
||||
tile_size = 16
|
||||
map_width = 200
|
||||
map_height = 200
|
||||
tilemap = [[0 for y in range(map_height)] for x in range(map_width)]
|
||||
|
||||
for x in range(map_width):
|
||||
for y in range(map_height):
|
||||
tilemap[x][y] = 1
|
||||
|
||||
while True:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
@ -34,25 +36,87 @@ def start():
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
player1.dest(pygame.mouse.get_pos())
|
||||
|
||||
# Hintergrundfarbe
|
||||
win.fill(white)
|
||||
if player1.rect.colliderect(tanken.rect):
|
||||
if player1.Tank < 250:
|
||||
player1.Tank += 0.5
|
||||
|
||||
# Tilemap zeichnen
|
||||
for x in range(map_width):
|
||||
for y in range(map_height):
|
||||
if tilemap[x][y] == 1:
|
||||
pygame.draw.rect(win, blue, (x * tile_size, y * tile_size, tile_size, tile_size))
|
||||
if player1.rect.colliderect(enemy.rect):
|
||||
if player1.Erz > 0:
|
||||
player1.Erz -= 1
|
||||
|
||||
Erzmine.update()
|
||||
Erzmine.draw(win)
|
||||
if player1.rect.colliderect(erzmine.rect):
|
||||
player1.Erz += 1
|
||||
|
||||
Tanken.update()
|
||||
Tanken.draw(win)
|
||||
if player1.rect.colliderect(ziele.rect):
|
||||
if player1.Erz >= 1:
|
||||
player1.Erz -= 1
|
||||
ziel_erz += 1
|
||||
|
||||
Ziele.update()
|
||||
Ziele.draw(win)
|
||||
if ziel_erz >= 1000:
|
||||
gameover = 'win'
|
||||
|
||||
player1.update()
|
||||
player1.draw(win)
|
||||
if not gameover:
|
||||
# Hintergrundfarbe
|
||||
win.fill(white)
|
||||
tile = tilemap.tilemap()
|
||||
# Tilemap
|
||||
tile_size = tile.tilesize
|
||||
# Schleife durch das Tilemap-Array
|
||||
for y in range(len(tile.map_array)):
|
||||
for x in range(len(tile.map_array[y])):
|
||||
# Überprüfen, ob der Wert in der aktuellen Zelle gleich 0 ist
|
||||
if tile.map_array[y][x] == 0:
|
||||
win.blit(tile.road_quer, (x * tile_size, y * tile_size))
|
||||
if tile.map_array[y][x] == 1:
|
||||
win.blit(tile.road_senkrecht, (x * tile_size, y * tile_size))
|
||||
if tile.map_array[y][x] == 2:
|
||||
win.blit(tile.road_btr, (x * tile_size, y * tile_size))
|
||||
if tile.map_array[y][x] == 3:
|
||||
win.blit(tile.road_tbr, (x * tile_size, y * tile_size))
|
||||
|
||||
erzmine.update()
|
||||
erzmine.draw(win)
|
||||
|
||||
tanken.update()
|
||||
tanken.draw(win)
|
||||
|
||||
ziele.update()
|
||||
ziele.draw(win)
|
||||
|
||||
player1.update()
|
||||
player1.draw(win)
|
||||
|
||||
enemy.update(player1)
|
||||
enemy.dest((player1.rect.centerx, player1.rect.centery))
|
||||
enemy.draw(win)
|
||||
|
||||
# Game UI--------------------------------
|
||||
font = pygame.font.SysFont(None, 24)
|
||||
tank_label = font.render('Tank: ' + str(round(player1.Tank, 2)), True, white)
|
||||
win.blit(tank_label, (20, 20))
|
||||
font = pygame.font.SysFont(None, 24)
|
||||
tank_label = font.render('Erz: ' + str(round(player1.Erz, 0)), True, white)
|
||||
win.blit(tank_label, (20, 40))
|
||||
|
||||
# debug ausgabe
|
||||
# ---------------------------
|
||||
if debug:
|
||||
debug_selfrect = font.render(
|
||||
'self centerx: ' + str(player1.rect.centerx) + ' self centery: ' + str(player1.rect.centery), True,
|
||||
white)
|
||||
win.blit(debug_selfrect, (20, 60))
|
||||
|
||||
debug_selfrect = font.render('dest x: ' + str(player1.dest_x) + ' dest y: ' + str(player1.dest_y), True,
|
||||
white)
|
||||
win.blit(debug_selfrect, (20, 80))
|
||||
# ---------------------------
|
||||
# ----------------------------------------
|
||||
else:
|
||||
if gameover == 'win':
|
||||
w_screen.draw(win)
|
||||
pass
|
||||
if gameover == 'gameover':
|
||||
go_screen.draw(win)
|
||||
pass
|
||||
|
||||
pygame.display.update()
|
49
game_over.py
Normal file
@ -0,0 +1,49 @@
|
||||
import pygame
|
||||
import game
|
||||
import sys
|
||||
|
||||
|
||||
class GameOver(pygame.sprite.Sprite):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.label = pygame.font.SysFont("Arial", 50).render("Game Over", True, (255, 0, 0))
|
||||
self.rect = self.label.get_rect(center=(400, 300))
|
||||
|
||||
def draw(self, win):
|
||||
win.fill((0, 0, 0)) # Black
|
||||
win.blit(self.label, self.rect)
|
||||
|
||||
self.start_quit(win)
|
||||
|
||||
@staticmethod
|
||||
def start_quit(win):
|
||||
# Rechtecke
|
||||
start_button = pygame.Rect(200, 400, 100, 50)
|
||||
quit_button = pygame.Rect(500, 400, 120, 50)
|
||||
# Schriftart
|
||||
font = pygame.font.Font(None, 32)
|
||||
# Text
|
||||
start_text = font.render("Start", True, (0, 0, 0))
|
||||
quit_text = font.render("Beenden", True, (0, 0, 0))
|
||||
# Buttons zeichnen
|
||||
pygame.draw.rect(win, (100, 100, 100), start_button)
|
||||
win.blit(start_text, (start_button.x + 25, start_button.y + 10))
|
||||
pygame.draw.rect(win, (100, 100, 100), quit_button)
|
||||
win.blit(quit_text, (quit_button.x + 10, quit_button.y + 10))
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
mouse_pos = event.pos
|
||||
|
||||
# Start-Button
|
||||
if start_button.collidepoint(mouse_pos) or \
|
||||
start_text.get_rect(center=(start_button.x + 50, start_button.y + 25)).collidepoint(mouse_pos):
|
||||
game.start()
|
||||
|
||||
# Beenden-Button
|
||||
if quit_button.collidepoint(mouse_pos) or \
|
||||
quit_text.get_rect(center=(quit_button.x + 60, quit_button.y + 25)).collidepoint(mouse_pos):
|
||||
pygame.quit()
|
||||
sys.exit()
|
75
helicopter.py
Normal file
@ -0,0 +1,75 @@
|
||||
import pygame
|
||||
import player
|
||||
import rotor
|
||||
from fahrzeug import Fahrzeug, get_angle
|
||||
import time
|
||||
|
||||
|
||||
class Helicopter(Fahrzeug, pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
super().__init__(x, y)
|
||||
self.image = pygame.image.load("resources/helicopter.jpg").convert_alpha()
|
||||
self.image = self.image.subsurface(44, 0, 44, 99)
|
||||
self.image = pygame.transform.scale(self.image, (self.image.get_width() * 1.2, self.image.get_height() * 1.2))
|
||||
self.rect = self.image.get_rect(center=(x, y))
|
||||
self.rect.centerx = x
|
||||
self.rect.centery = y
|
||||
self.rotor = rotor.Rotor(self.rect.centerx, self.rect.centery)
|
||||
self.dest_x = x
|
||||
self.dest_y = y
|
||||
self.rect = self.image.get_rect()
|
||||
self.angle = 0
|
||||
self.speed = 1
|
||||
self.duration_speed = 0.02
|
||||
self.start_time = time.time()
|
||||
self.debug = False
|
||||
|
||||
def update(self, player):
|
||||
keys = pygame.key.get_pressed()
|
||||
if keys[pygame.K_a]:
|
||||
self.rect.centerx -= self.speed
|
||||
self.dest_x -= self.speed
|
||||
self.angle = 90
|
||||
if keys[pygame.K_d]:
|
||||
self.rect.centerx += self.speed
|
||||
self.dest_x += self.speed
|
||||
self.angle = 270
|
||||
if keys[pygame.K_w]:
|
||||
self.rect.centery -= self.speed
|
||||
self.dest_y -= self.speed
|
||||
self.angle = 0
|
||||
if keys[pygame.K_s]:
|
||||
self.rect.centery += self.speed
|
||||
self.dest_y += self.speed
|
||||
self.angle = 180
|
||||
|
||||
elapsed_time = time.time() - self.start_time
|
||||
if elapsed_time >= self.duration_speed:
|
||||
if self.rect.centerx < player.rect.centerx:
|
||||
self.rect.centerx += self.speed
|
||||
if self.rect.centery < player.rect.centery:
|
||||
self.rect.centery += self.speed
|
||||
if self.rect.centerx > player.rect.centerx:
|
||||
self.rect.centerx -= self.speed
|
||||
if self.rect.centery > player.rect.centery:
|
||||
self.rect.centery -= self.speed
|
||||
self.start_time = time.time()
|
||||
|
||||
if self.rect.centerx != self.dest_x or self.rect.centery != self.dest_y:
|
||||
if self.Tank > 0:
|
||||
self.Tank -= 0.1
|
||||
self.angle = get_angle((self.rect.centerx, self.rect.centery), (self.dest_x, self.dest_y)) - 90
|
||||
|
||||
self.rotor.update(self)
|
||||
|
||||
def draw(self, win):
|
||||
rotated_image = pygame.transform.rotate(self.image, self.angle)
|
||||
rotated_rect = rotated_image.get_rect(center=self.rect.center)
|
||||
|
||||
# debug nicht anrühren
|
||||
# self.angle += 1
|
||||
if self.debug:
|
||||
pygame.draw.rect(win, (0, 255, 0), self.rect)
|
||||
win.blit(rotated_image, rotated_rect)
|
||||
|
||||
self.rotor.draw(win)
|
28
jenkinsfile
Normal file
@ -0,0 +1,28 @@
|
||||
pipeline {
|
||||
agent {
|
||||
label 'python' // Uses the Jenkins agent with the label 'python'
|
||||
}
|
||||
stages {
|
||||
stage('Build') {
|
||||
steps {
|
||||
bat """
|
||||
@echo off
|
||||
rem Set the path to the workspace directory
|
||||
cd C:/Program Files/jenkins-agent/workspace/TS
|
||||
|
||||
rem Delete the "dist" folder if it exists
|
||||
if exist dist rmdir /s /q dist
|
||||
|
||||
rem Use PyInstaller to compile the Python application into a single executable file
|
||||
python -m PyInstaller --onefile main.py
|
||||
|
||||
rem Move the "resources" folder into the "dist" folder
|
||||
move resources dist
|
||||
|
||||
rem Output a success message
|
||||
echo Resources folder was successfully moved to the dist folder.
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
8
main.py
@ -14,7 +14,7 @@ gray = (128, 128, 128)
|
||||
|
||||
# Rechtecke
|
||||
start_button = pygame.Rect(100, 100, 100, 50)
|
||||
quit_button = pygame.Rect(300, 100, 100, 50)
|
||||
quit_button = pygame.Rect(300, 100, 120, 50)
|
||||
|
||||
# Schriftart
|
||||
font = pygame.font.Font(None, 32)
|
||||
@ -32,11 +32,13 @@ while True:
|
||||
mouse_pos = event.pos
|
||||
|
||||
# Start-Button
|
||||
if start_button.collidepoint(mouse_pos):
|
||||
if start_button.collidepoint(mouse_pos) or \
|
||||
start_text.get_rect(center=(start_button.x + 50, start_button.y + 25)).collidepoint(mouse_pos):
|
||||
game.start()
|
||||
|
||||
# Beenden-Button
|
||||
if quit_button.collidepoint(mouse_pos):
|
||||
if quit_button.collidepoint(mouse_pos) or \
|
||||
quit_text.get_rect(center=(quit_button.x + 60, quit_button.y + 25)).collidepoint(mouse_pos):
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
|
||||
|
57
object.py
Normal file
@ -0,0 +1,57 @@
|
||||
import pygame
|
||||
|
||||
# Farbe Weiß
|
||||
WHITE = (255, 255, 255)
|
||||
|
||||
|
||||
class Erz(pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("resources/Erzmine.png").convert_alpha()
|
||||
self.scaled_image = pygame.transform.scale(self.image, (self.image.get_width() / 2, self.image.get_height() / 2))
|
||||
self.rect = self.scaled_image.get_rect(center=(x, y))
|
||||
self.rect.centerx = x
|
||||
self.rect.centery = y
|
||||
self.debug = False
|
||||
|
||||
def draw(self, win):
|
||||
if self.debug:
|
||||
pygame.draw.rect(win, (255, 0, 0), self.rect)
|
||||
win.blit(self.scaled_image, self.rect)
|
||||
|
||||
|
||||
|
||||
class Tank(pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("resources/Tank.jpg").convert_alpha()
|
||||
self.scaled_image = pygame.transform.scale(self.image, (self.image.get_width() / 20, self.image.get_height() / 20))
|
||||
self.rect = self.scaled_image.get_rect(center=(x, y))
|
||||
self.rect.centerx = x
|
||||
self.rect.centery = y
|
||||
self.debug = False
|
||||
|
||||
def draw(self, win):
|
||||
if self.debug:
|
||||
pygame.draw.rect(win, (255, 0, 0), self.rect)
|
||||
win.blit(self.scaled_image, self.rect)
|
||||
|
||||
|
||||
|
||||
|
||||
class Ziel(pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("resources/Ziel.jpg").convert_alpha()
|
||||
self.scaled_image = pygame.transform.scale(self.image, (self.image.get_width() / 3, self.image.get_height() / 3))
|
||||
self.rect = self.scaled_image.get_rect(center=(x, y))
|
||||
self.rect.centerx = x
|
||||
self.rect.centery = y
|
||||
self.debug = False
|
||||
|
||||
def draw(self, win):
|
||||
if self.debug:
|
||||
pygame.draw.rect(win, (255, 0, 0), self.rect)
|
||||
win.blit(self.scaled_image, self.rect)
|
||||
|
||||
|
85
player.py
@ -1,36 +1,73 @@
|
||||
import pygame
|
||||
import math
|
||||
from fahrzeug import Fahrzeug
|
||||
|
||||
class Player(pygame.sprite.Sprite):
|
||||
|
||||
class Player(Fahrzeug, pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("player.png").convert_alpha()
|
||||
self.rect = self.image.get_rect()
|
||||
self.rect.x = x
|
||||
self.rect.y = y
|
||||
self.speed = 2
|
||||
super().__init__(x, y)
|
||||
self.image = pygame.image.load("resources/player.png").convert_alpha()
|
||||
self.image = pygame.transform.scale(self.image, (self.image.get_width() / 1.2, self.image.get_height() / 1.2))
|
||||
self.rect = self.image.get_rect(center=(x, y))
|
||||
self.rect.centerx = x
|
||||
self.rect.centery = y
|
||||
self.speed = 1
|
||||
self.dest_x = x
|
||||
self.dest_y = y
|
||||
self.direction = pygame.math.Vector2(1, 0)
|
||||
self.direction = pygame.math.Vector2(0, -1)
|
||||
self.angle = 0
|
||||
self.Tank = 250
|
||||
self.Erz = 0
|
||||
self.debug = False
|
||||
self.b_move = False
|
||||
|
||||
def draw(self, win):
|
||||
win.blit(self.image, self.rect)
|
||||
rotated_image = pygame.transform.rotate(self.image, self.angle)
|
||||
rotated_rect = rotated_image.get_rect(center=self.rect.center)
|
||||
|
||||
def update(self):
|
||||
if self.rect.x < self.dest_x:
|
||||
self.rect.x += self.speed
|
||||
if self.rect.x > self.dest_x:
|
||||
self.rect.x -= self.speed
|
||||
if self.rect.y < self.dest_y:
|
||||
self.rect.y += self.speed
|
||||
if self.rect.y > self.dest_y:
|
||||
self.rect.y -= self.speed
|
||||
# debug, nicht anrühren
|
||||
# self.angle += 1
|
||||
if self.debug:
|
||||
pygame.draw.rect(win, (255, 0, 0), rotated_rect)
|
||||
|
||||
direction = pygame.math.Vector2(self.dest_x - self.rect.centerx, self.dest_y - self.rect.centery)
|
||||
#angle = -math.degrees(math.atan2(direction.y, direction.x))
|
||||
#self.image = pygame.transform.rotate(self.image, angle)
|
||||
self.rect = self.image.get_rect(center=self.rect.center)
|
||||
self.direction = direction.normalize()
|
||||
win.blit(rotated_image, rotated_rect)
|
||||
|
||||
def move(self):
|
||||
if self.Tank > 0:
|
||||
if self.rect.centerx < self.dest_x:
|
||||
self.rect.centerx += self.speed
|
||||
if self.rect.centerx > self.dest_x:
|
||||
self.rect.centerx -= self.speed
|
||||
if self.rect.centery < self.dest_y:
|
||||
self.rect.centery += self.speed
|
||||
if self.rect.centery > self.dest_y:
|
||||
self.rect.centery -= self.speed
|
||||
|
||||
#bug wenn beide methoden zeitgleich benutzt werden
|
||||
|
||||
self.b_move = False
|
||||
keys = pygame.key.get_pressed()
|
||||
if keys[pygame.K_LEFT]:
|
||||
self.rect.centerx -= self.speed
|
||||
self.dest_x -= self.speed
|
||||
self.angle = 90
|
||||
self.b_move = True
|
||||
if keys[pygame.K_RIGHT]:
|
||||
self.rect.centerx += self.speed
|
||||
self.dest_x += self.speed
|
||||
self.angle = 270
|
||||
self.b_move = True
|
||||
if keys[pygame.K_UP]:
|
||||
self.rect.centery -= self.speed
|
||||
self.dest_y -= self.speed
|
||||
self.angle = 0
|
||||
self.b_move = True
|
||||
if keys[pygame.K_DOWN]:
|
||||
self.rect.centery += self.speed
|
||||
self.dest_y += self.speed
|
||||
self.angle = 180
|
||||
self.b_move = True
|
||||
if self.b_move:
|
||||
self.Tank -= 0.1
|
||||
|
||||
def dest(self, pos):
|
||||
self.dest_x, self.dest_y = pos
|
BIN
resources/Erzmine.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
resources/Tank.jpg
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
resources/Ziel.jpg
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
resources/helicopter.jpg
Normal file
After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
resources/roads2W.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
32
rotor.py
Normal file
@ -0,0 +1,32 @@
|
||||
import pygame
|
||||
import helicopter
|
||||
from fahrzeug import Fahrzeug
|
||||
|
||||
class Rotor(Fahrzeug, pygame.sprite.Sprite):
|
||||
def __init__(self, x, y):
|
||||
super().__init__(x, y)
|
||||
self.image = pygame.image.load("resources/helicopter.jpg").convert_alpha()
|
||||
self.image = self.image.subsurface(132, 98, 94, 94)
|
||||
self.rect = self.image.get_rect(center=(x, y))
|
||||
|
||||
|
||||
def update(self, helicopter):
|
||||
self.rect.center = helicopter.rect.center
|
||||
if helicopter.angle == 0:
|
||||
self.rect.centery -= 10
|
||||
if helicopter.angle == 90:
|
||||
self.rect.centerx -= 10
|
||||
if helicopter.angle == 180:
|
||||
self.rect.centery += 10
|
||||
if helicopter.angle == 270:
|
||||
self.rect.centerx += 10
|
||||
|
||||
def draw(self, win):
|
||||
rotated_image = pygame.transform.rotate(self.image, self.angle)
|
||||
rotated_rect = rotated_image.get_rect(center=self.rect.center)
|
||||
|
||||
#debug, nicht anrühren
|
||||
self.angle += 1
|
||||
#pygame.draw.rect(win, (255, 0, 0), rotated_rect)
|
||||
|
||||
win.blit(rotated_image, rotated_rect)
|
18
tilemap.py
Normal file
@ -0,0 +1,18 @@
|
||||
import pygame
|
||||
class tilemap(pygame.sprite.Sprite):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.image = pygame.image.load("resources/roads2W.png").convert_alpha()
|
||||
self.scaled_image = pygame.transform.scale(self.image, (self.image.get_width()*4, self.image.get_height()*4))
|
||||
self.rect = self.image.get_rect()
|
||||
self.rect = 0, 0
|
||||
self.tilesize = self.scaled_image.get_width()/8
|
||||
self.road_quer = self.scaled_image.subsurface((self.scaled_image.get_width()/8)*2, 0, self.scaled_image.get_height()/3, self.scaled_image.get_width()/8)
|
||||
self.road_senkrecht = self.scaled_image.subsurface((self.scaled_image.get_width()/8)*3, 0, self.scaled_image.get_height()/3, self.scaled_image.get_width()/8)
|
||||
self.road_btr = self.scaled_image.subsurface((self.scaled_image.get_width()/8)*0, (self.scaled_image.get_height()/3)*1, self.scaled_image.get_height()/3, self.scaled_image.get_width()/8)
|
||||
self.road_tbr = pygame.transform.flip(self.scaled_image.subsurface((self.scaled_image.get_width()/8)*2, (self.scaled_image.get_height()/3)*1, self.scaled_image.get_height()/3, self.scaled_image.get_width()/8), True, False)
|
||||
self.map_array = [[2, 0, 0, 0, 0],
|
||||
[1, 0, 0, 0, 0],
|
||||
[3, 0, 0, 0, 0],
|
||||
[1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0]]
|
48
win_screen.py
Normal file
@ -0,0 +1,48 @@
|
||||
import pygame
|
||||
import sys
|
||||
|
||||
|
||||
class WinScreen(pygame.sprite.Sprite):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.label = pygame.font.SysFont("Arial", 50).render("Win", True, (255, 0, 0))
|
||||
self.rect = self.label.get_rect(center=(400, 300))
|
||||
|
||||
def draw(self, win):
|
||||
win.fill((0, 0, 0)) # Black
|
||||
win.blit(self.label, self.rect)
|
||||
|
||||
self.start_quit(win)
|
||||
|
||||
@staticmethod
|
||||
def start_quit(win):
|
||||
# Rechtecke
|
||||
start_button = pygame.Rect(200, 400, 100, 50)
|
||||
quit_button = pygame.Rect(500, 400, 120, 50)
|
||||
# Schriftart
|
||||
font = pygame.font.Font(None, 32)
|
||||
# Text
|
||||
start_text = font.render("Start", True, (0, 0, 0))
|
||||
quit_text = font.render("Beenden", True, (0, 0, 0))
|
||||
# Buttons zeichnen
|
||||
pygame.draw.rect(win, (100, 100, 100), start_button)
|
||||
win.blit(start_text, (start_button.x + 25, start_button.y + 10))
|
||||
pygame.draw.rect(win, (100, 100, 100), quit_button)
|
||||
win.blit(quit_text, (quit_button.x + 10, quit_button.y + 10))
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
mouse_pos = event.pos
|
||||
|
||||
# Start-Button
|
||||
if start_button.collidepoint(mouse_pos) or \
|
||||
start_text.get_rect(center=(start_button.x + 50, start_button.y + 25)).collidepoint(mouse_pos):
|
||||
game.start()
|
||||
|
||||
# Beenden-Button
|
||||
if quit_button.collidepoint(mouse_pos) or \
|
||||
quit_text.get_rect(center=(quit_button.x + 60, quit_button.y + 25)).collidepoint(mouse_pos):
|
||||
pygame.quit()
|
||||
sys.exit()
|