Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
156 commits
Select commit Hold shift + click to select a range
c5a7ff7
added main file
TamerAnefiev Jul 19, 2023
2704b31
Dir structure Update
karastoyanov Jul 19, 2023
d6ebb9e
Dir Structure Update
karastoyanov Jul 19, 2023
33612a4
added base plane image
TamerAnefiev Jul 20, 2023
0dd46fd
init
TamerAnefiev Jul 20, 2023
17b8c92
added test file for movements and fps
TamerAnefiev Jul 20, 2023
164c147
project structure update
karastoyanov Jul 20, 2023
7c0843d
updated the path of the image
TamerAnefiev Jul 20, 2023
862bdb8
init
TamerAnefiev Jul 20, 2023
d3cc584
Main Menu created
karastoyanov Jul 20, 2023
27ac806
main menu update
karastoyanov Jul 20, 2023
d52d718
init
TamerAnefiev Jul 20, 2023
5f4f160
Merge remote-tracking branch 'origin/development' into development
TamerAnefiev Jul 20, 2023
d257f0a
added unfinished abstract plane
TamerAnefiev Jul 20, 2023
2b36106
Added a plane_menu and the functionality for "Start Game"
rayapetkova Jul 20, 2023
4b82d33
major update:
karastoyanov Jul 21, 2023
3b1c3c8
images and sounds added
karastoyanov Jul 21, 2023
035c1f2
Update
rayapetkova Jul 21, 2023
a703fa8
Merge branch 'development' of https://github.com/Stake-And-Rope/py-pl…
rayapetkova Jul 21, 2023
32f025a
separate effect for planes buttons
karastoyanov Jul 21, 2023
cab9473
Minor Changes
karastoyanov Jul 21, 2023
14d680b
gitignore update
karastoyanov Jul 21, 2023
912cc92
Update
rayapetkova Jul 21, 2023
d3d83ea
Made two new layouts, stylesheet changed
rayapetkova Jul 23, 2023
f8bbddc
background images added
karastoyanov Jul 24, 2023
edb0444
added json handler class for the user settings
TamerAnefiev Jul 24, 2023
2c21e95
updated the structure of the file and renamed the file
TamerAnefiev Jul 24, 2023
06ebbd9
Merge branch 'development' of https://github.com/Stake-And-Rope/py-pl…
TamerAnefiev Jul 24, 2023
f6b7d86
added helpers
TamerAnefiev Jul 24, 2023
e5bf63d
added convert_alpha to the loaded image
TamerAnefiev Jul 24, 2023
850b9f7
made greenPlane class
TamerAnefiev Jul 24, 2023
3210db8
deleted old file
TamerAnefiev Jul 24, 2023
036d339
new images
karastoyanov Jul 24, 2023
b9bbcc4
Merge branch 'development' of github.com:Stake-And-Rope/py-planes int…
karastoyanov Jul 24, 2023
17be033
exec rules mod
karastoyanov Jul 24, 2023
b53c915
new images added
karastoyanov Jul 24, 2023
8425cdc
qss fixed
karastoyanov Jul 24, 2023
64c1736
Added a functionality for changing the QGroupBox when needed
rayapetkova Jul 25, 2023
7660585
json settings added
karastoyanov Jul 25, 2023
ee0266d
settings menu reworked
karastoyanov Jul 25, 2023
5ee755b
username textbox added in settings file
karastoyanov Jul 25, 2023
edded74
update
TamerAnefiev Jul 25, 2023
d12b8c2
update
TamerAnefiev Jul 25, 2023
da5c207
Merge branch 'development' of https://github.com/Stake-And-Rope/py-pl…
TamerAnefiev Jul 25, 2023
742fb1e
Merge branch 'development' of github.com:Stake-And-Rope/py-planes int…
karastoyanov Jul 25, 2023
f5fd62c
test
TamerAnefiev Jul 25, 2023
7fb3700
settings file update
karastoyanov Jul 25, 2023
1fa7ecf
update with functions
TamerAnefiev Jul 25, 2023
eb7adff
Merge branch 'development' of github.com:Stake-And-Rope/py-planes int…
karastoyanov Jul 25, 2023
e78d8f7
read settings major fix
karastoyanov Jul 25, 2023
1b1cee8
read settings major fix
karastoyanov Jul 25, 2023
5e6c0ed
update
TamerAnefiev Jul 26, 2023
660a920
added functions to read and overwrite files
TamerAnefiev Jul 26, 2023
b1ce204
removed useless return
TamerAnefiev Jul 26, 2023
ed92225
settings menu reading from json
karastoyanov Jul 26, 2023
e0d876f
fixed back slash with forward slash file paths
TamerAnefiev Jul 26, 2023
482531a
Merge branch 'development' of github.com:Stake-And-Rope/py-planes int…
karastoyanov Jul 26, 2023
dd5585d
settings overwrite functionality implemented
karastoyanov Jul 26, 2023
1480ed5
main menu background added
karastoyanov Jul 26, 2023
830b37d
files relationships created
karastoyanov Jul 26, 2023
05925a5
planes dipslay info fixed
karastoyanov Jul 26, 2023
5f02595
stylesheet update
karastoyanov Jul 26, 2023
d5a04db
user bullet image
karastoyanov Jul 26, 2023
8bba884
test
TamerAnefiev Jul 26, 2023
aa51dda
update
TamerAnefiev Jul 27, 2023
b4cd991
stylesheets update
karastoyanov Jul 27, 2023
e280abf
deleted unused files
TamerAnefiev Jul 27, 2023
c27f0e0
Merge branch 'development' of https://github.com/Stake-And-Rope/py-pl…
TamerAnefiev Jul 27, 2023
5dd903f
added borders and added extra checks for the spawn point
TamerAnefiev Jul 27, 2023
65ab3fc
added three functions
TamerAnefiev Jul 27, 2023
b8c0654
added changes based on the changes of other files
TamerAnefiev Jul 27, 2023
543984a
added background loop functionality
TamerAnefiev Jul 27, 2023
7b44f73
button stylesheets applied in all qt menus
karastoyanov Jul 27, 2023
1adbbaa
settings background added
karastoyanov Jul 27, 2023
3e99cd1
added bullets logic
TamerAnefiev Jul 27, 2023
b0f14eb
added bullet class
TamerAnefiev Jul 27, 2023
a11c26f
update event loop
TamerAnefiev Jul 27, 2023
7c0e108
update middle screen property
TamerAnefiev Jul 27, 2023
1c21dfb
planes menu stylesheets update
karastoyanov Jul 27, 2023
1849232
Merge branch 'development' of github.com:Stake-And-Rope/py-planes int…
karastoyanov Jul 27, 2023
f2b4a06
README file created
karastoyanov Jul 28, 2023
7bc400b
Rename README.md.md to README.md
karastoyanov Jul 28, 2023
9dcbc87
README update
karastoyanov Jul 28, 2023
8d3feb0
README update
karastoyanov Jul 28, 2023
3c52db4
Update README.md
karastoyanov Jul 28, 2023
45b2cf4
credits menu implemented
karastoyanov Jul 29, 2023
9d6a188
added weapon locations for the bullets
TamerAnefiev Jul 29, 2023
da3e151
removed hardcoded methods
TamerAnefiev Jul 29, 2023
f9d35e4
added get bullet speed function
TamerAnefiev Jul 29, 2023
f63faf7
fixed order of imports which caused pygame display error
TamerAnefiev Jul 29, 2023
e9e7996
Merge branch 'development' of github.com:Stake-And-Rope/py-planes int…
karastoyanov Jul 29, 2023
af658a5
updated main menu music
karastoyanov Jul 29, 2023
95928f2
main menu music disabled
karastoyanov Jul 29, 2023
e3bee38
new settings info message
karastoyanov Jul 29, 2023
4fa3a84
planes menu buttons update
karastoyanov Jul 29, 2023
6d002d3
enemy bullet added
karastoyanov Jul 29, 2023
cffffc7
enemy planes rotated 180 degrees
karastoyanov Jul 29, 2023
5297cfd
updated imports
TamerAnefiev Jul 29, 2023
2a99f31
init
TamerAnefiev Jul 29, 2023
5d71079
added enemy bullet
TamerAnefiev Jul 29, 2023
b5a47f3
added user bullet
TamerAnefiev Jul 29, 2023
43200eb
updated imports
TamerAnefiev Jul 29, 2023
28fd83e
tower image added
karastoyanov Jul 29, 2023
49257ab
music settings updated
karastoyanov Jul 30, 2023
754c94f
converted to abstract class
TamerAnefiev Jul 30, 2023
db7a9ca
added enemy plane class
TamerAnefiev Jul 30, 2023
27647b9
added user plane class
TamerAnefiev Jul 30, 2023
7c482cf
changed imports
TamerAnefiev Jul 30, 2023
7307601
added rect attribute
TamerAnefiev Aug 2, 2023
20f8bc6
added abstract property and added class attributes
TamerAnefiev Aug 2, 2023
06e66e7
added random moving to left and right and increased shoot cooldown
TamerAnefiev Aug 2, 2023
0616828
overwrited get_shoot_cd property
TamerAnefiev Aug 2, 2023
19a9095
added random enemy plane X coordinates function
TamerAnefiev Aug 2, 2023
708b3e2
update so we can visually see how the enemy plane is moving
TamerAnefiev Aug 2, 2023
62f8cbd
Update health and armor bar
rayapetkova Aug 2, 2023
6ffbf50
Changed some of the attributes' names and added an if condition or th…
rayapetkova Aug 2, 2023
8e60dbc
now accepting loaded images
TamerAnefiev Aug 2, 2023
2532278
class which controls all the enemies
TamerAnefiev Aug 2, 2023
d484e26
update init
TamerAnefiev Aug 2, 2023
492fdf2
added random image getter
TamerAnefiev Aug 2, 2023
4576f32
added the enemy controller calls
TamerAnefiev Aug 2, 2023
c1b9132
added tower bullet class
TamerAnefiev Aug 4, 2023
7c730f0
deleted some abstract methods
TamerAnefiev Aug 4, 2023
06508b7
added logic for the towers
TamerAnefiev Aug 4, 2023
39076f5
update
TamerAnefiev Aug 4, 2023
4ab5789
added tower class
TamerAnefiev Aug 4, 2023
e12894a
update
TamerAnefiev Aug 4, 2023
f1b1cfa
included the logic for the tower functionallity
TamerAnefiev Aug 4, 2023
a2778c8
Logic for rects (needs to be corrected)
rayapetkova Aug 7, 2023
128bebc
Implemented a FloatRect class
rayapetkova Aug 8, 2023
48a2a2b
Bar logic
rayapetkova Aug 11, 2023
1459515
Bar logic (changed some attributes' names)
rayapetkova Aug 11, 2023
741aea1
Bar logic fixed
rayapetkova Aug 11, 2023
27ba9d3
Bars' drawing logic changed
rayapetkova Aug 12, 2023
6bdb8ff
Collision logic and masks
rayapetkova Aug 12, 2023
a967bec
added TODO comments, since i hardcoded some values
TamerAnefiev Aug 14, 2023
f31ec91
changed order of drawing
TamerAnefiev Aug 14, 2023
ab8cdcb
added two new methods and set plane stats
TamerAnefiev Aug 14, 2023
8953b1b
now creating health and armor bars on every enemy spawn. Added bar dr…
TamerAnefiev Aug 14, 2023
be4e5fd
added sticky health and armor bars
TamerAnefiev Aug 14, 2023
710eea9
added sticky health and armor bars
TamerAnefiev Aug 14, 2023
89fa061
update init/super
TamerAnefiev Aug 14, 2023
87c030c
changed color of armor bar
TamerAnefiev Aug 14, 2023
38dabbf
update
TamerAnefiev Aug 14, 2023
d019509
added logic for extra bullets powerup
TamerAnefiev Aug 18, 2023
5e28066
added extra bullets powerup
TamerAnefiev Aug 18, 2023
11c2283
added class which controls the powerups
TamerAnefiev Aug 18, 2023
8a56b60
update for the powerup
TamerAnefiev Aug 18, 2023
2be332f
armor/health bar update
karastoyanov Aug 26, 2023
0356084
Collision fix
rayapetkova Aug 27, 2023
46bc2b4
Update
rayapetkova Aug 30, 2023
02788f1
Collision update
rayapetkova Aug 31, 2023
e68307a
Collision with another enemy updated
rayapetkova Sep 3, 2023
9f843f7
New colour fills the window when there is collision between user_plan…
rayapetkova Sep 5, 2023
661b742
Update
rayapetkova Sep 10, 2023
79da8f1
When the user collides with enemy the game ends
rayapetkova Sep 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Ignore pycache
images/__pycache__/
gui/__pycache__/
game/__pycache__/
sounds/__pycache__/
__pycache__/

# Ignore VSCode config dir
.vscode/

# Ignore PyCharm dir
.idea/

# Ignore Obsidian config dir
.obsidan/

# for testing purposes
/game/test_mask_overlap.py
1 change: 1 addition & 0 deletions .obsidian/app.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
3 changes: 3 additions & 0 deletions .obsidian/appearance.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"accentColor": ""
}
29 changes: 29 additions & 0 deletions .obsidian/core-plugins-migration.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false
}
20 changes: 20 additions & 0 deletions .obsidian/core-plugins.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[
"file-explorer",
"global-search",
"switcher",
"graph",
"backlink",
"canvas",
"outgoing-link",
"tag-pane",
"page-preview",
"daily-notes",
"templates",
"note-composer",
"command-palette",
"editor-status",
"bookmarks",
"outline",
"word-count",
"file-recovery"
]
1 change: 1 addition & 0 deletions .obsidian/hotkeys.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
154 changes: 154 additions & 0 deletions .obsidian/workspace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
{
"main": {
"id": "8445fb092835941a",
"type": "split",
"children": [
{
"id": "b58397fac2efd451",
"type": "tabs",
"children": [
{
"id": "5fc49d43e2804e0c",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "README.md",
"mode": "source",
"source": false
}
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "bfdce2ad38d38eed",
"type": "split",
"children": [
{
"id": "cd9492099e21fcdd",
"type": "tabs",
"children": [
{
"id": "89f8b50f92f50073",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical"
}
}
},
{
"id": "1c18f75009cbd66d",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
}
}
},
{
"id": "eeb33e840466e5ba",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {}
}
}
]
}
],
"direction": "horizontal",
"width": 300
},
"right": {
"id": "643fe1bfd851892f",
"type": "split",
"children": [
{
"id": "619dc1d6feffe37d",
"type": "tabs",
"children": [
{
"id": "9288a5d9ca6bb612",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "README.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "271fe66f65a58a49",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"file": "README.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "3bbb82858aa2033c",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true
}
}
},
{
"id": "8abebd45c0b7f8b1",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "README.md"
}
}
}
]
}
],
"direction": "horizontal",
"width": 300,
"collapsed": true
},
"left-ribbon": {
"hiddenItems": {
"switcher:Open quick switcher": false,
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"daily-notes:Open today's daily note": false,
"templates:Insert template": false,
"command-palette:Open command palette": false
}
},
"active": "5fc49d43e2804e0c",
"lastOpenFiles": [
"README.md.md",
"README.md"
]
}
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
## About :bookmark_tabs:

Py-Planes is a Python written offline game where the player takes the control of a airplane and fight against enemies. The game consists of two separate components -> Launcher (Main Menu) written in Qt Framework and the game itself made with PyGame.

The Launcher is made with few different files, the logic is separated and there are relations between the files managing the execution of the specific menu, based on the player's actions.

The PyGame files are running the game itself, initializing the levels, the players, the enemies and the surrounding objects.

Py-Planes is executed as one game, but in the back-end are actually two separated applications running simultaneously and communicating one with another.

The user and game settings are stored in a JSON files which contents are being read and submitted to specific object in the front-end. The settings are also used for the PyGame logic giving the user's plane specific abilities as damage, health, armor, etc. and setting the game fps.

## Guideline :book:

## Tech-Stack :building_construction:

* Python 3.10 >
* [PyQt5 - Qt Framework](https://www.qt.io/product/framework) library ported for Python
* [PyGame](https://www.pygame.org/news)
* [Pixilart](https://www.pixilart.com/)
* [Git](https://git-scm.com/)
* [GitHub](https://github.com/) & [GitHub Projects](https://github.com/Stake-And-Rope/py-planes/projects?query=is%3Aopen)
* [Obisidan](https://obsidian.md/)

## Team-Project :woman_factory_worker: :factory_worker: :mechanic:

Py-Planes is a hobby-project created by students and professionals, aiming to create an environment for training and gaining new skills.

## Contributors :mechanic:

[rayapetkova](https://github.com/rayapetkova)

[kumchovylcho](https://github.com/orgs/Stake-And-Rope/people/kumchovylcho)

[karastoyanov](https://github.com/karastoyanov)

Binary file added fonts/American Captain.otf
Binary file not shown.
Binary file added fonts/American Captain.ttf
Binary file not shown.
19 changes: 19 additions & 0 deletions fonts/American Captain.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
UPDATE: American Captain is ready for BUY NOW & IMMEDIATE DOWNLOAD via secure paypal checkout.
http://thefontry.com/americancaptain

UPDATE TO LANGUAGE SUPPORT: This freeware version now includes uppercase GREEK and CYRILLIC letters.

UPDATE: American Captain is now available in commercial form as a 6-FONT FAMILY with complete character sets and language support for Central European characters, Cyrillic, Greek and Hebrew. OpenType features include: small caps, fractions, stylistic sets, glyph replacements, etc. Now back to our freebie ...

American Captain by Michael G. Adkins

So here we go with the descriptions again. To describe my new font, American Captain, the boring part of my brain tells me to use staid words like narrow and bold, sharp yet blunt, heavy and tall; but deep within the creative side of my brain, there's a smouldering nugget of inspiration that tells me this font deserves something more. Why bother to explain things you can clearly see with your own eyes, when what you might not be aware of is this font's unique origins. What you might not know is that it dates back to at least the 1940s. It's even possible you don't understand how this font has been reborn and revamped and revitalized by generations of sign-painters and hand-letterers and determined font guys like myself who just can't let this thing go.

This font represents the unparalleled strength of one man who saved an entire world from the crushing yoke of tyranny. This man was an outstanding captain of men, an American patriot of unquestionable calibre. And within this font is captured his fighting spirit, his unyielding determination. This face is dedicated to him, the captain America knows and respects, the captain America font designers like myself strive to symbolize in their work. So enjoy the power that is the font I call, American Captain.

For commercial use please feel free to contact us for price, links and details at:
the_fontry@yahoo.com

or visit the Fontry website
http://www.thefontry.com/

48 changes: 48 additions & 0 deletions fonts/PersonalUseEULA.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
You have downloaded the files for the font American Captain. The following is the personal use EULA. For commercial usage, please contact the Fontry at the_fontry@yahoo.com or visit the Fontry website http://www.thefontry.com. Look for the full version to be available in future. This and other Fontry fonts are available at Fonts.com and MyFonts.com keyword search fontry.

Thank You from the Fontry.

By downloading this file, you are agreeing to be bound by the terms of this Agreement. This Agreement constitutes the complete agreement between you and the Fontry / Fontry West.

1. Allowed uses

You may use the licensed fonts to create images on any surface such as computer screens, paper, web pages, photographs, movie credits, printed material, T-shirts, and other surfaces where the image is a fixed size as long as the resulting items are not for sale for a commercial entity or business.

You may use the licensed fonts to create EPS files or other scalable drawings provided that such files are only used by the person licensing the font.

Examples of personal uses permitted by this license include: family birthday or party invitations, school work, personal scrapbooking, personal garage sale flyers, personal stationary, personal web sites.

2. Number of users

There can be any number of simultaneous users providing that all users belong to the same company or household downloading the font.

3. Third parties

You may not provide the font or make it accessible to any third parties.

4. Embedding

You may embed the licensed fonts into any document you send to third parties. Such documents may be viewed and printed (but not edited) by the recipients.

You may not under any circumstances embed the licensed fonts into software or hardware products in which the fonts will be used by the purchasers of such products. Such use requires a different license which may be offered by the Fontry / Fontry West. Please contact thefontry@yahoo.com for further information.

5. Modifications

You may import characters from the font as graphical objects into a drawing program and modify such graphical objects.

You may not modify, adapt, translate, reverse engineer, decompile, disassemble, or create derivative works based on the licensed font itself without Foundry's prior written consent.

6. Copyright

The font and the accompanying materials are copyrighted and contain proprietary information and trade secrets belonging to the Fontry / Fontry West. Unauthorized copying of the Product even if modified, merged, or included with other software, or of the written materials, is expressly forbidden. You may be held legally responsible for any infringement of the Fontry / Fontry West intellectual property rights that is caused or encouraged by your failure to abide by the terms of this Agreement.

7. Termination

This Agreement is effective until terminated. This Agreement will terminate automatically without notice from the Fontry / Fontry West if you fail to comply with any provision contained herein. Upon termination, you must destroy the written materials, the Product, and all copies of them, in part and in whole, including modified copies, if any.


8. Product Upgrades

The Fontry / Fontry West may, from time to time, update the Product. Product upgrade pricing may apply.


Empty file added game/__init__.py
Empty file.
36 changes: 36 additions & 0 deletions game/background_loop.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from pygame import image

from game.helpers import get_background_roll_speed


class BackgroundLoop:
def __init__(self, fps: int):
self.background = image.load('../images/environment/ocean.png').convert_alpha()
self.background_rect = self.background.get_rect()

self.background_y_1 = 0
self.x = 0

self.background_y_2 = self.background_rect.height

self.roll_speed = get_background_roll_speed(fps)

def update(self):
self.background_y_1 += self.roll_speed
self.background_y_2 += self.roll_speed

rect_height = self.background_rect.height

if self.background_y_1 >= rect_height:
self.background_y_1 = -rect_height

if self.background_y_2 >= rect_height:
self.background_y_2 = -rect_height

def render(self, window):
window.blit(self.background, (self.x, self.background_y_1))
window.blit(self.background, (self.x, self.background_y_2))

def loop_background(self, window):
self.update()
self.render(window)
Loading