Pong game within arduino, Screen freezes after game runs

I follow this guide to try to make pong work within the arduino IDE and using the a black and white OLED screen. I have included some more libraries since I thougth that might be the problem but it didnt change anything.

The guide: Arduino Retro Gaming With an OLED Display

This is my Code:

#include <Adafruit_SSD1306.h>
#include <splash.h>

#include <Adafruit_GFX.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>
#include “U8glib.h”
// Libraries för projektet

#include <SPI.h>
#include <Wire.h>

// konfigurerar Skärmen

Adafruit_SSD1306 display(4);

// Variabler för att kunna köra spelet.

int resolution[2] = {128, 64}, ball[2] = {20, (resolution[1] / 2)};

//pixel size är const eftersom den är constant (alltså alltid samma) Denna variablel ger storlek till bollen, väggarna och

const int PIXEL_SIZE = 8, WALL_WIDTH = 4, PADDLE_WIDTH = 4, BALL_SIZE = 4, SPEED = 3;

// playerScore håller koll på vad det står i matchen.

int playerScore = 0, aiScore = 0, playerPos = 0, aiPos = 0;

// Variabel för var bollen är atm.

char ballDirectionHori = ‘R’, ballDirectionVerti = ‘S’;
boolean inProgress = true;

void setup() {
// put your setup code here, to run once:

// Återigen Konfigurerar Skärmen.

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

// display.display säger till skärmen vad som ligger lagras / vad som ska visas vilket är ingenting till en början.

display.display();
}

void loop() {

// Håller koll på poängen och slutar spelet när antingen spelaren eller datorn når 9 poäng.

if (aiScore > 9 || playerScore > 9) {
inProgress = false;
}

if (inProgress) {
eraseScore();
eraseBall(ball[0], ball[1]);
}
// Flyttar bollen up diagonalt

if (ballDirectionVerti == ‘U’) {
ball[1] = ball[1];
}

// Flyttar botteln ner diagonalt

if (ballDirectionVerti == ‘D’) {
ball[1] = ball[1] + SPEED;
}

// Sätter upp stuts i kanten av en paddel blir en diagonal motattack.

if (ball[1] <= 0) {
ballDirectionVerti = ‘U’;
}

if (ballDirectionHori == ‘R’) {

// Flyttar bollen //

ball[0] = ball[0] + SPEED;
if (ball[0] >= (resolution[0] - 6)) {
if ((aiPos + 12) >= ball[1] && (aiPos - 12) <= ball[1]) {
ballDirectionVerti = ‘D’;
}
else {
ballDirectionVerti = ‘S’;
}
ballDirectionHori = ‘L’;
}
else {
// MÅÅÅÅL!!
ball[0] = 6; // Flyttar bollen till andra sidan skärmen
ballDirectionVerti = ‘S’; // Resetar bollen så den åker i en rak linje igen
ball[1] = resolution[1] / 2; // Flyttar bollen till mitten av skärmen
++playerScore; // Ger spelaren 1 poäng
}
}

if (ballDirectionHori == ‘L’) {
ball[0] = ball[0] - SPEED; // Flyttar bollen
if (ball[0] <= 6) { // Fixar vertical bollstutsar.
ballDirectionVerti = ‘D’;
}
else if (ball[1] < (playerPos - 4)) {
display.println(“DU FÖRLORADE!”);
}
else if (playerScore > aiScore) {
display.println(“DU VANN!”);
}
}

display.display();
}
/* Denna metod tar hand om att styra spelare 2. (AI Spelare, Datorn)
Den fungerar som följande: Är bollen över paddeln så rör den sig upp, om den är nedanför paddeln rör den sig neråt.
Om man vill ändra svårighetsgraden på datorn kan man ändra hur fort den flyttar sin paddel. Alltså ändra ++aiPos och --aiPos till exempelvis aiPos += 2; & aiPos -= 2;
*/

void moveAi() {
eraseAiPaddle(aiPos);
if (ball[1] > aiPos) {
++aiPos;
}
else if (ball[1] < aiPos) {
–aiPos;
}
drawAiPaddle(aiPos);
}

// Denna metod används för att skriva ut vad det står. Enda skriver ut spelarens poäng

void drawScore() {
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45, 0);
display.println(playerScore);

display.setCursor(75, 0);
display.println(aiScore);

}

// Tar bort spelarens och datorns poäng.

void eraseScore() {
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(45, 0);
display.println(playerScore);

display.setCursor(75, 0);
display.println(aiScore);
}

// Denna metod använder WALL_WIDTH variabeln och använder den för att bestämma väggens storlek.

void drawNet() {
for (int i = 0; i < (resolution[1] / WALL_WIDTH); ++i) {
drawPixel(((resolution[0] / 2) - 1), i * (WALL_WIDTH) + (WALL_WIDTH * i), (WALL_WIDTH));
}
}

//Dessa 2 metoder använder ‘for’ loopar för att dra grupper av pixlar istället för att dra alla pixxlar en försig. Metoderna ritar pixlar beroende på dimension.

void drawPixel(int posX, int posY, int dimensions) {
for (int x = 0; x < dimensions; ++x) {
for (int y = 0; y < dimensions; ++y) {
display.drawPixel((posX + x), (posY + y), WHITE);
}
}
}

void erasePixel(int posX1, int posY1, int dimensions) {
for (int x = 0; x < dimensions; ++x) {
for (int y = 0; y < dimensions; ++y) {
display.drawPixel((posX1 + x), (posY1 + y), BLACK);
}
}
}

// Dessa metoder ritar och tar bort spelarerns paddel.

void erasePlayerPaddle(int row) {
erasePixel(0, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel(0, row - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel(0, row, PADDLE_WIDTH);
erasePixel(0, row + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel(0, row + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

void drawPlayerPaddle(int row) {
drawPixel(0, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel(0, row - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel(0, row, PADDLE_WIDTH);
drawPixel(0, row + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel(0, row + (PADDLE_WIDTH + 2), PADDLE_WIDTH);
}

// Dessa metoder ritar och tar bort datorns paddel.

void drawAiPaddle(int row) {
int column = resolution[0] - PADDLE_WIDTH;
drawPixel(column, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
drawPixel(column, row - PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel(column, row, PADDLE_WIDTH);
drawPixel(column, row + PADDLE_WIDTH, PADDLE_WIDTH);
drawPixel(column, row + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

void eraseAiPaddle(int row) {
int column = resolution[0] - PADDLE_WIDTH;
erasePixel(column, row - (PADDLE_WIDTH * 2), PADDLE_WIDTH);
erasePixel(column, row - PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel(column, row, PADDLE_WIDTH);
erasePixel(column, row + PADDLE_WIDTH, PADDLE_WIDTH);
erasePixel(column, row + (PADDLE_WIDTH * 2), PADDLE_WIDTH);
}

// Metod för att “skapa” och visa bollen. Färg Vit.

void drawBall(int x, int y) {
display.drawCircle(x, y, BALL_SIZE, WHITE);
}

// Metod för att “ta bort” bollen. Färg Svart.

void eraseBall(int x, int y) {
display.drawCircle(x, y, BALL_SIZE, BLACK);
}

Please read this:-
How to use this forum
Because your post is breaking the rules about posting code.

Pong game within arduino, Screen freezes after game runs

So when the game ends the variable is set to false. Nothing ever changes that back to true so the game will never restart again and so the screen will never show anything new again == freezes.