Compare commits

...

67 Commits

Author SHA1 Message Date
d57c16ceea „README.md“ ändern 2023-06-27 14:05:26 +02:00
Yadciel
62bd1bd253 undo 2023-05-12 12:18:49 +02:00
Yadciel
27d545326e _ 2023-05-12 12:14:52 +02:00
Yadciel
5fb1308bd6 release? 2023-05-12 12:09:57 +02:00
Yadciel
207fd7e7ca undo 2023-05-11 20:13:41 +02:00
Yadciel
4e84473dff _ 2023-05-11 20:11:22 +02:00
Yadciel
57111e5766 _ 2023-05-11 20:09:31 +02:00
Yadciel
47ceeca0cd _ 2023-05-11 20:04:04 +02:00
Yadciel
cbece676a6 SQ fix? 2023-05-11 19:58:57 +02:00
Yadciel
63044ece48 SQ work? 2023-05-11 19:55:14 +02:00
Yadciel
6042fa2fac SQ 2023-05-11 19:53:46 +02:00
Yadciel
fe911b62bd SQ steps 2023-05-11 19:51:16 +02:00
Yadciel
63f2b48b96 SQ 2023-05-11 19:49:20 +02:00
Yadciel
b692082203 SQ 2023-05-11 19:43:35 +02:00
Yadciel
62e4655056 SQ 2023-05-11 19:41:32 +02:00
Yadciel
73182e90b9 _ 2023-05-11 17:35:29 +02:00
Yadciel
b0b449cef0 Anpassung Readme 2023-05-08 22:33:23 +02:00
Yadciel
b3f15d46e7 sys added 2023-05-08 22:25:18 +02:00
Yadciel
b70ebb007f win game,pre-release, alpha 2023-05-08 22:11:59 +02:00
eb547c65b7 „README.md“ ändern 2023-05-08 08:49:15 +02:00
Yadciel
deb66dd64e fix 2023-04-29 16:00:27 +02:00
Yadciel
5c5efb40b4 release ordner 2023-04-28 11:53:21 +02:00
Yadciel
12f8a02d64 base_game complete 2023-04-28 10:30:51 +02:00
Yadciel
ad2a0b8209 delete 2023-04-27 14:37:18 +02:00
Yadciel
250920f8ca .idea 2023-04-27 14:34:02 +02:00
Yadciel
93aa628943 ignore .idea 2023-04-27 14:32:12 +02:00
Yadciel
535258e76a ignore idea 2023-04-27 14:31:07 +02:00
Yadciel
3fc03445e5 UI anpassung und Readme 2023-04-27 14:28:31 +02:00
Yadciel
c6a1b1c038 exit code 0 2023-04-27 13:30:17 +02:00
Yadciel
e83dec026a loop, death, start 2023-04-27 13:21:11 +02:00
Yadciel
e08074c22e j 2023-04-27 10:10:20 +02:00
Yadciel
47d8af9953 fix 2023-04-27 09:59:58 +02:00
Yadciel
5dcd723dba fix dist ordner 2023-04-27 09:58:50 +02:00
Yadciel
7324c4374c jenkins 2023-04-27 09:53:48 +02:00
Yadciel
b4981edd2b runas 2023-04-27 09:47:26 +02:00
Yadciel
97ac3c46ad jenkinsfix 2023-04-27 09:45:45 +02:00
Yadciel
10a691d4c3 fix 2023-04-26 11:03:27 +02:00
Yadciel
2588a87a24 fix label python 2023-04-26 10:59:56 +02:00
Yadciel
9595305c20 test 2 2023-04-26 10:44:59 +02:00
Yadciel
5ca7323cb2 test 2023-04-26 10:44:33 +02:00
Yadciel
73efb26db2 update 2023-04-26 10:31:29 +02:00
Yadciel
442d5f14c6 jenkinsfile 2023-04-26 10:22:59 +02:00
Yadciel
46c25b99ef test 2023-04-25 21:57:58 +02:00
Yadciel
cf2f5bb9da test 2023-04-25 15:30:11 +02:00
Yadciel
196e16b404 fix 2023-04-25 09:07:44 +02:00
Yadciel
f5537d0644 objects 2023-04-25 08:30:43 +02:00
Yadciel
cad6758f1c Helicopter angle,movement size changes 2023-04-24 13:50:48 +02:00
Yadciel
bb5a1b03d6 test2 2023-04-24 09:04:16 +02:00
Yadciel
7daecb7dad test2 2023-04-22 23:42:58 +02:00
Yadciel
1cbc1e5bce test 2023-04-22 22:51:10 +02:00
Yadciel
2fb0243117 test 2023-04-22 22:45:47 +02:00
Yadciel
e32280cfc5 resources 2023-04-22 22:43:27 +02:00
Yadciel
d705971a16 resources 2023-04-22 12:45:53 +02:00
Yadciel
032229a115 Helicopter, player, Fahrzeug, Ableitung 2023-04-20 09:08:35 +02:00
Yadciel
5a5550b29b movement, und tilemap 2023-04-19 12:23:30 +02:00
Yadciel
d964caf807 map, tilemap 2023-04-19 10:59:13 +02:00
Yadciel
15b3fd2046 Winkel, Tank, Debug 2023-04-19 08:59:00 +02:00
Yadciel
618348294c img und tank 2023-04-14 12:31:54 +02:00
Faruk Acar
6d5790c1e0 bild 2023-03-31 13:05:13 +02:00
Faruk Acar
bb17938ab5 bilder 2023-03-31 13:02:04 +02:00
09b34d1dbd Merge pull request 'Fahrzeug' (#2) from Fahrzeug into main
Reviewed-on: http://192.168.2.198:3000/Yadciel/LF08/pulls/2
2023-03-31 12:47:08 +02:00
Yadciel
ebfa3ca1da debug 2023-03-31 12:42:36 +02:00
Yadciel
322f808f38 Merge remote-tracking branch 'LF08/Fahrzeug' into Fahrzeug 2023-03-31 12:38:17 +02:00
Yadciel
89f820f1f7 Fahrzeug 2023-03-31 12:37:20 +02:00
Yadciel
f4fa36e941 Fahrzeug 2023-03-31 12:33:56 +02:00
76694f3407 Merge pull request 'Erz,Tank,Ziel' (#1) from Lf8 into main
Reviewed-on: http://192.168.2.198:3000/Yadciel/LF08/pulls/1
2023-03-31 12:15:08 +02:00
Faruk Acar
315e3764d1 Erz,Tank,Ziel 2023-03-31 12:13:48 +02:00
23 changed files with 543 additions and 83 deletions

6
.gitignore vendored
View File

@@ -1,6 +1,2 @@
__pycache__/
.idea/misc.xml
.idea/TruckSimulator.iml
.idea/

8
.idea/.gitignore generated vendored
View File

@@ -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

View File

@@ -1,6 +0,0 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

8
.idea/modules.xml generated
View File

@@ -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>

6
.idea/vcs.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@@ -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.

36
fahrzeug.py Normal file
View 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

120
game.py
View File

@@ -1,26 +1,33 @@
import pygame
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)
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:
@@ -29,16 +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
player1.update()
player1.draw(win)
if player1.rect.colliderect(erzmine.rect):
player1.Erz += 1
pygame.display.update()
if player1.rect.colliderect(ziele.rect):
if player1.Erz >= 1:
player1.Erz -= 1
ziel_erz += 1
if ziel_erz >= 1000:
gameover = '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
View 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
View 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
View 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.
"""
}
}
}
}

11
main.py
View File

@@ -5,6 +5,8 @@ import game
pygame.init()
win = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
# Farben
white = (255, 255, 255)
black = (0, 0, 0)
@@ -12,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)
@@ -30,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()
@@ -48,4 +52,5 @@ while True:
pygame.draw.rect(win, gray, quit_button)
win.blit(quit_text, (quit_button.x + 10, quit_button.y + 10))
clock.tick(60)
pygame.display.update()

57
object.py Normal file
View 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)

View File

@@ -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
self.dest_x, self.dest_y = pos

BIN
resources/Erzmine.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
resources/Tank.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
resources/Ziel.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
resources/helicopter.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
resources/roads2W.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

32
rotor.py Normal file
View 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
View 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
View 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()