diff --git a/src/models/WebSocketModel.js b/src/models/WebSocketModel.js
index b6decad8593e122b80f8cc72c6db039ac0af67c6..6a769827aec672e37616367a95100fe1bce79ba5 100644
--- a/src/models/WebSocketModel.js
+++ b/src/models/WebSocketModel.js
@@ -41,6 +41,27 @@ class WebSocketModel {
         }
       }
 
+      const alivePlayers = this.games[game].players.filter(
+        (player) => !player.spectating
+      );
+
+      if (alivePlayers.length === 1) {
+        const winner = alivePlayers[0].pid;;
+
+        for (let conn of this.games[game].players) {
+          conn.connection.send(
+            JSON.stringify({
+              type: "restart",
+              pid: winner
+            }),
+          );
+        }
+
+        this.resetGame(game);
+
+        return;
+      }
+
       for (let conn of this.games[game].players) {
         let playerView = null;
         if (conn.spectating) {
@@ -100,6 +121,18 @@ class WebSocketModel {
     this.createInterval(gameId);
   }
 
+  resetGame(gameId) {
+    this.games[gameId].gameBoard = gameModule.createGameBoard(100, 100);
+    this.games[gameId].players.forEach((player) => {
+      player.spectating = false;
+    });
+    this.games[gameId].started = false;
+    this.games[gameId].readyPlayers = 0;
+    this.games[gameId].borderCounter = 0;
+    this.games[gameId].numPlayers = 0;
+    this.games[gameId].elapsedTime = 0;
+  }
+
   moveHandler(connection, message) {
     console.log("Received move: " + message.data);
     let movement = message.data;