Initial commit: Tetris Prototype
This commit is contained in:
commit
987845e4dc
9 files changed
+10449
No files matched your search
@@ -0,0 +1,110 @@
|
||||
#include "include/raylib.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
typedef struct Block {
|
||||
Vector2 position;
|
||||
int form, onGround;
|
||||
float speed;
|
||||
|
||||
struct Block *next;
|
||||
} Block;
|
||||
|
||||
|
||||
void createBlock(Block **head) {
|
||||
Block *block = MemAlloc(sizeof(Block));
|
||||
block->position = (Vector2){ 400, -40 };
|
||||
block->form = 1;
|
||||
block->onGround = 0;
|
||||
block->speed = 2;
|
||||
block->next = NULL;
|
||||
|
||||
// Falls die Liste leer ist
|
||||
if (*head == NULL) {
|
||||
*head = block;
|
||||
return;
|
||||
}
|
||||
|
||||
// Durch alle Blöcke iterieren und den neuesten am Schluss hinzufügen
|
||||
Block *currentBlock = *head;
|
||||
while (currentBlock->next != NULL) {
|
||||
currentBlock = currentBlock->next;
|
||||
}
|
||||
|
||||
currentBlock->next = block;
|
||||
}
|
||||
|
||||
|
||||
int main(void) {
|
||||
|
||||
// INIT
|
||||
const int screenWidth = 800;
|
||||
const int screenHeight = 450;
|
||||
InitWindow(screenWidth, screenHeight, "Raylib Manuell");
|
||||
|
||||
Block *block = { 0 };
|
||||
createBlock(&block);
|
||||
int blockMoving = 1;
|
||||
|
||||
SetTargetFPS(60);
|
||||
|
||||
while (!WindowShouldClose()) {
|
||||
// UPDATE GAME LOGIC
|
||||
Block *currentBlock = block;
|
||||
// Alle Blöcke fallen lassen
|
||||
while (currentBlock != NULL) {
|
||||
// Wenn Block noch nicht auf Boden, dann fallen
|
||||
if (currentBlock->onGround == 0) {
|
||||
|
||||
Block *collisionBlock = block;
|
||||
while (collisionBlock != NULL) {
|
||||
struct Rectangle rect1 = {currentBlock->position.x, currentBlock->position.y, 20, 20};
|
||||
struct Rectangle rect2 = {collisionBlock->position.x, collisionBlock->position.y, 20, 20};
|
||||
|
||||
if (CheckCollisionRecs(rect1, rect2)) {
|
||||
currentBlock->onGround = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (currentBlock->position.y < screenHeight - 20) {
|
||||
currentBlock->position.y += currentBlock->speed;
|
||||
} else {
|
||||
blockMoving = 0;
|
||||
currentBlock->onGround = 1;
|
||||
}
|
||||
|
||||
collisionBlock = collisionBlock->next;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
currentBlock = currentBlock->next;
|
||||
}
|
||||
|
||||
// Wenn sich kein Block mehr bewegt, einen neuen erstellen
|
||||
if (blockMoving == 0) {
|
||||
createBlock(&block);
|
||||
blockMoving = 1;
|
||||
}
|
||||
|
||||
// ZEICHNEN
|
||||
BeginDrawing();
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawFPS(20, 20);
|
||||
|
||||
currentBlock = block;
|
||||
while (currentBlock != NULL) {
|
||||
DrawRectangleV(currentBlock->position, (Vector2){20, 20}, BLUE);
|
||||
currentBlock = currentBlock->next;
|
||||
}
|
||||
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
|
||||
CloseWindow();
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user