Compare commits

..

67 Commits

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