diff --git a/game2048/.pytest_cache/v/cache/lastfailed b/game2048/.pytest_cache/v/cache/lastfailed
index 450bf772656134db26390aebbe43d8f2c539c7f8..fb70bde4277eaa17628608635b927c8cb60e9341 100644
--- a/game2048/.pytest_cache/v/cache/lastfailed
+++ b/game2048/.pytest_cache/v/cache/lastfailed
@@ -1,4 +1,3 @@
 {
-  "test_grid_2048.py::test_grid_to_string": true,
-  "test_grid_2048.py::test_move_possible": true
+  "test_grid_2048.py::test_grid_to_string": true
 }
\ No newline at end of file
diff --git a/game2048/.pytest_cache/v/cache/nodeids b/game2048/.pytest_cache/v/cache/nodeids
index d7373135ec903abf49668689ea812b2e71bf0060..83a8465dad94b5f1d4477dfd7b64aa56f45988b7 100644
--- a/game2048/.pytest_cache/v/cache/nodeids
+++ b/game2048/.pytest_cache/v/cache/nodeids
@@ -9,6 +9,7 @@
   "test_grid_2048.py::test_long_value_with_theme",
   "test_grid_2048.py::test_move_row_left",
   "test_grid_2048.py::test_move_row_right",
+  "test_grid_2048.py::test_move_grid",
   "test_grid_2048.py::test_is_grid_full",
   "test_grid_2048.py::test_move_possible"
 ]
\ No newline at end of file
diff --git a/game2048/grid_2048.py b/game2048/grid_2048.py
index 76cdfe03f8216af751d4ab7da4520e95e6727f72..495a125f61f918e37c35e2b8e3bda1b70b4d8aea 100644
--- a/game2048/grid_2048.py
+++ b/game2048/grid_2048.py
@@ -162,8 +162,11 @@ def is_grid_full(grid):
 def move_possible(grid):
     possibles = []
     for d in ["left","right","up","down"]:
-        possibles.append(move_gride(grid,d) != grid)
+        possibles.append(move_grid(grid,d) != grid)
     return possibles
 
 def is_game_over(grid):
-    
+    return is_grid_full(grid) and True not in move_possible(grid)
+
+def get_grid_tile_max(grid):
+    return max(get_all_tiles(grid))
diff --git a/game2048/test_grid_2048.py b/game2048/test_grid_2048.py
index 3655978498b39abe03c2b12507236f7b1a478405..3acae3a0870aef18bc3e636a1ce84d8a527cee61 100644
--- a/game2048/test_grid_2048.py
+++ b/game2048/test_grid_2048.py
@@ -84,6 +84,12 @@ def test_move_row_right():
     assert move_row_right([2, 4, 4, 0]) == [0, 0, 2, 8]
     assert move_row_right([4, 8, 16, 32]) == [4, 8, 16, 32]
 
+def test_move_grid():
+    assert move_grid([[2,0,0,2], [4, 4, 0, 0], [8, 0, 8, 0], [0, 2, 2, 0]],"left") == [[4,0,0,0], [8, 0, 0, 0], [16, 0, 0, 0], [4, 0, 0, 0]]
+    assert move_grid([[2,0,0,2], [4, 4, 0, 0], [8, 0, 8, 0], [0, 2, 2, 0]],"right") == [[0,0,0,4], [0, 0, 0, 8], [0, 0, 0, 16], [0, 0, 0, 4]]
+    assert move_grid([[2,0,0,2], [2, 4, 0, 0], [8, 4, 2, 0], [8, 2, 2, 0]],"up") == [[4,8,4,2], [16, 2, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
+    assert move_grid([[2,0,0,2], [2, 4, 0, 0], [8, 4, 2, 0], [8, 2, 2, 0]],"down") == [[0, 0, 0, 0], [0, 0, 0, 0],[4,8,0,0],[16, 2, 4, 2]]
+
 def test_is_grid_full():
     assert is_grid_full([[0, 16, 32, 0], [64, 0, 32, 2], [2, 2, 8, 4], [512, 8, 16, 0]]) == False
     assert is_grid_full([[4, 16, 32, 4], [64, 8, 32, 2], [2, 2, 8, 4], [512, 8, 16, 1024]]) == True