Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
2
2048
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Thomas Bianco
2048
Commits
da93bef4
Commit
da93bef4
authored
6 years ago
by
Garance Guey
Browse files
Options
Downloads
Patches
Plain Diff
dowload_
parent
b9b1e4f4
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
game2048/grid_2048.py
+33
-11
33 additions, 11 deletions
game2048/grid_2048.py
with
33 additions
and
11 deletions
game2048/grid_2048.py
+
33
−
11
View file @
da93bef4
...
@@ -91,6 +91,7 @@ def long_value_with_theme(grid,theme):
...
@@ -91,6 +91,7 @@ def long_value_with_theme(grid,theme):
#FONCTIONNALITE 4
#FONCTIONNALITE 4
def
del_zeros
(
row
):
def
del_zeros
(
row
):
#fonction permettant de supprimer les zeros d'une ligne, qui sont inutiles lors du processus de fusion des cases
n
=
len
(
row
)
n
=
len
(
row
)
new_row
=
[]
new_row
=
[]
for
i
in
range
(
n
):
for
i
in
range
(
n
):
...
@@ -99,6 +100,7 @@ def del_zeros(row):
...
@@ -99,6 +100,7 @@ def del_zeros(row):
return
new_row
,
n
return
new_row
,
n
def
move_left_bis
(
row
,
i
=
0
):
def
move_left_bis
(
row
,
i
=
0
):
#fonction aide pour la fonction recursive finale
n
=
len
(
row
)
n
=
len
(
row
)
if
i
>=
n
-
1
:
if
i
>=
n
-
1
:
return
row
return
row
...
@@ -115,10 +117,13 @@ def move_row_left(row):
...
@@ -115,10 +117,13 @@ def move_row_left(row):
return
new_row
+
[
0
]
*
(
n
-
len
(
new_row
))
return
new_row
+
[
0
]
*
(
n
-
len
(
new_row
))
def
move_row_right
(
row
):
def
move_row_right
(
row
):
#bouger à droite revient à bouger à gauche la liste lue dans le sens inverse
return
move_row_left
(
row
[::
-
1
])[::
-
1
]
return
move_row_left
(
row
[::
-
1
])[::
-
1
]
def
move_grid
(
grid
,
d
):
def
move_grid
(
grid
,
d
):
taille
=
len
(
grid
)
taille
=
len
(
grid
)
#cas droite et gauche plus simple car utilisation directe des fonctions codées ci dessus
if
d
==
"
left
"
:
if
d
==
"
left
"
:
new_grid
=
[]
new_grid
=
[]
for
ligne
in
range
(
taille
):
for
ligne
in
range
(
taille
):
...
@@ -129,28 +134,34 @@ def move_grid(grid,d):
...
@@ -129,28 +134,34 @@ def move_grid(grid,d):
for
ligne
in
range
(
taille
):
for
ligne
in
range
(
taille
):
row
=
grid
[
ligne
]
row
=
grid
[
ligne
]
new_grid
.
append
(
move_row_right
(
row
))
new_grid
.
append
(
move_row_right
(
row
))
#si on doit bouger en haut ou en bas celà revient à bouger la transposer à gauche ou à droite
else
:
else
:
grid_t
=
transpose_grid
(
grid
)
grid_t
=
transpose_grid
(
grid
)
#on s'interresse donc à la transposée
new_grid_t
=
[]
new_grid_t
=
[]
if
d
==
"
up
"
:
if
d
==
"
up
"
:
for
ligne
in
range
(
taille
):
for
ligne
in
range
(
taille
):
row
=
grid_t
[
ligne
]
row
=
grid_t
[
ligne
]
new_grid_t
.
append
(
move_row_left
(
row
))
new_grid_t
.
append
(
move_row_left
(
row
))
else
:
else
:
#on ne peut bouger que en haut,bas,droite,gauche, pas besoin de elif donc par deduction
for
ligne
in
range
(
taille
):
for
ligne
in
range
(
taille
):
row
=
grid_t
[
ligne
]
row
=
grid_t
[
ligne
]
new_grid_t
.
append
(
move_row_right
(
row
))
new_grid_t
.
append
(
move_row_right
(
row
))
new_grid
=
transpose_grid
(
new_grid_t
)
#on obtient la transposée de la grille finale
new_grid
=
transpose_grid
(
new_grid_t
)
#permet de retoruver la grille "dans le bon sens"
return
(
new_grid
)
return
(
new_grid
)
def
transpose_grid
(
liste
):
def
transpose_grid
(
liste
):
#fonction permettant de transposer une liste de liste que l'on identifie à sa matrice
#cette fonction ne marche que sur des matrice carrée
n
=
len
(
liste
)
n
=
len
(
liste
)
transpo_liste
=
[]
transpo_liste
=
[]
for
colonne
in
range
(
n
)
:
for
colonne
in
range
(
n
)
:
ligne_transpo
=
[]
ligne_transpo
=
[]
#création des lignes de la transposée
for
ligne
in
range
(
n
)
:
for
ligne
in
range
(
n
)
:
ligne_transpo
.
append
(
liste
[
ligne
][
colonne
])
ligne_transpo
.
append
(
liste
[
ligne
][
colonne
])
transpo_liste
.
append
(
ligne_transpo
)
transpo_liste
.
append
(
ligne_transpo
)
#renvoie une liste
return
(
transpo_liste
)
return
(
transpo_liste
)
...
@@ -160,12 +171,14 @@ def is_grid_full(grid):
...
@@ -160,12 +171,14 @@ def is_grid_full(grid):
return
get_empty_tiles_positions
(
grid
)
==
[]
return
get_empty_tiles_positions
(
grid
)
==
[]
def
move_possible
(
grid
):
def
move_possible
(
grid
):
#renvoie une liste de 4 booléens indiquant si le déplacement à gauche,droite,haut,bas est possible.
possibles
=
[]
possibles
=
[]
for
d
in
[
"
left
"
,
"
right
"
,
"
up
"
,
"
down
"
]:
for
d
in
[
"
left
"
,
"
right
"
,
"
up
"
,
"
down
"
]:
possibles
.
append
(
move_grid
(
grid
,
d
)
!=
grid
)
possibles
.
append
(
move_grid
(
grid
,
d
)
!=
grid
)
#si le deplacement n'est pas possible, la grille reste inchangée apres avoir effectué ce déplacement
return
possibles
return
possibles
def
is_game_over
(
grid
):
def
is_game_over
(
grid
):
#on a perdu si la grille est pleine et que aucun mouvement n'est possible
return
is_grid_full
(
grid
)
and
True
not
in
move_possible
(
grid
)
return
is_grid_full
(
grid
)
and
True
not
in
move_possible
(
grid
)
def
get_grid_tile_max
(
grid
):
def
get_grid_tile_max
(
grid
):
...
@@ -177,6 +190,7 @@ def did_you_win (grid):
...
@@ -177,6 +190,7 @@ def did_you_win (grid):
#Fonctinnalité 6
#Fonctinnalité 6
def
list_moove_possible
(
grid
):
def
list_moove_possible
(
grid
):
#renvoie la liste des deplacements possibles
list_bool
=
move_possible
(
grid
)
list_bool
=
move_possible
(
grid
)
list_final
=
[]
list_final
=
[]
if
list_bool
[
0
]:
if
list_bool
[
0
]:
...
@@ -192,18 +206,26 @@ def list_moove_possible (grid):
...
@@ -192,18 +206,26 @@ def list_moove_possible (grid):
def
random_play
():
def
random_play
():
#on suppose que le jeu par defaut comprend une grille de 4x4
#on suppose que le jeu par defaut comprend une grille de 4x4
#phase d'initialisation du jeu
grid_game
=
init_game
(
4
)
grid_game
=
init_game
(
4
)
print
(
grid_to_string_with_size_and_theme
(
grid_game
,
THEMES
[
"
0
"
],
4
))
print
(
grid_to_string_with_size_and_theme
(
grid_game
,
THEMES
[
"
0
"
],
4
))
#phase de jeu
while
not
is_game_over
(
grid_game
):
while
not
is_game_over
(
grid_game
):
d
=
rd
.
choice
(
list_moove_possible
(
grid_game
))
grid_game
=
move_grid
(
grid_game
,
d
)
#pour chaque tour
grid_game
=
grid_add_new_tile
(
grid_game
)
d
=
rd
.
choice
(
list_moove_possible
(
grid_game
))
#on choisi un mouvement
print
(
grid_to_string_with_size_and_theme
(
grid_game
,
THEMES
[
"
0
"
],
4
))
grid_game
=
move_grid
(
grid_game
,
d
)
#on le fait
print
(
"
\n
***********************************
\n
"
)
grid_game
=
grid_add_new_tile
(
grid_game
)
#une tuile se crée
print
(
grid_to_string_with_size_and_theme
(
grid_game
,
THEMES
[
"
0
"
],
4
))
#on affuche le résulat
print
(
"
\n
***********************************
\n
"
)
#permet aux différentes grilles d'être plus lisible
#vérification si le jeu est gagnant ou perdant
if
did_you_win
(
grid_game
):
if
did_you_win
(
grid_game
):
print
(
"
CONGRATS ! YOU WON !!!
"
)
print
(
"
CONGRATS ! YOU WON !!!
"
)
else
:
else
:
print
(
"
YOU FAIL, TRY AGAIN
"
)
print
(
"
YOU FAIL, TRY AGAIN
"
)
return
()
return
()
random_play
()
#TEST :
random_play()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment