Compare commits

..

19 Commits

Author SHA1 Message Date
Maximilian Ruhm
eafd6f3d92 finish 2023-10-23 19:11:26 +02:00
46cb3f22c4 editor fix 2023-10-23 00:42:12 +02:00
98e71893f4 maintheme 2023-10-22 23:20:16 +02:00
b78310728e sounds 2023-10-22 23:07:22 +02:00
82e3afcfe5 all work today 2023-10-22 22:58:49 +02:00
Maximilian Ruhm
a527307ee1 code quality 2023-10-22 14:02:08 +02:00
175c0d238e beautify and prepare for losing 2023-10-22 01:39:39 +02:00
Maximilian Ruhm
0db9e72d8d sun 2023-10-21 13:06:37 +02:00
92a6ace93b old map thing 2023-10-21 00:52:46 +02:00
ca87f13623 yes 2023-10-21 00:41:17 +02:00
b269d39f62 did all the things to prepare 2023-10-20 01:17:13 +02:00
Maximilian Ruhm
ff4d996155 back to main menu button 2023-10-19 00:50:32 +02:00
d991e79538 map editor deletion 2023-10-19 00:10:09 +02:00
53b9f7b136 map editor now integrated in main menu 2023-10-18 23:25:20 +02:00
22a429cba8 map editor ground work 2023-10-18 14:02:22 +02:00
Maximilian Ruhm
cd98f3bc12 rebuild and map editor 2023-10-18 12:20:18 +02:00
c3f0390160 refactor 2023-10-05 14:13:17 +02:00
c5d00cdfc2 collision with top and bottom of tiles 2023-10-05 10:52:44 +02:00
40e00559c6 new jump method 2023-10-05 10:52:14 +02:00
14 changed files with 1954 additions and 185 deletions

0
game/background.pde Normal file
View File

109
game/game.pde Normal file
View File

@@ -0,0 +1,109 @@
//TODO
//- Start Screen
//- Level Editor (click with mouse spawns or deletes tiles)
// - Hotkey to slide the window right and left
// - Find a way to make menus
//- Movement berechnen mit move = gravitation - speed
// - Jump als Zahl, die langsam kleiner wird
//
// Make Colission better:
// - https://happycoding.io/tutorials/processing/collision-detection
// jumping related
float speed = 20;
float gravitation = 9.81;
float jumpheight;
boolean canjump = true;
// for moving x-axis (mostly depracted)
// But dont delete yet!!
// PVector direction = new PVector(0,0);
PVector pos = new PVector(220, 50);
int playerRadius = 25;
// float actualPos;
PVector tilesize = new PVector(100, 50);
int[][] level;
int tilesmoved = 0;
int tilespeed = 4;
// The actual game
void play() {
// calculate actual position on ground
// actualPos = height - pos.y;
// player
rectMode(CENTER);
rect(pos.x, pos.y, playerRadius, playerRadius);
moveTiles(tilespeed);
baseRect();
newJump();
collisionTest();
generate_tiles();
helper();
menuButton();
fill(0);
text(tilesmoved, 700, 50);
tilesmoved = tilesmoved + tilespeed;
fill(255);
}
void moveTiles(int tilesspeed) {
for (int i = 0; i < level.length; i++) {
level[i][0] = level[i][0] - tilesspeed;
}
}
void moveTilesBack(int tilespeed) {
for (int i = 0; i < level.length; i++) {
level[i][0] = level[i][0] + tilesmoved;
}
tilesmoved = 0;
}
// Handles Jumping
float movement;
float jumpspeed;
void newJump() {
movement = gravitation - jumpspeed;
pos.set(pos.x, pos.y + movement);
if (jumpspeed > 0) {
jumpspeed--;
}
}
// This is an absolute mess
// TODO Collision erweitern wie in https://happycoding.io/tutorials/processing/collision-detection
void collisionTest() {
// Collision with baseline
if ( pos.y > 0.850*height - playerRadius/2 ) {
pos.set(pos.x, 0.850*height - playerRadius/2);
canjump = true;
}
// Collision with all the tiles bottom site
for (int i = 0; i < level.length; i++) {
boolean xSideEdges = pos.x > level[i][0] - tilesize.x/2 && pos.x < level[i][0] + tilesize.x/2;
boolean ySideEdges = pos.y < level[i][1] + tilesize.y/2 && pos.y > level[i][1] - tilesize.y/2;
if (level[i][4] == 0) {
// Bottom
if ( (xSideEdges) && (ySideEdges)) {
pos.set(pos.x, level[i][1] + tilesize.y/2);
}
// Top
if ( (xSideEdges) && (pos.y < level[i][1] + tilesize.y/2 && pos.y > level[i][1] - tilesize.y/2 - playerRadius)) {
pos.set(pos.x, level[i][1] - tilesize.y/2 - 15);
canjump = true;
}
}
}
}

86
game/keys.pde Normal file
View File

@@ -0,0 +1,86 @@
// Here are all the keys that are used
boolean iseditorModeRect = true;
boolean iseditorModeSpike = false;
float volume = 0.2;
void keyPressed () {
if (key == 'm') {
if (volume == 0.2) {
volume = 0;
} else {
volume = 0.2;
}
gamesoundtrack.amp(volume);
}
if (ismenu) {
} else if (isgame) {
if (key == CODED) {
// if (keyCode == RIGHT) {
// direction.x = +1;
// pos.x = pos.x + direction.x * speed;
// } else if (keyCode == LEFT) {
// direction.x = -1;
// pos.x = pos.x + direction.x * speed;
// }
} else if (key == ' ') {
if(canjump) {
jumpspeed =+ 31;
canjump = false;
jumpsound.play();
}
}
} else if (iseditor) {
if (key == 's') {
savetofile("save");
println("saved");
} else if (key == ' ') {
if(iseditorModeRect) {
iseditorModeRect = false;
iseditorModeSpike = true;
} else if (iseditorModeSpike) {
iseditorModeRect = true;
iseditorModeSpike = false;
}
println("mode changed");
} else if (key == CODED) {
if (keyCode == RIGHT) {
screenx = screenx + 50;
println("moved right!");
println(screenx);
} else if (keyCode == LEFT) {
screenx = screenx - 50;
println("moved right!");
println(screenx);
}
}
}
}
// Add tiles in editor mode
int runnerRect = 0;
void mouseReleased() {
if(iseditor) {
if (mouseButton == LEFT) {
if(iseditorModeRect) {
level[runnerRect][0] = mouseX+screenx;
level[runnerRect][1] = mouseY;
level[runnerRect][2] = 100;
level[runnerRect][3] = 50;
level[runnerRect][4] = 0;
println("generated");
runnerRect = runnerRect + 1;
println(runnerRect);
} else if (iseditorModeSpike) {
level[runnerRect][0] = mouseX+screenx;
level[runnerRect][1] = mouseY;
level[runnerRect][2] = 50;
level[runnerRect][3] = 50;
level[runnerRect][4] = 1;
println("generated");
runnerRect = runnerRect + 1;
println(runnerRect);
}
}
}
}

173
game/main.pde Normal file
View File

@@ -0,0 +1,173 @@
import processing.sound.*;
SoundFile jumpsound;
SoundFile deathsound;
SoundFile gamesoundtrack;
void setup() {
jumpsound = new SoundFile(this, "./sounds/jump.mp3");
deathsound = new SoundFile(this, "./sounds/fail.mp3");
gamesoundtrack = new SoundFile(this, "./sounds/maintheme.mp3");
gamesoundtrack.loop(1, 0.2);
size(800,800);
frameRate(60);
smooth(4);
level = loadJson("./saves/save.json");
}
void draw() {
// debug();
if (ismenu) {
mainMenu();
} else if (isgame) {
drawBackground();
play();
} else if (iseditor) {
mapEditor();
}
}
boolean ismenu = true;
boolean isgame = false;
boolean iseditor = false;
// This is the start screen and main menu. It has a few Buttons
void mainMenu() {
background(246, 244, 235);
fill(116, 155, 194);
textSize(128);
textAlign(CENTER);
text("p4dash", width/2, height/2 - 100);
// go to game
fill(70, 130, 169);
if (drawRectWithMouseColission(width/2, height/2, 300, 100)) {
if (mousePressed) {
ismenu = false;
isgame = true;
}
}
fill(0);
textSize(40);
text("Play", width/2, height/2);
// go to editor
fill(70, 130, 169);
if (drawRectWithMouseColission(width/2, height/2+200, 300, 100)) {
if (mousePressed) {
ismenu = false;
iseditor = true;
}
}
fill(0);
textSize(40);
text("Editor", width/2, height/2+200);
fill(145, 200, 228);
// exit game
if (drawRectWithMouseColission(50, 100, 80, 40)) {
if (mousePressed) {
exit();
}
}
fill(0);
textSize(40);
textAlign(CENTER);
text("Exit", 50, 110);
// Text in corner
textAlign(LEFT);
fill(0);
textSize(20);
text("m - mute audio", 10, 700);
}
void menuButton() {
fill(145, 200, 228);
if (drawRectWithMouseColission(50, 50, 80, 40)) {
if (mousePressed) {
ismenu = true;
iseditor = false;
isgame = false;
moveTilesBack(tilespeed);
savetofile("save");
screenx = 0;
}
}
fill(0);
textSize(40);
textAlign(CENTER);
text("Exit", 50, 50+10);
}
// Map Editor Mode
void mapEditor() {
background(255);
baseRect();
generate_editor_tiles();
// generate_tiles();
menuButton();
// Texts at Top
textAlign(RIGHT);
textSize(20);
text("SPACE - Toggle between rect and triangle", 790, 50);
text("Left Click - Place block", 790, 70);
text("Right Click - Delete Block", 790, 90);
text("Arrows - Move right and left", 790, 110);
}
// Rectangle with editor colission
boolean drawRectWithMouseColission(int x, int y, int rectwidth, int rectheight) {
// Draw A Rect
rectMode(CENTER);
rect(x, y, rectwidth, rectheight);
// Check it for collission
if((mouseX > x - rectwidth/2 && mouseX < x + rectwidth/2) && (mouseY > y - rectheight/2 && mouseY < y + rectheight/2)) {
return true;
} else {
return false;
}
}
// Triangle with editor colission
boolean drawTriangleWithMouseColission(int x, int y, int rectwidth, int rectheight) {
// Draw A Rect
rectMode(CENTER);
triangle(x - rectwidth/2, y, x + rectwidth/2, y, x, y - rectheight);
// Check it for collission
if(dist(mouseX, mouseY, x+rectwidth/2, y-rectheight/2) < rectheight/1.5) {
return true;
} else {
return false;
}
}
boolean drawTriangleWithPlayerColission(int x, int y, int rectwidth, int rectheight) {
// Draw A Rect
rectMode(CENTER);
triangle(x - rectwidth/2, y, x + rectwidth/2, y, x, y - rectheight);
// Check it for collission
if(dist(pos.x, pos.y, x+rectwidth/2, y-rectheight/2) < rectheight/2) {
return true;
} else {
return false;
}
}
// These are my Debugger Functions
void debug() {
// println(screenoffset);
// println(level[0][0]);
}
// Neat helper function, that gives us coordinates of point while clicking
void helper() {
if (mousePressed == true){
println(mouseX, mouseY);
}
}

182
game/map.pde Normal file
View File

@@ -0,0 +1,182 @@
// BUG level editor x position bleibt ingame
// TODO Completly rework colission
// TODO Die when touching triangle
// moveTilesBack() and High Score Tracking
// No Unlimited Jumping
int screenx = 0;
// level generation for playable
void generate_tiles() {
stroke(0);
for (int i = 0; i < level.length; i++ ) {
if (level[i][4] == 0) {
rect(level[i][0]-screenx, level[i][1], level[i][2], level[i][3]);
} else {
if (drawTriangleWithPlayerColission(level[i][0] -screenx, level[i][1], level[i][2], level[i][3])) {
moveTilesBack(tilespeed);
deathsound.play();
}
}
}
}
// Generate the tiles for Editor View (tiles that are deletable with mouse)
void generate_editor_tiles() {
for (int i = 0; i < 100; i++ ) {
// rect(level[i][0]-screenx, level[i][1], level[i][2], level[i][3]);
if(level[i][4] == 0) {
if (drawRectWithMouseColission(level[i][0]-screenx, level[i][1], level[i][2], level[i][3])) {
if (mousePressed && iseditor) {
if (mouseButton == RIGHT) {
level[i][0] = 0;
level[i][1] = 0;
level[i][2] = 0;
level[i][3] = 0;
level[i][4] = 0;
}
}
}
} else {
if (drawTriangleWithMouseColission(level[i][0]-screenx, level[i][1], level[i][2], level[i][3])) {
if (mousePressed && iseditor) {
if (mouseButton == RIGHT) {
level[i][0] = 0;
level[i][1] = 0;
level[i][2] = 0;
level[i][3] = 0;
level[i][4] = 0;
}
}
}
}
}
}
void baseRect() {
line(0, 0.850*height, width, 0.850*height);
fill(255);
}
// Draws all the Background elements like sea and Beach
void drawBackground() {
color sky = color(94, 218, 252);
color sand = color(235, 218, 174);
color darksand = color(232, 177, 120);
color darkersand = color(166, 110, 51);
color sea = color(51, 169, 255);
color seaend = color(146, 254, 255);
color sun = color(247, 178, 2);
// sky
background(sky);
// sea
for(int y = 400; y < 650; y++){
float inter = map(y, 400, 650, 0, 1);
color c = lerpColor(sea, seaend, inter);
stroke(c);
line(0, y, width, y);
noStroke();
}
// Beach
fill(sand);
quad(0, 650, width, 650, width, height, 0, height);
// Player stands on this
fill(darksand);
quad(0, 0.850*height, width, 0.850*height, width, height, 0, height);
//sun
fill(sun);
ellipse(130, 100, 70, 70);
randomSeed(0);
drawPalm(100, 700);
drawPalm(200, 700);
drawPalm(300, 700);
drawPalm(400, 700);
fill(0, 200);
stroke(darkersand);
for (int i = 0; i < 500; i++) {
point(random(0, width), random(700, 800));
}
stroke(0);
fill(0);
}
// No Clouds yet
void drawCloud() {
ellipse(224, 184, 220, 220);
}
// Draws a slightly randomised Palm
void drawPalm(int startingpoint_x, int startingpoint_y) {
fill(108, 88, 51);
float randomnumber = int(random(10, 16));
float schwanken = int(random(-2, 2));
int offset = 8;
PVector endpoint = new PVector(startingpoint_x, startingpoint_y - randomnumber * offset);
for (int i = 0; i <= randomnumber; i++) {
triangle(endpoint.x+i*schwanken, endpoint.y+i*offset, endpoint.x+10+i*schwanken, endpoint.y+10+i*offset, endpoint.x+20+i*schwanken, endpoint.y+i*offset);
}
fill(93, 133, 47);
quad(endpoint.x+10, endpoint.y, endpoint.x - 12, endpoint.y - 8, endpoint.x - 50, endpoint.y + 20, endpoint.x - 5, endpoint.y + 12);
quad(endpoint.x+10, endpoint.y, endpoint.x + 22, endpoint.y - 8, endpoint.x + 60, endpoint.y + 20, endpoint.x + 15, endpoint.y + 12);
}
//// This Handles loading and saving the level
JSONArray json;
// This saves the Current save to file
int savetofile(String filename) {
json = new JSONArray();
for (int i = 0; i < level.length; i++) {
JSONArray mapsave = new JSONArray();
mapsave.setInt(0, level[i][0]);
mapsave.setInt(1, level[i][1]);
mapsave.setInt(2, level[i][2]);
mapsave.setInt(3, level[i][3]);
mapsave.setInt(4, level[i][4]);
json.setJSONArray(i, mapsave);
}
saveJSONArray(json,"./saves/" + filename + ".json");
return 1;
}
boolean checkSaveFile(String filepath) {
return new File(dataPath(filepath)).exists();
}
// Check if there already is a safefile and load it if it is possible. If not load empty array
int[][] loadJson(String jsonfile) {
if (!checkSaveFile("./saves/save.json")) {
JSONArray values = loadJSONArray(jsonfile);
// println(values.size());
int[][] arrayfromjson = new int[values.size()][values.size()];
for (int i = 0; i < values.size(); i++) {
JSONArray jsontoarray = values.getJSONArray(i);
int x = jsontoarray.getInt(0);
int y = jsontoarray.getInt(1);
int rectwidth = jsontoarray.getInt(2);
int rectheight = jsontoarray.getInt(3);
int isspike = jsontoarray.getInt(4);
arrayfromjson[i][0] = x;
arrayfromjson[i][1] = y;
arrayfromjson[i][2] = rectwidth;
arrayfromjson[i][3] = rectheight;
arrayfromjson[i][4] = isspike;
}
return arrayfromjson;
} else {
int[][] arrayfromjson = new int[100][5];
return arrayfromjson;
}
}

702
game/saves/save.json Normal file
View File

@@ -0,0 +1,702 @@
[
[
-28,
0,
0,
0,
0
],
[
-28,
0,
0,
0,
0
],
[
649,
677,
50,
50,
1
],
[
-28,
0,
0,
0,
0
],
[
-28,
0,
0,
0,
0
],
[
580,
391,
100,
50,
0
],
[
265,
310,
100,
50,
0
],
[
543,
479,
50,
50,
1
],
[
278,
402,
50,
50,
1
],
[
1394,
429,
100,
50,
0
],
[
1469,
574,
100,
50,
0
],
[
1742,
644,
100,
50,
0
],
[
1597,
453,
100,
50,
0
],
[
1622,
652,
100,
50,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
],
[
-109,
0,
0,
0,
0
]
]

BIN
game/sounds/fail.mp3 Normal file

Binary file not shown.

BIN
game/sounds/jump.mp3 Normal file

Binary file not shown.

BIN
game/sounds/maintheme.mp3 Normal file

Binary file not shown.

26
game/unused.pde Normal file
View File

@@ -0,0 +1,26 @@
void rectWithText(float rectX, float rectY, float rectWidth, float rectHeight, String rectText, float ts) {
// rect
rectMode(CENTER);
rect(rectX, rectY, rectWidth, rectHeight);
// text
textSize(ts);
textAlign(CENTER,CENTER);
fill(0);
text(rectText, rectX, rectY);
// stop painting
noFill();
}
void menu() {
rectWithText(width/2, height/2, 100, 50, "test", 40);
}
// This is basically the Level file:
// It consists out of an array, that spawns tiles
// It is also checked in collisionTest()
int[] tiles_x = { 300, 50, 600, 50};
int[] tiles_y = { 500, 50, 600, 200 };

18
map/map.json Normal file
View File

@@ -0,0 +1,18 @@
[
[
50,
50
],
[
417,
414
],
[
602,
165
],
[
308,
296
]
]

56
map/map.pde Normal file
View File

@@ -0,0 +1,56 @@
// void setup() {
// size(800,800);
// json = loadJSONArray("map.json");
// JSONObject values = json.getJSONObject(1);
// int x = values.getInt("x");
// print(x);
// }
// void draw() {
// background(255);
// generate_tiles();
// }
void generate_tiles() {
for (int i = 0; i < level.length; i++ ) {
rect(level[i][0]-screenx, level[i][1], level[i][2], level[i][3]);
}
}
int runnerRect = 0;
void mouseReleased() {
level[runnerRect][0] = mouseX+screenx;
level[runnerRect][1] = mouseY;
level[runnerRect][2] = 50;
level[runnerRect][3] = 50;
println("generated");
runnerRect = runnerRect + 1;
println(runnerRect);
}
int[][] level = new int[100][4];
JSONArray json;
int savetofile(String filename) {
json = new JSONArray();
for (int i = 0; i < level.length; i++) {
JSONArray mapsave = new JSONArray();
mapsave.setInt(0, level[i][0]);
mapsave.setInt(1, level[i][1]);
mapsave.setInt(2, level[i][2]);
mapsave.setInt(3, level[i][3]);
json.setJSONArray(i, mapsave);
}
saveJSONArray(json, filename + ".json");
return 1;
}
int screenx = 0;

602
map/save.json Normal file
View File

@@ -0,0 +1,602 @@
[
[
132,
131,
50,
50
],
[
307,
381,
50,
50
],
[
582,
155,
50,
50
],
[
568,
582,
50,
50
],
[
120,
440,
50,
50
],
[
624,
283,
50,
50
],
[
517,
562,
50,
50
],
[
1174,
145,
50,
50
],
[
1126,
492,
50,
50
],
[
858,
596,
50,
50
],
[
963,
201,
50,
50
],
[
1342,
589,
50,
50
],
[
1622,
495,
50,
50
],
[
1687,
130,
50,
50
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
],
[
0,
0,
0,
0
]
]

View File

@@ -1,185 +0,0 @@
//TODO
//- Start Screen
//- Level Editor (click with mouse spawns or deletes tiles)
// - Hotkey to slide the window right and left
// jumping related
float speed = 20;
float gravitation = 9.81;
float jumpheight;
float jumpcooldown = 12;
// for moving x-axis (mostly depracted)
// But dont delete yet!!
PVector movement = new PVector(0,0);
PVector direction = new PVector(0,0);
PVector pos = new PVector(220, 50);
int playerRadius = 25;
float actualPos;
void setup() {
size(800,800);
frameRate(60);
smooth(4);
}
void draw() {
// rectMode(CENTER);
// rect(50, 50, 100, 50);
// textAlign(CENTER);
// fill(0);
// text("test", 50, 50);
// noFill();
menu();
// play();
helper();
}
boolean ismenu;
void menu() {
rectWithText(width/2, height/2, 100, 50, "test", 40);
}
void rectWithText(float rectX, float rectY, float rectWidth, float rectHeight, String rectText, float ts) {
// rect
rectMode(CENTER);
rect(rectX, rectY, rectWidth, rectHeight);
// text
textSize(ts);
textAlign(CENTER,CENTER);
fill(0);
text(rectText, rectX, rectY);
// stop painting
noFill();
}
void mouseClicked() {
}
// The actual game
void play() {
// calculate actual position on ground
actualPos = height - pos.y;
background(255);
// player
rectMode(CENTER);
rect(pos.x, pos.y, playerRadius, playerRadius);
baseline();
collisionTest();
cooldown();
jumpToJumpheight();
generate_tiles();
helper();
}
// This is basically the Level file:
// It consists out of an array, that spawns tiles
// It is also checked in collisionTest()
int[] tiles_x = { 300, 50, 600 };
int[] tiles_y = { 500, 50, 600 };
void generate_tiles() {
for (int i = 0; i < tiles_x.length; i++ ) {
rect(tiles_x[i], tiles_y[i], 50, 50);
}
}
// TODO Collision erweitern wie in https://happycoding.io/tutorials/processing/collision-detection
void collisionTest() {
// Collision with baseline
if ( pos.y > baseline_y - playerRadius ) {
pos.set(pos.x, baseline_y - playerRadius);
}
// Collision with all the tiles top site
for (int i = 0; i < tiles_x.length; i++) {
if ((pos.x > tiles_x[i]-25 && pos.x < tiles_x[i]+25) && pos.y < tiles_y[i] - playerRadius) {
pos.set(pos.x, tiles_y[i] - playerRadius);
}
}
}
int baseline_y = 700;
void baseline() {
line(0, baseline_y, width, baseline_y);
}
// ##### Movement related
//
// all there is to jumping
void jumpToJumpheight() {
// control gravitation
pos.set(pos.x, pos.y + gravitation);
// turn gravity of if we are jumping
if (actualPos < jumpheight) {
gravitation = 0;
} else {
gravitation = 9.81;
}
if (actualPos < jumpheight) {
pos.y = pos.y - speed;
jumpcooldown = 40;
} else {
jumpheight = 0;
}
}
// count down jumping cooldown
void cooldown() {
if (jumpcooldown > 0) {
jumpcooldown = jumpcooldown-1;
}
}
// actions for moving
void keyPressed() {
if (key == CODED)
{
if (keyCode == LEFT)
{
direction.x = -1;
pos.x = pos.x + direction.x * speed;
}
else if (keyCode == RIGHT)
{
//if (directionX<0) {
direction.x = +1;
pos.x = pos.x + direction.x * speed;
//}
}
if (keyCode == UP && jumpcooldown == 0)
{
//if (directionY<0) {
jumpheight += 400;
//}
}
// else if (keyCode == DOWN)
// {
// //if (directionY<0) {
// direction.y = +1;
// pos.y = pos.y + direction.y * speed;
// //}
// }
}
}
// Neat helper function, that gives us coordinates of point while clicking
void helper() {
if (mousePressed == true){
println(mouseX, mouseY);
}
}