Compare commits
61 Commits
ea8ad12c50
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| dfdf3ef610 | |||
| 86a6c6280a | |||
| d7d0db970e | |||
| 0d0786d412 | |||
| 9748e4f7da | |||
| 3589bd49ee | |||
| 2e9bbc7d19 | |||
| 187803d3f7 | |||
| 907da56d23 | |||
| b229ca3da0 | |||
| 2a60195960 | |||
| caad5c9dbc | |||
| d312fa3308 | |||
| cbcf1e6bbd | |||
| 4b48e17cea | |||
| d55aac72a6 | |||
| cd6a884ac9 | |||
| 3284f3d0ac | |||
| 65ac13612d | |||
| d0bbdfd6f1 | |||
| 92fd4a4cb2 | |||
| a3269826bf | |||
| a824390566 | |||
| 55c060559d | |||
| e595d085c6 | |||
| 410ce9f72b | |||
| e01d187ea5 | |||
| 3e56abba63 | |||
| 40839589f0 | |||
| f77433d5f4 | |||
| c146a58904 | |||
| 17e258f408 | |||
| 900cee34e5 | |||
| 9b8fe57c17 | |||
| 6221fd49a4 | |||
| 45c730a174 | |||
| 28670e7609 | |||
| 040a226c2e | |||
| a2d56d74e8 | |||
| e3193695c3 | |||
| e3fc96bff8 | |||
| 594b4a4b33 | |||
| 73cfbbbce4 | |||
| da23babe68 | |||
| 3e2b906279 | |||
| 06de20158f | |||
| 1736feb94b | |||
| ed384cfcba | |||
| 3cd688c3e2 | |||
| 3f9c38d172 | |||
| dc14d8a91d | |||
| a1ee99e713 | |||
| 60669e1672 | |||
| 25068cbb2b | |||
| 73c4c18388 | |||
| a12360fc36 | |||
| 1813179863 | |||
| 2286458632 | |||
| c9d8a28683 | |||
| 13622322c1 | |||
| b8a8262a68 |
4
.gitignore
vendored
@@ -11,3 +11,7 @@
|
||||
/.idea
|
||||
/SnakeTest.spec
|
||||
python-tests.code-workspace
|
||||
modules/__pycache__c
|
||||
modules/__pycache__
|
||||
modules/__pycache__
|
||||
qt-test.spec
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import Game
|
||||
import User
|
||||
import modules.Game as Game
|
||||
import modules.User as User
|
||||
import Controls
|
||||
import subprocess
|
||||
|
||||
@@ -12,6 +12,7 @@ def __main__():
|
||||
return subprocess.check_output(['git', 'rev-parse', 'HEAD'])
|
||||
|
||||
game = Game.game()
|
||||
game.setDebugMode(3)
|
||||
game.run()
|
||||
return 0
|
||||
|
||||
|
||||
BIN
data/conceptimages/MAINVIEW.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
234
data/conceptimages/MAINVIEW.svg
Normal file
@@ -0,0 +1,234 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1024"
|
||||
height="768"
|
||||
viewBox="0 0 270.93333 203.2"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
sodipodi:docname="MAINVIEW.svg"
|
||||
inkscape:export-filename="MAINVIEW.webp"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.4513545"
|
||||
inkscape:cx="466.1163"
|
||||
inkscape:cy="325.90245"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1356"
|
||||
inkscape:window-x="2560"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1"
|
||||
showguides="true">
|
||||
<inkscape:grid
|
||||
id="grid1"
|
||||
units="mm"
|
||||
originx="0"
|
||||
originy="0"
|
||||
spacingx="0.99999998"
|
||||
spacingy="1"
|
||||
empcolor="#0099e5"
|
||||
empopacity="0.30196078"
|
||||
color="#0099e5"
|
||||
opacity="0.14901961"
|
||||
empspacing="5"
|
||||
dotted="false"
|
||||
gridanglex="30"
|
||||
gridanglez="30"
|
||||
visible="false" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1">
|
||||
<linearGradient
|
||||
id="linearGradient18"
|
||||
inkscape:swatch="gradient">
|
||||
<stop
|
||||
style="stop-color:#293c4b;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop18" />
|
||||
<stop
|
||||
style="stop-color:#293c4b;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop19" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:inline">
|
||||
<rect
|
||||
style="fill:#379426;fill-opacity:1;stroke-width:1.654;stroke-linejoin:bevel;paint-order:markers stroke fill"
|
||||
id="rect1"
|
||||
width="270.93332"
|
||||
height="203.2"
|
||||
x="-4.8062439e-08"
|
||||
y="0"
|
||||
inkscape:label="MAINSCREEN" />
|
||||
<rect
|
||||
style="fill:#293c4b;fill-opacity:1;stroke-width:1.654;stroke-linejoin:bevel;paint-order:markers stroke fill"
|
||||
id="rect2"
|
||||
width="270.93332"
|
||||
height="192.61667"
|
||||
x="2.7435373e-08"
|
||||
y="10.583333"
|
||||
inkscape:label="PLAYGROUNG" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:5.29166667px;line-height:0;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.654;stroke-linejoin:bevel;stroke-opacity:0.587196;paint-order:markers stroke fill"
|
||||
x="117.58411"
|
||||
y="7.6566405"
|
||||
id="text6"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6"
|
||||
style="stroke-width:1.654;font-size:5.29166667px"
|
||||
x="117.58411"
|
||||
y="7.6566405"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Inconsolata;-inkscape-font-specification:Inconsolata;font-size:5.29166667px"
|
||||
id="tspan17">SCORE</tspan>: </tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:5.29167px;line-height:0;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.654;stroke-linejoin:bevel;stroke-opacity:0.587196;paint-order:markers stroke fill"
|
||||
x="4.9488788"
|
||||
y="7.2679081"
|
||||
id="text6-5"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6-3"
|
||||
style="font-size:5.29167px;stroke-width:1.654"
|
||||
x="4.9488788"
|
||||
y="7.2679081"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.29167px;font-family:Inconsolata;-inkscape-font-specification:Inconsolata"
|
||||
id="tspan16">PLAYER</tspan>: </tspan></text>
|
||||
<rect
|
||||
style="fill:#293c4b;fill-opacity:1;stroke:#000000;stroke-width:1.62159;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:0.558499;paint-order:fill markers stroke"
|
||||
id="rect18"
|
||||
width="269.56253"
|
||||
height="190.07933"
|
||||
x="0.57719308"
|
||||
y="11.879853" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="LABEL_NAME_ENTRY"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
style="fill:#379426;fill-opacity:0.604856;stroke:#000000;stroke-width:1.654;stroke-linejoin:bevel;stroke-opacity:0.430464;paint-order:markers stroke fill"
|
||||
id="rect3"
|
||||
width="126.33456"
|
||||
height="32.996475"
|
||||
x="74.561096"
|
||||
y="75.107994" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.7625px;line-height:0;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono';fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.654;stroke-linejoin:bevel;stroke-opacity:0.430464;paint-order:markers stroke fill"
|
||||
x="80.39473"
|
||||
y="83.676147"
|
||||
id="text3"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.7625px;font-family:Inconsolata;-inkscape-font-specification:Inconsolata;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.654;stroke-opacity:0.587196"
|
||||
x="80.39473"
|
||||
y="83.676147">Bitte gib einen Namen ein:</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.654;stroke-linejoin:bevel;stroke-opacity:0.587196;paint-order:markers stroke fill"
|
||||
id="rect4"
|
||||
width="84.952248"
|
||||
height="8.3858442"
|
||||
x="80.212425"
|
||||
y="87.322159" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.7625px;line-height:0;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.654;stroke-linejoin:bevel;stroke-opacity:0.587196;paint-order:markers stroke fill"
|
||||
x="80.577026"
|
||||
y="103.36465"
|
||||
id="text5"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Inconsolata;-inkscape-font-specification:Inconsolata;stroke-width:1.654"
|
||||
x="80.577026"
|
||||
y="103.36465">Mit ENTER bestätigen</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;line-height:0;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.642;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
|
||||
x="81.488533"
|
||||
y="93.338089"
|
||||
id="text11"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan11"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:Inconsolata;-inkscape-font-specification:Inconsolata;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.642"
|
||||
x="81.488533"
|
||||
y="93.338089">Mein Name</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="g21"
|
||||
inkscape:label="LABEL_SELECT_PLAYER"
|
||||
style="display:inline">
|
||||
<rect
|
||||
style="fill:#379426;fill-opacity:0.604856;stroke:#000000;stroke-width:2.47263;stroke-linejoin:bevel;stroke-opacity:0.430464;paint-order:markers stroke fill"
|
||||
id="rect19"
|
||||
width="90.131538"
|
||||
height="103.3607"
|
||||
x="79.710228"
|
||||
y="41.791622" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:5.82083px;line-height:0;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono';fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.654;stroke-linejoin:bevel;stroke-opacity:0.430464;paint-order:markers stroke fill"
|
||||
x="90.785881"
|
||||
y="50.132771"
|
||||
id="text19"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:ultra-expanded;font-size:5.82083px;font-family:Inconsolata;-inkscape-font-specification:'Inconsolata Ultra-Expanded';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.654;stroke-opacity:0.587196"
|
||||
x="90.785881"
|
||||
y="50.132771">Wähle einen Spieler aus:</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:0;stroke:#ffffff;stroke-width:0.661458;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
id="rect21"
|
||||
width="78.207115"
|
||||
height="8.3858442"
|
||||
x="87.139854"
|
||||
y="65.081451" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:ultra-expanded;font-size:5.82083px;line-height:0;font-family:Inconsolata;-inkscape-font-specification:'Inconsolata Ultra-Expanded';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.661458;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="91.515083"
|
||||
y="60.888523"
|
||||
id="text21"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan21"
|
||||
style="stroke-width:0.661458;stroke:none;fill:#ffffff;fill-opacity:1"
|
||||
x="91.515083"
|
||||
y="60.888523">Chris</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:ultra-expanded;font-size:5.82083px;line-height:0;font-family:Inconsolata;-inkscape-font-specification:'Inconsolata Ultra-Expanded';fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.661458;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="92.061981"
|
||||
y="70.915077"
|
||||
id="text22"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan22"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.661458"
|
||||
x="92.061981"
|
||||
y="70.915077">Chris_selected</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
BIN
data/conceptimages/MAINVIEW.webp
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
data/models/fruit1.jpeg
Normal file
|
After Width: | Height: | Size: 85 KiB |
82
data/models/fruit_1.svg
Normal file
|
After Width: | Height: | Size: 135 KiB |
89
data/models/fruit_1_1.svg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
data/models/fruit_1_1_scaled.png
Normal file
|
After Width: | Height: | Size: 705 B |
92
data/models/fruit_1_1_scaled.svg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
data/models/fruit_1_1_scaled_2.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
data/models/fruit_1_1_scaled_2_green.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
data/models/fruit_1_1_scaled_2_orange.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
data/models/fruit_1_1_scaled_2_red.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
data/models/fruit_1_1_scaled_2_yellow.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
data/models/fruit_1_1_scaled_3.png
Normal file
|
After Width: | Height: | Size: 1019 B |
BIN
data/models/player_test.png
Normal file
|
After Width: | Height: | Size: 639 B |
BIN
data/models/snake_body_1.png
Normal file
|
After Width: | Height: | Size: 180 B |
76
data/models/snake_head.svg
Normal file
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="snake_head.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="1.4485269"
|
||||
inkscape:cx="314.11221"
|
||||
inkscape:cy="493.95008"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1">
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect7"
|
||||
is_visible="true"
|
||||
lpeversion="1" />
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect1"
|
||||
is_visible="true"
|
||||
lpeversion="1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
style="fill:#ff9955;stroke-width:0.264583"
|
||||
d="m 110.14207,106.30627 c 0.97733,-3.74444 1.10317,-7.708487 0.36531,-11.507378 -0.66809,-3.43968 -2.03122,-6.741683 -2.37454,-10.228783 -0.29,-2.945551 0.16205,-5.923884 0.93766,-8.780245 0.77562,-2.856361 1.87099,-5.613644 2.89813,-8.389496 0.73104,-1.975626 1.43062,-3.968708 2.36111,-5.858603 0.93048,-1.889896 2.10529,-3.68662 3.66657,-5.100807 1.40917,-1.276411 3.12732,-2.222108 4.97729,-2.660958 1.84998,-0.43885 3.82935,-0.361656 5.6168,0.286421 2.02972,0.735918 3.77162,2.197605 4.93174,4.018449 1.15498,1.812771 1.73416,3.927534 2.19188,6.027677 0.72732,3.337131 1.18861,6.730702 2.00923,10.046123 0.74801,3.022072 1.79996,6.019687 1.82656,9.132842 0.0251,2.940419 -0.8684,5.804829 -1.82656,8.584869 -1.32171,3.834844 -2.79483,7.663889 -3.28783,11.690039 -0.1187,0.96941 -0.17973,1.94587 -0.18265,2.92251"
|
||||
id="path7"
|
||||
inkscape:path-effect="#path-effect7"
|
||||
inkscape:original-d="m 110.14207,106.30627 c -9.19373,4.56642 0.36531,-7.6107 0.36531,-11.507378 0,-3.89668 -1.64391,-6.94096 -2.37454,-10.228783 -0.73063,-3.287821 2.43543,-11.50738 3.83579,-17.169741 1.40037,-5.662361 4.14022,-7.123616 6.02768,-10.95941 1.88745,-3.835794 6.88007,-1.826567 10.59409,-2.374537 3.71403,-0.547971 3.4096,2.73985 4.93174,4.018449 1.52214,1.278599 1.46125,4.201107 2.19188,6.027677 0.73063,1.826567 1.33948,6.575644 2.00923,10.046123 0.66974,3.470481 1.21771,6.027676 1.82656,9.132842 0.60886,3.105166 -1.21771,5.784133 -1.82656,8.584869 -0.60886,2.800739 -2.131,7.854244 -3.28783,11.690039 -1.15682,3.83579 -0.18265,1.88745 -0.18265,2.92251"
|
||||
transform="translate(-30.914667,30.458026)"
|
||||
inkscape:export-filename="snake_head_1.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
<circle
|
||||
id="path8"
|
||||
style="fill:#000000;stroke:none;stroke-width:0.264583"
|
||||
cx="110.69003"
|
||||
cy="103.74908"
|
||||
r="0.39687499" />
|
||||
<path
|
||||
style="fill:#ff9955;stroke-width:0.266018"
|
||||
d="m 79.273061,136.13284 v 46.76014 H 103.27676 V 136.49815 H 79.273061 Z"
|
||||
id="path9"
|
||||
inkscape:export-filename="snake_body_1.png"
|
||||
inkscape:export-xdpi="32.247917"
|
||||
inkscape:export-ydpi="32.247917" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
BIN
data/models/snake_head_1.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
data/models/testmodel.bmp
Normal file
|
After Width: | Height: | Size: 33 KiB |
@@ -4,15 +4,13 @@ import time
|
||||
import threading
|
||||
import tkinter
|
||||
from turtle import left, width
|
||||
import User
|
||||
import modules.User as User
|
||||
import sys
|
||||
import tkinter as tk
|
||||
from direct import task
|
||||
from tkinter import Scale, StringVar
|
||||
from random import random
|
||||
|
||||
#TODO Klassen erstellten
|
||||
|
||||
def button_event_close():
|
||||
print("Programm wird geschlossen")
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import User
|
||||
import Statics
|
||||
import modules.User as User
|
||||
import modules.Statics as Statics
|
||||
import Controls
|
||||
|
||||
from math import pi, sin, cos
|
||||
@@ -20,7 +20,8 @@ from panda3d.core import loadPrcFile #Ermöglicht das Laden eigener Konfiguratio
|
||||
import random
|
||||
|
||||
class game(ShowBase):
|
||||
|
||||
__debug_mode = [0,1,2,3,4]
|
||||
__debuglevel = 0
|
||||
__us = User.User
|
||||
__statics = Statics.statics
|
||||
#__ctrl = Controls.controls
|
||||
@@ -68,6 +69,11 @@ class game(ShowBase):
|
||||
def update_keystate(self, controlName, controlState):
|
||||
self.__keymap[controlName] = controlState
|
||||
|
||||
def setDebugMode(self, debugmode:int):
|
||||
"""DEBUGLEVEL"""
|
||||
self.__debuglevel = debugmode
|
||||
|
||||
|
||||
#Taskfunctions and definitions
|
||||
def task1(self, task):
|
||||
_x = -2.8 + (task.time*0.3)
|
||||
@@ -82,19 +88,19 @@ class game(ShowBase):
|
||||
|
||||
def keyboard_event(self, task):
|
||||
|
||||
print(self.__keymap)
|
||||
if(self.__debuglevel == 4): print(self.__keymap)
|
||||
|
||||
if (self.__keymap['up']):
|
||||
self.__actor1.setPos(self.__actor1.getPos() + Vec3(0,0.2,0))
|
||||
print("Nach oben!")
|
||||
if(self.__debuglevel >= 3): print("Nach oben!")
|
||||
if (self.__keymap['down']):
|
||||
self.__actor1.setPos(self.__actor1.getPos() - Vec3(0,0.2,0))
|
||||
print("Nach unten!")
|
||||
if(self.__debuglevel >= 3): print("Nach unten!")
|
||||
if (self.__keymap['left']):
|
||||
self.__actor1.setPos(self.__actor1.getPos() - Vec3(0.2,0,0))
|
||||
print("Nach links!")
|
||||
if(self.__debuglevel >= 3): print("Nach links!")
|
||||
if (self.__keymap['right']):
|
||||
self.__actor1.setPos(self.__actor1.getPos() + Vec3(0.2,0,0))
|
||||
print("Nach rechts!")
|
||||
if(self.__debuglevel >= 3): print("Nach rechts!")
|
||||
|
||||
return Task.cont
|
||||
341
modules/GameObject.py
Normal file
@@ -0,0 +1,341 @@
|
||||
import pygame
|
||||
import random as rand
|
||||
|
||||
|
||||
class GameObject():
|
||||
"""TODO Install a body array with positions of mainbody and adders"""
|
||||
|
||||
_size_rect_x:int
|
||||
_size_rect_y:int
|
||||
__movespeed = int()
|
||||
_rectobjekt:pygame.Rect
|
||||
_surface:pygame.Surface
|
||||
_mainscreensize:tuple
|
||||
__hide = False
|
||||
__collided = False
|
||||
__is_player = False
|
||||
__is_rect = False
|
||||
__has_follower = False
|
||||
__score:int
|
||||
count = 0
|
||||
|
||||
def __init__(self, name:str, surface, mainscreensize:tuple, posx_init:int=0, posy_init:int=0, move_speed:int=0, is_player:bool = False, is_rect:bool = True, color:tuple = (0,0,0), rect_size:tuple = (10,10), image = str()) -> None:
|
||||
self.__name = name
|
||||
self._pos_x = posx_init
|
||||
self._pos_y = posy_init
|
||||
self.pos_array = (posx_init,posy_init)
|
||||
self.__inital_pos_x = posx_init
|
||||
self.__initial_pos_y = posx_init
|
||||
self.__movespeed = move_speed
|
||||
self.__is_player = is_player
|
||||
self.__is_rect = is_rect
|
||||
self._size_rect_x = rect_size[0]
|
||||
self._size_rect_y = rect_size[1]
|
||||
self.count += 1
|
||||
self.__pos_lf_x = 0
|
||||
self.__pos_lf_y = 0
|
||||
self._surface = surface
|
||||
self._mainscreensize = mainscreensize
|
||||
self.__score = 0
|
||||
self.__imagepath = image
|
||||
self.__imageloaded = 0
|
||||
self.__color = color
|
||||
|
||||
def draw(self):
|
||||
#font = pygame.font.SysFont(None, 70)
|
||||
#text = font.render("TEST", True, (0,0,0) )
|
||||
if(not self.__hide):
|
||||
self._rectobjekt = pygame.draw.rect(self._surface, self.__color, [self._pos_x, self._pos_y,self._size_rect_x,self._size_rect_y])
|
||||
|
||||
def get_name(self, debug=False):
|
||||
if(debug):
|
||||
print(self.__name)
|
||||
return self.__name
|
||||
|
||||
def get_position(self, debug=False):
|
||||
if(debug):
|
||||
print((self._pos_x, self._pos_y))
|
||||
return (self._pos_x, self._pos_y)
|
||||
|
||||
def get_rect(self):
|
||||
return self._rectobjekt
|
||||
|
||||
def get_rect_size(self):
|
||||
return (self._size_rect_x, self._size_rect_y)
|
||||
|
||||
def get_movespeed(self):
|
||||
return self.__movespeed
|
||||
|
||||
def get_playermovedirection(self):
|
||||
return self.__movedirection
|
||||
|
||||
def get_player_score(self) -> int:
|
||||
return self.__score
|
||||
|
||||
def get_surface(self) -> pygame.Surface:
|
||||
return self._surface
|
||||
|
||||
def has_follower(self):
|
||||
return self.__has_follower
|
||||
|
||||
def set_follower(self):
|
||||
self.__has_follower = True
|
||||
|
||||
def is_collided(self) -> bool:
|
||||
return self.__collided
|
||||
|
||||
def set_collided(self):
|
||||
self.__collided = True
|
||||
|
||||
def set_position(self, pos:tuple):
|
||||
self._pos_x = pos[0]
|
||||
self._pos_y = pos[1]
|
||||
|
||||
def update_pos_lastframe(self,x,y,debug=False):
|
||||
if (debug):
|
||||
print("Letzte Position: " + str((x,y)))
|
||||
self.__pos_lf_x = x
|
||||
self.__pos_lf_y = y
|
||||
|
||||
def update_player_score(self, score_from_entity):
|
||||
if(score_from_entity > 0):
|
||||
self.__score += score_from_entity
|
||||
|
||||
def collide(self, GameObject) -> bool:
|
||||
#print(GameObject)
|
||||
#print(GameObject.get_rect())
|
||||
"""TODO: Hitbox with Objectsize"""
|
||||
|
||||
if(pygame.rect.Rect.colliderect(self._rectobjekt, GameObject.get_rect()) and not self.is_collided()):
|
||||
print("Kollision\n") #Funktioniert für das erste!
|
||||
self.set_collided()
|
||||
return True
|
||||
#self.hide() #Löscht das Objekt nach einem Zusammenstoß mit Playerobject
|
||||
return False
|
||||
|
||||
def hide(self):
|
||||
if(self.__hide != True):
|
||||
print("Gameoject mit der ID " + self.__name + " gelöscht!")
|
||||
self.__hide = True
|
||||
"""TODO: Delete obeject function"""
|
||||
|
||||
class GameObject_new():
|
||||
def __init__(self, name:str, surface:pygame.surface.Surface, surface_size:tuple, init_pos_x, init_pos_y, visibility:bool = True) -> None:
|
||||
self._name = name
|
||||
self._surface = surface
|
||||
self._surface_size = surface_size
|
||||
self._position = [init_pos_x, init_pos_y]
|
||||
self._visibility = visibility
|
||||
|
||||
def printall_attributes(self):
|
||||
print(self._name)
|
||||
print(self._surface)
|
||||
print(self._surface_size)
|
||||
print(self._position)
|
||||
print(self._visibility)
|
||||
|
||||
def get_position(self) -> tuple:
|
||||
return self._position
|
||||
|
||||
|
||||
|
||||
class Block(GameObject):
|
||||
__score = int()
|
||||
def __init__(self, name: str, surface, mainscreensize: tuple, posx_init: int = 0, posy_init: int = 0, move_speed: int = 0, is_player: bool = False, is_rect: bool = True, color: tuple = (0, 0, 0), rect_size: tuple = (10, 10), image=str()) -> None:
|
||||
super().__init__(name, surface, mainscreensize, posx_init, posy_init, move_speed, is_player, is_rect, color, rect_size, image)
|
||||
self.__score = rand.randint(5, 50)
|
||||
|
||||
def set_position_player(self, pos:tuple, playermovedirection:list, debug=False):
|
||||
if(playermovedirection["up"]):
|
||||
super().set_position((pos[0],pos[1]+super().get_rect_size()[1]))
|
||||
print(pos)
|
||||
if(playermovedirection["down"]):
|
||||
super().set_position((pos[0],pos[1]-super().get_rect_size()[1]))
|
||||
print(pos)
|
||||
if(playermovedirection["left"]):
|
||||
super().set_position((pos[0]+super().get_rect_size()[0],pos[1]))
|
||||
print(pos)
|
||||
if(playermovedirection["right"]):
|
||||
super().set_position((pos[0]-super().get_rect_size()[0],pos[1]))
|
||||
print(pos)
|
||||
|
||||
def test(self):
|
||||
print(super().get_position())
|
||||
|
||||
def get_score(self) -> int:
|
||||
return self.__score
|
||||
|
||||
class Player(GameObject_new):
|
||||
#Later handles the Player-Gameobject
|
||||
def __init__(self, name: str, surface: pygame.Surface, surface_size: tuple, init_pos_x, init_pos_y, visibility: bool = True,
|
||||
size:int = 10
|
||||
) -> None:
|
||||
self._size = size
|
||||
self._score = 0
|
||||
self._rect:pygame.Rect
|
||||
self.__snake_body = [[100,100+size], [100,100+size*2], [100,100+size*3], [100,size*5]]
|
||||
super().__init__(name, surface, surface_size, init_pos_x, init_pos_y, visibility)
|
||||
self.__snake = {"head":"data/models/snake_head_1.png", "body":"data/models/snake_body_1.png", "tail":""}
|
||||
self._startmoving = False
|
||||
|
||||
__movedirection = {"up":False, "down":False, "left":False, "right":False}
|
||||
|
||||
__test_counter = 0
|
||||
__player_rect:pygame.Rect
|
||||
|
||||
|
||||
def user_test_func(self):
|
||||
pass
|
||||
|
||||
def change_direction(self, direction:dict):
|
||||
if(direction):
|
||||
for key in self.__movedirection.keys():
|
||||
self.__movedirection[key] = False
|
||||
self.__movedirection[direction] = True
|
||||
#print(direction) for debug purposes
|
||||
|
||||
def move(self, *speed:int):
|
||||
MOVE_SPEED = 1
|
||||
if(self.__test_counter == 10):
|
||||
self.__test_counter = 0
|
||||
if(self.__movedirection['up']):
|
||||
if(not speed): self._position[1] -= MOVE_SPEED
|
||||
else: self._position[1] -= speed[0]
|
||||
if(self._position[1] <= -self._size):
|
||||
self._position[1] = self._surface_size[1]
|
||||
|
||||
elif(self.__movedirection['down']):
|
||||
if(not speed): self._position[1] += MOVE_SPEED
|
||||
else: self._position[1] += speed[0]
|
||||
if(self._position[1] >= self._surface_size[1]):
|
||||
self._position[1] = -self._size
|
||||
|
||||
elif(self.__movedirection['left']):
|
||||
if(not speed): self._position[0] -= MOVE_SPEED
|
||||
else: self._position[0] -= speed[0]
|
||||
if(self._position[0] <= -self._size):
|
||||
self._position[0] = self._surface_size[0]
|
||||
|
||||
elif(self.__movedirection['right']):
|
||||
if(not speed): self._position[0] += MOVE_SPEED
|
||||
else: self._position[0] += speed[0]
|
||||
if(self._position[0] >= self._surface_size[0]):
|
||||
self._position[0] = -self._size
|
||||
self.__test_counter+=1
|
||||
|
||||
def draw(self):
|
||||
if(self.__test_counter == 10):
|
||||
self.__snake_body.insert(0, list(self._position))
|
||||
counter = 0
|
||||
for pos in self.__snake_body:
|
||||
if(counter == 0): #Only for the first part of the Snkae, this meens the head
|
||||
#self.__player_rect = pygame.draw.rect(self._surface, (0,0,0), pygame.Rect(pos[0], pos[1], self._size, self._size))
|
||||
surface = pygame.Surface((40,120))
|
||||
surface.fill((255,255,255))
|
||||
image = pygame.image.load(self.__snake["head"])
|
||||
image = pygame.transform.scale(image, (40, 60))
|
||||
if(self.__movedirection["right"]):
|
||||
image = pygame.transform.rotate(image, 270) #Rotates the Snakehead on directionchange
|
||||
surface = pygame.transform.rotate(surface, 270)
|
||||
if(self.__movedirection["left"]):
|
||||
image = pygame.transform.rotate(image, 90)
|
||||
surface = pygame.transform.rotate(surface, 90)
|
||||
if(self.__movedirection["up"]):
|
||||
image = pygame.transform.rotate(image, 0)
|
||||
surface = pygame.transform.rotate(surface, 0)
|
||||
if(self.__movedirection["down"]):
|
||||
image = pygame.transform.rotate(image, 180)
|
||||
surface = pygame.transform.rotate(surface, 180)
|
||||
surface.blit(image, (0,0))
|
||||
self.__player_rect = self._surface.blit(surface, (pos[0], pos[1]))
|
||||
else:
|
||||
#pygame.draw.rect(self._surface, (0,0,0), pygame.Rect(pos[0], pos[1], self._size, self._size))
|
||||
surface = pygame.Surface((40,40))
|
||||
surface.fill((255,255,255))
|
||||
image = pygame.image.load(self.__snake["body"])
|
||||
image = pygame.transform.scale(image, (30,40))
|
||||
image = pygame.transform.rotate(image, 270)
|
||||
|
||||
|
||||
surface.blit(image, (0,5))
|
||||
self._surface.blit(surface, (pos[0], pos[1]))
|
||||
#print((pos[0], pos[1]))
|
||||
counter += 1
|
||||
#TODO Insert elif for the last position of the array, this meens the tail
|
||||
counter = 0
|
||||
#print(pos)
|
||||
if(self.__test_counter == 10):
|
||||
self.__snake_body.pop()
|
||||
|
||||
def collide_fruit(self, rect:pygame.Rect):
|
||||
if(pygame.Rect.colliderect(self.get_player_rect(), rect)):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def collide_self(self):
|
||||
count = len(self.__snake_body)
|
||||
for elements in range(1, count):
|
||||
if(self.get_position() == self.__snake_body[elements]):
|
||||
print(F"Colidepositions Player: {self.get_position()} Object{self.__snake_body[elements]}") #For DEBUG only
|
||||
return True
|
||||
return False
|
||||
|
||||
def add_body(self):
|
||||
self.__snake_body.append(list(self._position))
|
||||
|
||||
def get_position(self) -> tuple:
|
||||
return self.__snake_body[0]
|
||||
|
||||
def get_player_score(self) -> int:
|
||||
return self._score
|
||||
|
||||
def get_positions_snake_body(self) -> list:
|
||||
return self.__snake_body
|
||||
|
||||
def get_player_rect(self):
|
||||
return self.__player_rect
|
||||
|
||||
def get_playermovedirection(self):
|
||||
return self.__movedirection
|
||||
|
||||
def inc_score(self, points:int):
|
||||
self._score += points
|
||||
|
||||
|
||||
class Fruit(GameObject_new):
|
||||
def __init__(self, name: str, surface: pygame.Surface, surface_size: tuple, init_pos_x, init_pos_y, visibility: bool = True, rect_size:int = 10, color:tuple = (0,0,0), score_points = 0, sprite=str()) -> None:
|
||||
super().__init__(name, surface, surface_size, init_pos_x, init_pos_y, visibility)
|
||||
|
||||
self.__score_points = score_points
|
||||
self.__rect:pygame.Rect
|
||||
self.__rect_size = rect_size
|
||||
self.__color = color
|
||||
self.__image = pygame.image.load(sprite)
|
||||
|
||||
def draw(self):
|
||||
#self.__rect = pygame.draw.rect(self._surface, self.__color, (self._position[0], self._position[1], self.__rect_size, self.__rect_size))
|
||||
self.__rect = self._surface.blit(self.__image, self.get_position())
|
||||
|
||||
def get_rect(self) -> pygame.Rect:
|
||||
return self.__rect
|
||||
|
||||
def get_score_points(self) -> int:
|
||||
return self.__score_points
|
||||
|
||||
|
||||
|
||||
|
||||
class GOIMAGE(GameObject):
|
||||
def __init__(self, name: str, surface, mainscreensize: tuple, posx_init: int = 0, posy_init: int = 0, move_speed: int = 0, is_player: bool = False, is_rect: bool = True, color: tuple = (0, 0, 0), rect_size: tuple = (10, 10), image=str()) -> None:
|
||||
super().__init__(name, surface, mainscreensize, posx_init, posy_init, move_speed, is_player, is_rect, color, rect_size, image)
|
||||
|
||||
self.__image = pygame.image.load(image).convert()
|
||||
#self.__image = pygame.transform.scale(self.__image, (20, 20)) Scale the selected image
|
||||
|
||||
def move(self):
|
||||
pass
|
||||
|
||||
def draw(self):
|
||||
surface = self.get_surface()
|
||||
surface.blit(self.__image, self.get_position())
|
||||
30
modules/Game_new.py
Normal file
@@ -0,0 +1,30 @@
|
||||
#Behandelt später die Hauptschleife und Klassenobjekte
|
||||
class Game():
|
||||
def __init__(self) -> None:
|
||||
self.__state = {
|
||||
"started":False,
|
||||
"playermove":False,
|
||||
"win":False,
|
||||
"lose":False,
|
||||
"paused":False,
|
||||
"menu":False
|
||||
}
|
||||
|
||||
def get_state(self, state):
|
||||
return self.__state[state]
|
||||
|
||||
def change_state(self, state):
|
||||
"""Toggles the selected game state"""
|
||||
if(not self.__state[state]):
|
||||
self.__state[state] = True
|
||||
else:
|
||||
self.__state[state] = False
|
||||
|
||||
def scoreboard(self):
|
||||
pass
|
||||
|
||||
def spawn_fruit(self):
|
||||
pass
|
||||
|
||||
def spawn_player(self):
|
||||
pass
|
||||
25
modules/Labels.py
Normal file
@@ -0,0 +1,25 @@
|
||||
import pygame
|
||||
|
||||
class Label:
|
||||
def __init__(self, is_rect=False, pos=tuple, size=tuple, mainsurface=pygame.Surface) -> None:
|
||||
self._surface = pygame.Surface(size)
|
||||
self._mainsurface = mainsurface
|
||||
self._is_rect = is_rect
|
||||
self._pos = pos
|
||||
self._size = size
|
||||
|
||||
def get_surface(self):
|
||||
return self._surface
|
||||
|
||||
def draw(self):
|
||||
if(self._is_rect):
|
||||
rect = pygame.draw.rect(self._mainsurface, (0,0,0), (self._pos[0],self._pos[1], self._size[0], self._size[1]), 1)
|
||||
|
||||
else:
|
||||
print("Zeichne Surface!")
|
||||
pass
|
||||
|
||||
class Input_Label(Label):
|
||||
def __init__(self, is_rect=False, pos=tuple, size=tuple, mainsurface=pygame.Surface) -> None:
|
||||
super().__init__(is_rect, pos, size, mainsurface)
|
||||
|
||||
@@ -7,9 +7,9 @@ class statics:
|
||||
|
||||
|
||||
|
||||
def __init__(self) -> None:
|
||||
for x in self._menupoints:
|
||||
print(x)
|
||||
#def __init__(self) -> None:
|
||||
# for x in self._menupoints:
|
||||
# print(x)
|
||||
|
||||
pass
|
||||
# pass
|
||||
|
||||
@@ -77,7 +77,6 @@ class User:
|
||||
row = c.execute(sql)
|
||||
res = row.fetchone()
|
||||
c.execute(sql_update_login_date)
|
||||
|
||||
self.__sqlhandle.commit()
|
||||
self.__uid = res[0]
|
||||
self.__username = res[1]
|
||||
@@ -90,6 +89,26 @@ class User:
|
||||
|
||||
return True
|
||||
|
||||
def update_user_highscore(self, score:int):
|
||||
"""Updates users highscore"""
|
||||
sql = "SELECT * FROM user WHERE username ='"+self.getusername()+"'"
|
||||
sql_update_highscore = "UPDATE user SET highscore = "+str(score)+" WHERE username = '"+self.getusername()+"'"
|
||||
try:
|
||||
c = self.__sqlhandle.cursor()
|
||||
row = c.execute(sql)
|
||||
res = row.fetchone()
|
||||
c.execute(sql_update_highscore)
|
||||
self.__sqlhandle.commit()
|
||||
self.__uid = res[0]
|
||||
self.__username = res[1]
|
||||
self.__highscore = res[2]
|
||||
self.__lastlogin = res[3]
|
||||
|
||||
except:
|
||||
print("Fehler beim Update des Highscores")
|
||||
return False
|
||||
return True
|
||||
|
||||
def getplayed_time(self):
|
||||
return self.__played_time
|
||||
|
||||
@@ -97,7 +116,7 @@ class User:
|
||||
return self.__lastlogin
|
||||
|
||||
def getusername(self):
|
||||
return self.__username
|
||||
return str(self.__username)
|
||||
|
||||
|
||||
def gethighscore(self):
|
||||
@@ -120,6 +139,7 @@ class User:
|
||||
return self.__all_listed_users
|
||||
|
||||
def checkuserdb(self):
|
||||
"""Checks for existing user, else return false"""
|
||||
cursor = self.__sqlhandle.cursor()
|
||||
rows=cursor.execute("SELECT * FROM user")
|
||||
rows_count =len(list(rows))
|
||||
209
pygame-test.py
Normal file
@@ -0,0 +1,209 @@
|
||||
import pygame
|
||||
import pygame_menu
|
||||
import random as rand
|
||||
import modules.User as User
|
||||
import modules.Game_new as Game
|
||||
import modules.Labels as Label
|
||||
from modules.GameObject import *
|
||||
|
||||
pygame.init()
|
||||
MAINSCREEN_SIZE = (1024,768)
|
||||
MAINSCREEN = pygame.display.set_mode(MAINSCREEN_SIZE)
|
||||
|
||||
PLAYGROUND = pygame.Surface((1024,728))
|
||||
|
||||
pygame.display.set_caption("Snake_v1")
|
||||
|
||||
WEISS = (255,255,255)
|
||||
SCHWARZ = (0,0,0)
|
||||
GRUEN = (0,255,0)
|
||||
ROT = (255,0,0)
|
||||
|
||||
### FONTS ###
|
||||
|
||||
fonts = {
|
||||
"font1" : pygame.font.SysFont("times new roman", 18),
|
||||
"font2" : pygame.font.SysFont("times new roman", 26),
|
||||
"font3" : pygame.font.SysFont("times new roman", 32),
|
||||
"font4" : pygame.font.SysFont("times new roman", 48)
|
||||
}
|
||||
my_font = pygame.font.SysFont('times new roman', 26)
|
||||
my_font2 = pygame.font.SysFont('times new roman', 32)
|
||||
my_font3 = pygame.font.SysFont('times new roman', 46)
|
||||
|
||||
### TEXTLABELS ###
|
||||
surface_text_noplayer = fonts["font2"].render("Es existiert noch kein Spieler", True, SCHWARZ)
|
||||
surface_text_inputplayername = fonts["font1"].render("Bitte gib einen Namen ein: ", True, SCHWARZ)
|
||||
|
||||
labels = []
|
||||
|
||||
|
||||
active = True
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
#Handles all collided objects an adds it as playerfollower
|
||||
|
||||
def apply_name(input):
|
||||
print(input)
|
||||
if(len(input) <= 0):
|
||||
print("Kein Name eingegeben!")
|
||||
else:
|
||||
if(User.select(input) == False):
|
||||
User.createuser(input)
|
||||
elif(User.select(input) == True):
|
||||
print("Es existiert bereits ein Spieler mit diesem Namen!")
|
||||
|
||||
print(F"Hallo {User.getusername()}, dein letztes Spiel war am: {User.getlastlogin()} mit einem Highscore von: {User.gethighscore()}")
|
||||
|
||||
def get_text_input(dest=str):
|
||||
return dest
|
||||
|
||||
|
||||
surface_menu = pygame.Surface((400, 500))
|
||||
surface_menu.fill((244,244,244))
|
||||
surface_menu_rect = surface_menu.get_rect()
|
||||
|
||||
|
||||
|
||||
def percent_from_screen(base:int, percent:int) -> int:
|
||||
|
||||
perc_hundred = base/100
|
||||
|
||||
return int(perc_hundred*percent)
|
||||
|
||||
|
||||
|
||||
game = Game.Game()
|
||||
User = User.User()
|
||||
|
||||
input_label1 = Label.Input_Label(True, (50,50), (100,25), PLAYGROUND)
|
||||
labels.append(input_label1)
|
||||
|
||||
|
||||
player = Player("Player", PLAYGROUND, PLAYGROUND.get_size(), 100, 100, size=40)
|
||||
|
||||
def spawn_entities(x:int, list_of_objects:list):
|
||||
count = 0
|
||||
for y in range(x):
|
||||
rect_size = 80
|
||||
Entity = Block("Entitiy-"+str(count), MAINSCREEN, MAINSCREEN_SIZE, rand.randint(1,MAINSCREEN_SIZE[0]), rand.randint(1,MAINSCREEN_SIZE[1]), rand.randint(1,15), is_rect=True, rect_size=(rect_size,rect_size))
|
||||
Entity.get_name(True)
|
||||
list_of_objects.append(Entity)
|
||||
count += 1
|
||||
|
||||
fruits = [
|
||||
"data/models/fruit_1_1_scaled_2_red.png",
|
||||
"data/models/fruit_1_1_scaled_2_green.png",
|
||||
"data/models/fruit_1_1_scaled_2_yellow.png",
|
||||
"data/models/fruit_1_1_scaled_2_orange.png"
|
||||
]
|
||||
|
||||
background = pygame.surface.Surface((640,480))
|
||||
|
||||
x = 3600
|
||||
invert = False
|
||||
|
||||
counter = 0
|
||||
|
||||
#Fenster-Hauptschleife
|
||||
|
||||
spawn_fruit = True
|
||||
game_started = False
|
||||
text_input_activate = True
|
||||
text_input_buffer = str()
|
||||
|
||||
game.change_state("menu")
|
||||
|
||||
while active == True:
|
||||
MAINSCREEN.fill((55,148,38))
|
||||
PLAYGROUND.fill((244,244,244))
|
||||
for event in pygame.event.get():
|
||||
#print(event)
|
||||
if (event.type == pygame.QUIT):
|
||||
print("Programm wird geschlossen!")
|
||||
#print(spawned_entities, end="\n")
|
||||
active = False
|
||||
if(game.get_state("started")):
|
||||
if (event.type == pygame.KEYDOWN):
|
||||
if (event.key == pygame.K_UP):
|
||||
game_started = True
|
||||
if(player.get_playermovedirection()["down"] != True):
|
||||
player.change_direction("up")
|
||||
elif (event.key == pygame.K_DOWN):
|
||||
game_started = True
|
||||
if(player.get_playermovedirection()["up"] != True):
|
||||
player.change_direction("down")
|
||||
elif (event.key == pygame.K_RIGHT):
|
||||
game_started = True
|
||||
if(player.get_playermovedirection()["left"] != True):
|
||||
player.change_direction("right")
|
||||
elif (event.key == pygame.K_LEFT):
|
||||
game_started = True
|
||||
if(player.get_playermovedirection()["right"] != True):
|
||||
player.change_direction("left")
|
||||
|
||||
if(text_input_activate == True):
|
||||
if(event.type == pygame.KEYDOWN):
|
||||
text_input_buffer += event.unicode
|
||||
if(event.key == pygame.K_BACKSPACE):
|
||||
text_input_buffer = text_input_buffer[:-2]
|
||||
|
||||
print(text_input_buffer)
|
||||
|
||||
if(game.get_state("menu")):
|
||||
pass
|
||||
|
||||
text_surface_score = my_font.render('Score: '+str(player.get_player_score()), True, (0, 0, 0))
|
||||
text_surface_player = my_font.render("Player: " + User.getusername(), True, SCHWARZ, None)
|
||||
text_test = my_font.render("Test", True, SCHWARZ, None)
|
||||
|
||||
text_out = my_font.render(text_input_buffer, True, SCHWARZ, None)
|
||||
|
||||
|
||||
#input_label1.draw()
|
||||
pygame.draw.line(MAINSCREEN, SCHWARZ, (0,38), (MAINSCREEN_SIZE[0], 38), 2)
|
||||
|
||||
|
||||
PLAYGROUND.blit(text_out, (MAINSCREEN_SIZE[0]/2, MAINSCREEN_SIZE[1]/2))
|
||||
#pygame.draw.rect(surface_menu, (0,0,0), (0,0,400,500), 1, 7)
|
||||
#PLAYGROUND.blit(surface_menu, (20,20))
|
||||
|
||||
if(User.checkuserdb() == False):
|
||||
PLAYGROUND.blit(surface_text_noplayer, (MAINSCREEN_SIZE[0]/2 - surface_text_noplayer.get_width()/2, 10))
|
||||
PLAYGROUND.blit(surface_text_inputplayername, (MAINSCREEN_SIZE[0]/2 - surface_text_inputplayername.get_width()/2, 40))
|
||||
|
||||
if(game.get_state("started")):
|
||||
MAINSCREEN.blit(text_surface_score, (MAINSCREEN_SIZE[0]/2-text_surface_score.get_size()[0]/2,0)) #Paints the Scoreboard in Top/Center
|
||||
MAINSCREEN.blit(text_surface_player, (10, 0))
|
||||
|
||||
#If spawn_fruit is True then create a fruitobject and set spawn_fruit=false
|
||||
if(spawn_fruit == True):
|
||||
fruit = Fruit("Fruit", PLAYGROUND, PLAYGROUND.get_size(), init_pos_x=rand.randint(0, PLAYGROUND.get_size()[0]-40), init_pos_y=rand.randint(0, PLAYGROUND.get_size()[1]-40), color=ROT, rect_size=40, score_points=10, sprite=fruits[rand.randint(0, len(fruits)-1)])
|
||||
spawn_fruit = False
|
||||
|
||||
#Draws a fruit if a fruitobject is instanced
|
||||
if(fruit):
|
||||
fruit.draw()
|
||||
|
||||
player.draw()
|
||||
if(game_started == True and player.collide_self() == False):
|
||||
player.move(40)
|
||||
|
||||
if(player.collide_self()):
|
||||
game_started == False
|
||||
gameovertext = my_font2.render("Game Over!", True, SCHWARZ)
|
||||
if(player.get_player_score() > User.gethighscore()):
|
||||
User.update_user_highscore(player.get_player_score())
|
||||
PLAYGROUND.blit(gameovertext, (MAINSCREEN_SIZE[0]/2-gameovertext.get_size()[0]/2, MAINSCREEN_SIZE[1]/2-gameovertext.get_size()[1]/2))
|
||||
|
||||
if(player.collide_fruit(fruit.get_rect()) == True and fruit):
|
||||
player.add_body()
|
||||
player.inc_score(fruit.get_score_points())
|
||||
del fruit
|
||||
spawn_fruit=True
|
||||
|
||||
MAINSCREEN.blit(PLAYGROUND, (0,40))
|
||||
pygame.display.flip()
|
||||
clock.tick(60)
|
||||
pygame.quit()
|
||||
2
pyinstaller-cli-commands.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
pyinstaller qt-test.py --noconsole --upx-dir=c:\upx-packer\upx.exe #Upacked
|
||||
pyinstaller qt-test.py --onefile --noconsole --upx-dir=c:\upx-packer\upx.exe #Packed in onefile
|
||||
63
qt-test.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import random
|
||||
import threading
|
||||
from PySide6 import QtCore, QtWidgets, QtGui
|
||||
|
||||
count = 0
|
||||
args = []
|
||||
args.append(count)
|
||||
|
||||
def threadfunc(args):
|
||||
|
||||
for x in range(10000):
|
||||
print(args)
|
||||
pass
|
||||
|
||||
|
||||
|
||||
class MyWidget(QtWidgets.QWidget):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.hello = ["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"]
|
||||
|
||||
self.button = QtWidgets.QPushButton("Click me!")
|
||||
self.text = QtWidgets.QLabel("Hello World",
|
||||
alignment=QtCore.Qt.AlignCenter)
|
||||
|
||||
self.layout = QtWidgets.QVBoxLayout(self)
|
||||
self.layout.addWidget(self.text)
|
||||
self.layout.addWidget(self.button)
|
||||
self.button.clicked.connect(self.magic)
|
||||
|
||||
self.progress = QtWidgets.QProgressBar(self)
|
||||
self.progress.resize(800,30)
|
||||
self.progress.setValue(0)
|
||||
self.messagebox = QtWidgets.QMessageBox(parent=self, icon=QtWidgets.QMessageBox.Information)
|
||||
self.thread = threading.Thread(None, threadfunc, args=args)
|
||||
|
||||
@QtCore.Slot()
|
||||
def magic(self):
|
||||
self.text.setText(random.choice(self.hello))
|
||||
if(self.progress.value() != 100):
|
||||
self.progress.setValue(self.progress.value()+1)
|
||||
if(self.progress.value() == 10):
|
||||
self.messagebox.setWindowTitle("INFO")
|
||||
self.messagebox.setText("Abgeschlossen!")
|
||||
self.messagebox.show()
|
||||
self.thread.start()
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QtWidgets.QApplication([])
|
||||
|
||||
widget = MyWidget()
|
||||
|
||||
widget.resize(800, 600) #Setzt die Anfangsfenstergröße
|
||||
widget.setFixedSize(widget.size()) #Fixiert die vordefinierte Größe
|
||||
widget.show()
|
||||
#Mainloop
|
||||
sys.exit(app.exec())
|
||||
19
test.py
Normal file
@@ -0,0 +1,19 @@
|
||||
def test(string=str()):
|
||||
#print(string)
|
||||
return string
|
||||
|
||||
func_list = [ ]
|
||||
|
||||
i=0
|
||||
for anzahl in range(50):
|
||||
func_list.append(test("string-"+str(i)))
|
||||
i += 1
|
||||
|
||||
for func in func_list:
|
||||
if(func == "string-30"):
|
||||
print("Ziel erreicht!")
|
||||
print(func)
|
||||
|
||||
for count, func in enumerate(func_list):
|
||||
print(count, func)
|
||||
|
||||