diff --git a/src/main.cpp b/src/main.cpp
index c4366b3..d03e72f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,4 +1,5 @@
 #include <stdio.h>
+#include <time.h>
 
 extern "C"
 {
@@ -38,21 +39,30 @@ int main(int argc, char *argv[])
   }
   CreateSDLWindow();
 
-  while(1){
-  if(game.gameState != EXIT) {
-    if (game.gameState == RUNNING) {
-        processInputEvent();
-        DELAY(config.cycleDurationMs);
-        processInputEvent();
-        runGameCycle();
-    }
 
-  } else {
-    DestroySDLWindow();
-    SDL_Quit(); 
-    return 0;}
+
+
+
+  time_t now;
+  now = clock(); // Timer startet
+  game.timestampLastCycle = now;
+
+  while(game.gameState != EXIT) {
+    if (game.gameState == RUNNING) {
+        now = clock(); // Timer startet
+
+        if (now - game.timestampLastCycle > config.cycleDurationMs){
+          game.timestampLastCycle = now;
+          runGameCycle();
+        } else{
+          DELAY(5);     //verhindert maximale Durchlaufgeschwindigkeit der Schleife
+          processInputEvent();
+        }
+    }
   }
 
 
+  DestroySDLWindow();
+  SDL_Quit();
   return 0;
 }
diff --git a/src/render.c b/src/render.c
index 2ba6e07..57a833d 100644
--- a/src/render.c
+++ b/src/render.c
@@ -6,109 +6,108 @@
 #include "config.h"
 #include <stdio.h>
 
-SDL_Renderer* renderer;
-SDL_Window* window;
+
 
 void renderGame(){
-  SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
-  SDL_RenderClear(renderer);
+  SDL_SetRenderDrawColor(game.renderer, 0, 0, 0, 255);
+  SDL_RenderClear(game.renderer);
 
   SDL_Rect rect;    //Rechteck anlegen
   rect.w = config.blockSizePx;    //Breite festlegen
   rect.h = config.blockSizePx;    //Höhe festlegen
 
 //_______Head kreieren__________________________________________________
-  SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);   //RGB-Farbe Kopf
+  SDL_SetRenderDrawColor(game.renderer, 0, 255, 0, 255);   //RGB-Farbe Kopf
   rect.x = (game.snake.headX * config.blockSizePx);   //Abstand links
   rect.y = (game.snake.headY * config.blockSizePx);   //Abstand rechts
-  SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
+  SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
 
 
 //______Tail kreieren_________________________________________________________________
   for(int i = 1; i<game.snake.length; i++){
-    SDL_SetRenderDrawColor(renderer, 15, 179, 15, 255);   //RGB-Farbe Tail
+    SDL_SetRenderDrawColor(game.renderer, 15, 179, 15, 255);   //RGB-Farbe Tail
     rect.x = (game.snake.tail[i][0] * config.blockSizePx);   //Abstand links
     rect.y = (game.snake.tail[i][1] * config.blockSizePx);   //Abstand rechts
-    SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
+    SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
   }
 
 //______Portal kreieren________________________________________________________________________
   for (int i = 0; i < game.map.portalCount; i++)
   {
     switch(i) {     //Farben je nach Start-Portal-Nr.
-      case 0: SDL_SetRenderDrawColor(renderer, 90, 150, 255, 255); break;   //Start: hellblau
-      case 1: SDL_SetRenderDrawColor(renderer, 255, 150, 255, 255); break;      //Start: rosa
-      default: SDL_SetRenderDrawColor(renderer, 255, 150, 150, 255); break;      //Start: hellrot
+      case 0: SDL_SetRenderDrawColor(game.renderer, 90, 150, 255, 255); break;   //Start: hellblau
+      case 1: SDL_SetRenderDrawColor(game.renderer, 255, 150, 255, 255); break;      //Start: rosa
+      default: SDL_SetRenderDrawColor(game.renderer, 255, 150, 150, 255); break;      //Start: hellrot
     }
 
     //Start-Portal
     rect.x = (game.map.portals[i].posX * config.blockSizePx);
     rect.y = (game.map.portals[i].posY * config.blockSizePx);
 
-    SDL_RenderDrawRect(renderer, &rect);    //Rechteck rendern
+    SDL_RenderDrawRect(game.renderer, &rect);    //Rechteck rendern
 
     switch(i) {   //Farben je nach Ausgangs-Portal-Nr.
-      case 0: SDL_SetRenderDrawColor(renderer, 45, 45, 255, 255); break;   //Ausgang: dunkelblau
-      case 1: SDL_SetRenderDrawColor(renderer, 204, 0, 204, 255); break;      //Ausgang: violett
-      default: SDL_SetRenderDrawColor(renderer, 255, 50, 0, 255); break;      //Ausgang: rot
+      case 0: SDL_SetRenderDrawColor(game.renderer, 45, 45, 255, 255); break;   //Ausgang: dunkelblau
+      case 1: SDL_SetRenderDrawColor(game.renderer, 204, 0, 204, 255); break;      //Ausgang: violett
+      default: SDL_SetRenderDrawColor(game.renderer, 255, 50, 0, 255); break;      //Ausgang: rot
     }
 
     //Ausgangs-Portal
     rect.x = (game.map.portals[i].targetX * config.blockSizePx);
     rect.y = (game.map.portals[i].targetY * config.blockSizePx);
 
-    SDL_RenderDrawRect(renderer, &rect);    //Rechteck rendern
+    SDL_RenderDrawRect(game.renderer, &rect);    //Rechteck rendern
   }
 
 
 //_______Food kreieren_________________________________________________________________________
-  SDL_SetRenderDrawColor(renderer, 255, 200, 0, 255);   //RGB-Farbe Food
+  SDL_SetRenderDrawColor(game.renderer, 255, 200, 0, 255);   //RGB-Farbe Food
   rect.x = (game.foodX*config.blockSizePx);   //Abstand links
   rect.y = (game.foodY* config.blockSizePx);   //Abstand rechts
-  SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
-   SDL_SetRenderDrawColor(renderer, 255, 140, 0, 255);   //RGB-Farbe Food Rahmen
-     SDL_RenderDrawRect(renderer, &rect);    //Rechteck rendern
+  SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
+   SDL_SetRenderDrawColor(game.renderer, 255, 140, 0, 255);   //RGB-Farbe Food Rahmen
+     SDL_RenderDrawRect(game.renderer, &rect);    //Rechteck rendern
 
 
 
 //______Collisions kreieren_________________________________________________________________________
   for(int i = 0; i < game.map.collisionCount; i++){
-    SDL_SetRenderDrawColor(renderer, 112, 128, 144, 255);   //RGB-Farbe Wand
+    SDL_SetRenderDrawColor(game.renderer, 112, 128, 144, 255);   //RGB-Farbe Wand
     rect.x = (game.map.collisions[i].posX*config.blockSizePx);   //Abstand links
     rect.y = (game.map.collisions[i].posY* config.blockSizePx);   //Abstand rechts
-    SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
-    SDL_SetRenderDrawColor(renderer, 80, 90, 100, 255);   //RGB-Farbe Wand-Rand
-    SDL_RenderDrawRect(renderer, &rect);    //Rechteck rendern
+    SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
+    SDL_SetRenderDrawColor(game.renderer, 80, 90, 100, 255);   //RGB-Farbe Wand-Rand
+    SDL_RenderDrawRect(game.renderer, &rect);    //Rechteck rendern
   }
 
 //_________________Augen___________________________________________________
-  SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
+  SDL_SetRenderDrawColor(game.renderer, 255, 255, 255, 255);
   rect.w = config.blockSizePx/4;    //Breite festlegen
   rect.h = config.blockSizePx/4;    //Höhe festlegen
   if (game.snake.direction == LEFT || game.snake.direction == RIGHT){
   //oberes Auge  
   rect.x = (game.snake.headX * config.blockSizePx) + config.blockSizePx/2.5;
   rect.y = (game.snake.headY * config.blockSizePx) + config.blockSizePx/5; 
-  SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
+  SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
   //unteres Auge
   rect.x = (game.snake.headX * config.blockSizePx) + config.blockSizePx/2.5;
   rect.y = (game.snake.headY * config.blockSizePx) + config.blockSizePx/1.7; 
-  SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
+  SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
   
   } else {
   //linkes Auge  
   rect.x = (game.snake.headX * config.blockSizePx) + config.blockSizePx/5;
   rect.y = (game.snake.headY * config.blockSizePx) + config.blockSizePx/2.5; 
-  SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
+  SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
   //rechtes Auge
   rect.x = (game.snake.headX * config.blockSizePx) + config.blockSizePx/1.7;   //Abstand links
   rect.y = (game.snake.headY * config.blockSizePx) + config.blockSizePx/2.5; 
-  SDL_RenderFillRect(renderer, &rect);    //Rechteck rendern
+  SDL_RenderFillRect(game.renderer, &rect);    //Rechteck rendern
   }
-  SDL_RenderDrawRect(renderer, &rect);    //Rechteck rendern
+  SDL_RenderDrawRect(game.renderer, &rect);    //Rechteck rendern
 
 //______Fenster aktualisieren____________________________________________
-  SDL_RenderPresent(renderer);    //Fenster aktualisieren
+  SDL_RenderPresent(game.renderer);    //Fenster aktualisieren
 
 }
 
@@ -119,14 +118,14 @@ int CreateSDLWindow(){
 
 
     // Erstelle ein SDL-Fenster
-  SDL_Window* window = SDL_CreateWindow("Snake", 350, 50, config.windowSize, config.windowSize, SDL_WINDOW_OPENGL);
-    if (window == NULL) {
+  game.window = SDL_CreateWindow("Snake", 350, 50, config.windowSize, config.windowSize, SDL_WINDOW_OPENGL);
+    if (game.window == NULL) {
         printf("Fenster konnte nicht erstellt werden! SDL_Error: %s\n", SDL_GetError());
         return 1;
     }
 
-  renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
-    if (renderer == NULL) {
+  game.renderer = SDL_CreateRenderer(game.window, -1, SDL_RENDERER_ACCELERATED);
+    if (game.renderer == NULL) {
         printf("Renderer konnte nicht erstellt werden! SDL_Error: %s\n", SDL_GetError());
         return 1;
     }
@@ -135,6 +134,6 @@ int CreateSDLWindow(){
 
 void DestroySDLWindow(){
       // Zerstöre das Fenster und beende SDL
-    SDL_DestroyRenderer(renderer);
-    SDL_DestroyWindow(window);
+    SDL_DestroyRenderer(game.renderer);
+    SDL_DestroyWindow(game.window);
 }
\ No newline at end of file