Skip to content

Commit 066a160

Browse files
The Build Files
1 parent 8d3abbc commit 066a160

22 files changed

+699
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,6 @@ venv.bak/
102102

103103
# mypy
104104
.mypy_cache/
105+
106+
# Some stuff
107+
.idea/

BaseSprite.pyw

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import pygame
2+
import GEngineCore as Core
3+
4+
class Sprite(pygame.sprite.Sprite):
5+
def __init__(self,image,centerPoint,colorkey=None,size=24):
6+
pygame.sprite.Sprite.__init__(self)
7+
#Image and Rect are set here
8+
self.image,rect = Core.Load_Image(image,colorkey,size)
9+
self.rect = self.image.get_rect()
10+
#Moves the rect to the center
11+
self.rect.center = centerPoint

DataParser.pyw

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import configparser
2+
3+
""" VARIABLES """
4+
config_Path = "EngineDataFile\EngineConfig\GEngineSettings.ini"
5+
6+
class GEngineConfig:
7+
def __init__(self):
8+
try:
9+
with open(config_Path):
10+
print("File exists")
11+
except IOError:
12+
print("Error opening " + str(config_Path) + ", creating new one")
13+
config = configparser.ConfigParser()
14+
config['DEFAULT'] = {
15+
'GRAVITY':'True',
16+
'GRAVITY_AMOUNT':'3',
17+
'SHOOT':'True',
18+
'SHOOT_SPEED':'1',
19+
'BLOCK_SIZE':'32',
20+
'HORIZONTAL_SPEED:':'4',
21+
'VERTICAL_SPEED:':'8'
22+
}
23+
with open(config_Path,'w') as configfile:
24+
config.write(configfile)
25+
print("File successfully written.")
26+
27+
def ReturnData(self,data):
28+
config = configparser.ConfigParser()
29+
try:
30+
with open(config_Path): pass
31+
config.read(config_Path)
32+
except IOError:
33+
print("Error opening " + str(config_Path))
34+
try:
35+
returndata = (config['DEFAULT'][data]).replace('=','').strip()
36+
return returndata
37+
except KeyError:
38+
print(str(data) + " wasn't in the configuration data")
39+
return 0
Binary file not shown.
13.3 KB
Binary file not shown.

Documentations/Default Tiles.docx

Whitespace-only changes.

EnemySprite.pyw

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import sys, os, pygame
2+
import GEngineCore as Core
3+
import BaseSprite
4+
5+
class EnemySprite(BaseSprite.Sprite):
6+
def __init__(self,enemytype,image,centerpoint,health,colorkey=None,size=24):
7+
BaseSprite.Sprite.__init__(self,image,centerpoint,colorkey,size)
8+
self.health = health
9+
self.type = enemytype
10+
self.xv = 1
11+
self.yv = 0
12+
self.falling = False
13+
14+
def update(self,platforms,levelwidth,levelheight):
15+
if self.falling == True:
16+
self.yv += Core.G_C_GRAVITY_AMOUNT
17+
18+
self.rect.left += self.xv
19+
self.Collision(self.xv,0,platforms)
20+
self.rect.top += self.yv
21+
self.falling = True
22+
self.Collision(0,self.yv,platforms)
23+
24+
if(self.rect.top + 10 > levelheight):
25+
self.kill()
26+
27+
def Collision(self,xv,yv,platforms):
28+
for p in platforms:
29+
if(pygame.sprite.collide_rect(self,p)):
30+
if(xv < 0):
31+
self.rect.left = p.rect.right
32+
self.xv *= -1
33+
elif(xv > 0):
34+
self.rect.right = p.rect.left
35+
self.xv *= -1
36+
if(yv > 0):
37+
self.rect.bottom = p.rect.top
38+
self.yv = 0
39+
self.falling = False
40+
self.jumping = False
41+
elif(yv < 0):
42+
self.rect.top = p.rect.bottom
43+
self.yv = 0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
EngineDataFile/Levels/test.xml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[DEFAULT]
2+
block_size = 24
3+
shoot_speed = 1
4+
vertical_speed: = 11
5+
horizontal_speed: = 4
6+
shoot = True
7+
gravity = True
8+
gravity_amount = 0.45
9+

EngineDataFile/EngineConfig/GEngineSprites.xml

Whitespace-only changes.

EngineDataFile/Images/block.png

360 Bytes
Loading

EngineDataFile/Images/menu_logo.png

24.5 KB
Loading

EngineDataFile/Images/player.png

374 Bytes
Loading

EngineDataFile/Images/soldier.png

381 Bytes
Loading

EngineDataFile/Levels/test.xml

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?xml version="1.0" ?>
2+
<Main_Level>
3+
<Data>
4+
<height>1024</height>
5+
<width>640</width>
6+
</Data>
7+
<Map>
8+
<Tile>
9+
<x>100</x>
10+
<y>100</y>
11+
<type>1</type>
12+
<solid>True</solid>
13+
</Tile>
14+
<Tile>
15+
<x>160</x>
16+
<y>100</y>
17+
<type>1</type>
18+
<solid>True</solid>
19+
</Tile>
20+
<Tile>
21+
<x>130</x>
22+
<y>130</y>
23+
<type>1</type>
24+
<solid>True</solid>
25+
</Tile>
26+
<Tile>
27+
<x>100</x>
28+
<y>130</y>
29+
<type>1</type>
30+
<solid>True</solid>
31+
</Tile>
32+
<Tile>
33+
<x>190</x>
34+
<y>220</y>
35+
<type>1</type>
36+
<solid>True</solid>
37+
</Tile>
38+
<Tile>
39+
<x>160</x>
40+
<y>220</y>
41+
<type>1</type>
42+
<solid>False</solid>
43+
</Tile>
44+
<Tile>
45+
<x>130</x>
46+
<y>220</y>
47+
<type>1</type>
48+
<solid>False</solid>
49+
</Tile>
50+
<Tile>
51+
<x>220</x>
52+
<y>220</y>
53+
<type>1</type>
54+
<solid>True</solid>
55+
</Tile>
56+
<Tile>
57+
<x>250</x>
58+
<y>220</y>
59+
<type>1</type>
60+
<solid>True</solid>
61+
</Tile>
62+
<Tile>
63+
<x>280</x>
64+
<y>220</y>
65+
<type>1</type>
66+
<solid>True</solid>
67+
</Tile>
68+
<Tile>
69+
<x>310</x>
70+
<y>220</y>
71+
<type>1</type>
72+
<solid>True</solid>
73+
</Tile>
74+
<Tile>
75+
<x>340</x>
76+
<y>220</y>
77+
<type>1</type>
78+
<solid>True</solid>
79+
</Tile>
80+
<Tile>
81+
<x>370</x>
82+
<y>220</y>
83+
<type>1</type>
84+
<solid>True</solid>
85+
</Tile>
86+
<Tile>
87+
<x>400</x>
88+
<y>220</y>
89+
<type>1</type>
90+
<solid>True</solid>
91+
</Tile>
92+
</Map>
93+
<Sprites>
94+
<Sprite>
95+
<x>100</x>
96+
<y>50</y>
97+
<type>0</type>
98+
</Sprite>
99+
<Sprite>
100+
<x>125</x>
101+
<y>50</y>
102+
<type>1</type>
103+
</Sprite>
104+
</Sprites>
105+
</Main_Level>

EngineDataFile/Sounds/death.mp3

28 KB
Binary file not shown.

GEngineCore.pyw

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""
2+
GEngineCore.pyw contains all of the necessary code
3+
functions and variables that will be used by all other
4+
pyw files.
5+
"""
6+
import pygame, os, sys
7+
import DataParser as Config
8+
import LevelParser as Level
9+
10+
"""
11+
Global usable variables
12+
"""
13+
G_C_LEVEL = []
14+
G_C_CURRENTLEVEL = 0
15+
G_C_DIFFICULTY = 0
16+
G_C_GRAVITY = True
17+
G_C_GRAVITY_AMOUNT = 0.9
18+
G_C_BLOCK_SIZE = 0
19+
G_C_LEVEL_DIRECTORY = []
20+
ConfigData = Config.GEngineConfig()
21+
22+
23+
"""
24+
Global usable functions
25+
"""
26+
def Load_Image(name,colorkey=None,size=24):
27+
#Loads the images and their prereqs
28+
try:
29+
image = pygame.image.load(name)
30+
except (pygame.error):
31+
print('Cannot load image:' + str(name))
32+
image = image.convert()
33+
if colorkey is not None:
34+
if colorkey is -1:
35+
colorkey = image.get_at((0,0))
36+
image.set_colorkey(colorkey, pygame.RLEACCEL)
37+
image = pygame.transform.scale(image,(size,size))
38+
return image, image.get_rect()
39+
40+
def Load_Level_List():
41+
file = open("EngineDataFile/EngineConfig/GEngineLevels.txt")
42+
for a in file:
43+
G_C_LEVEL_DIRECTORY.append(a)
44+
45+
def Load_Level(directory):
46+
G_C_Level = Level.GameLevel(directory)
47+
Block = G_C_Level.GetData("Tile")
48+
Sprite = G_C_Level.GetData("Sprite")
49+
Data = G_C_Level.GetData("Data")
50+
return Block, Sprite, Data

LevelParser.pyw

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#-----------------------------------------------------------------
2+
#GenerateDefaultLevel generates a default map for the thing to use
3+
#-----------------------------------------------------------------
4+
#FindElement works by finding elements in the xml file and returning
5+
#the x and y coordinates, the type and the boolean of Solid.
6+
#-----------------------------------------------------------------
7+
8+
import xml.etree.ElementTree as ET
9+
import xml.dom.minidom as MD
10+
11+
tile_properties = '''<root><x>{0}</x><y>{1}</y><type>{2}</type><solid>{3!s}</solid></root>'''
12+
sprite_properties = '''<root><x>{0}</x><y>{1}</y><type>{2}</type></root>'''
13+
14+
class GameLevel:
15+
def __init__(self,directory):
16+
self.directory = directory
17+
try:
18+
with open(self.directory):
19+
print("File exists")
20+
except IOError:
21+
print("Error opening " + str(self.directory))
22+
self.GenerateDefaultLevel()
23+
try:
24+
self.levelTree = ET.parse(self.directory)
25+
print("File successfully parsed")
26+
except ET.ParseError:
27+
print("An error has occurred")
28+
29+
def GetData(self,El_first):
30+
root = self.levelTree.getroot()
31+
group = []
32+
x = -1
33+
y = -1
34+
t = -1
35+
s = -1
36+
for element in root.iter(El_first):
37+
try:
38+
width = element.find("width").text
39+
height = element.find("height").text
40+
group.append((width,height))
41+
except AttributeError:
42+
try:
43+
x = element.find('x').text
44+
except AttributeError:
45+
x = -1
46+
try:
47+
y = element.find('y').text
48+
except AttributeError:
49+
y = -1
50+
try:
51+
t = element.find('type').text
52+
except AttributeError:
53+
t = -1
54+
try:
55+
s = element.find('solid').text
56+
except AttributeError:
57+
s = -1
58+
group.append((x,y,t,s))
59+
return group
60+
61+
def GenerateDefaultLevel(self):
62+
level = ET.Element('Main_Level')
63+
level_map = ET.SubElement(level,'Map')
64+
level_sprites = ET.SubElement(level,'Sprites')
65+
66+
tiles_child = ET.SubElement(level_map,'Tile')
67+
tiles_child.set('id','0')
68+
tiles_child.extend(ET.XML(tile_properties.format(100,100,1,"True")))
69+
70+
sprites_child = ET.SubElement(level_sprites,'Sprite')
71+
sprites_child.set('id','0')
72+
sprites_child.extend(ET.XML(sprite_properties.format(100,50,0)))
73+
74+
file = open(self.directory,'w')
75+
file.write(self.GenerateIndentationForXML(level))
76+
77+
def GenerateIndentationForXML(self,element):
78+
rough_string = ET.tostring(element,'utf-8')
79+
reparsed = MD.parseString(rough_string)
80+
return reparsed.toprettyxml(indent=" ")

0 commit comments

Comments
 (0)