Решение на Изберете си проект от Мартин Филипов

Обратно към всички решения

Към профила на Мартин Филипов

Код

# Игра 2048
# Правила:
# Играта се играе от един играч върху дъска или матрица с размер 4 на 4 клетки (но може и да бъде направена с произволни размери)
# Всяка игра започва със две заети клетки със стойности 2 или 4 разположени произволно в матрицата.Пример:
# [ ] [ ] [ ] [ ]
# [2] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# [ ] [ ] [4] [ ]
# Играчът използва четирите посоки (нагоре, надолу, наляво, надясно) за да "плъзга" клетките, в които вече има число, докато
# дадената клетка не стигне крайния ред или колона на матрицата или не
# срещне друга клетка с число.Пример:
# От тази ситуация:
# [ ] [ ] [ ] [ ]
# [2] [ ] [4] [ ]
# [ ] [2] [ ] [ ]
# [ ] [ ] [ ] [ ]
# при натискане надясно резултатът е следния:
# Всяка клетка с число се "плъзга" максимално надясно, докато не стигне ръба на матрицата
# или не стигне друга клетка с число различно от нейното.
# [ ] [ ] [ ] [ ]
# [ ] [ ] [2] [4]
# [ ] [ ] [ ] [2]
# [ ] [ ] [ ] [ ]
# при натискане нагоре резултатът от началната ситуация отново е "плъзгане" максималоно нагоре докато клетките не
# достигнат горния ръб на матрицата или друга клетка с число различно от нейното
# [2] [2] [4] [ ]
# [ ] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# При движение в дадена посока(нагоре, надолу, наляво или надясно) ако има допир на две клетки със еднакви числа в тях, те се сливат и
# се получава нова клетка със стойност равна на сумата от двете клетки, които са участвали в сливането.Новата клетка се "плъзга"
# максимално в зададената посока(тоест докато не достигне ръб на матрицата или друга клетка с число различно от нейното). Пример:
# Дадена е ситуацията:
# [ ] [ ] [ ] [ ]
# [2] [ ] [2] [8]
# [2] [ ] [ ] [2]
# [ ] [ ] [ ] [ ]
# при натискане наляво се получава следното:
# на втория ред се сливат клетките със стойност 2 и 2 като резултата е новата клетка със
# стойност 4, която е позиционирана възможно най-вляво до ръба на матрицата, тъй като движението е било наляво.
# [ ] [ ] [ ] [ ]
# [4] [8] [ ] [ ]
# [4] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# Ако движението беше нядясно от горния пример резултатът щеше да е следния:
# [ ] [ ] [ ] [ ]
# [ ] [ ] [4] [8]
# [ ] [ ] [ ] [4]
# [ ] [ ] [ ] [ ]
# Тук от сливането на двете клетки със стойност 2 на втори ред се е получила нова със стойност 4
# позиционирана възможно най-вдясно(в случая не до ръба на матрицата, а до клетката със стойност 8),
# а на третия ред клетките със числото 2 се сливат и се получава нова клетка със стойност 4, която е
# позиционионирана в десния ръб на матрицата.
# Особеност е, че една клетка с число не може да участва във две сливания в рамките на едно движение.Пример:
# [ ] [ ] [ ] [ ]
# [2] [ ] [2] [4]
# [ ] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# Резултатът при движение наляво е:
# [ ] [ ] [ ] [ ]
# [4] [4] [ ] [ ]
# [ ] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# а не директно нова клетка със стойност 8 възможно най-вляво.
# Още един пример
# [ ] [ ] [ ] [ ]
# [2] [2] [2] [2]
# [ ] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# Резултатът при движение наляво е:
# [ ] [ ] [ ] [ ]
# [4] [4] [ ] [ ]
# [ ] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# Тоест може да се извършват повече от едно сливания на даден ред или колона, стига клетките,
# които вече са се сляли в това движение да не участват пак
# При всяко движение на мястото на произволна празна клетка се появява нова клетка със стойност 2 или 4 (не повече)
# като шансът за клетка със стойност 2
# е по-голям от такава със стойност 4. Пример:
# [ ] [ ] [ ] [ ]
# [2] [ ] [2] [4]
# [2] [ ] [ ] [ ]
# [ ] [ ] [ ] [ ]
# При движение нагоре:
# [4] [ ] [2] [4]
# [ ] [ ] [ ] [ ]
# [ ] [2] [ ] [ ]
# [ ] [ ] [ ] [ ]
# Тук двойката на третия ред се е появила на мястото на произволна свободна клетка след движението нагоре
# и сливането на двойките от първа колона.
# Край на играта:
# Ако няма повече свободни клетки, в които да се появи 2 или 4, играта приключва.
# Цел:
# Да се появи клетка със стойност във нея : "2048" (2^11) , от където идва името на играта.
# Точки:
# Играчът има резултат през цялото време, като той се променя при всяко сливане на клетки, Например:
# ако се слеят две клетки със стойност 2 към резутата се прибавя резултата от сливането тоест 4.
# Въжможно е и добавянето на функция undo до три хода назад от текущото състояние, както и функция
# high score или може би класация на играчите с най-добър резултат.
# Мисля да имам графичен интерфейс, ако успея да го подкарам.
# Ако не успея, ще бъде конзолен.

История (1 версия и 1 коментар)

Мартин обнови решението на 26.04.2015 23:03 (преди почти 9 години)

+# Игра 2048
+# Правила:
+# Играта се играе от един играч върху дъска или матрица с размер 4 на 4 клетки (но може и да бъде направена с произволни размери)
+# Всяка игра започва със две заети клетки със стойности 2 или 4 разположени произволно в матрицата.Пример:
+# [ ] [ ] [ ] [ ]
+# [2] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [4] [ ]
+# Играчът използва четирите посоки (нагоре, надолу, наляво, надясно) за да "плъзга" клетките, в които вече има число, докато
+# дадената клетка не стигне крайния ред или колона на матрицата или не
+# срещне друга клетка с число.Пример:
+
+# От тази ситуация:
+# [ ] [ ] [ ] [ ]
+# [2] [ ] [4] [ ]
+# [ ] [2] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+
+# при натискане надясно резултатът е следния:
+# Всяка клетка с число се "плъзга" максимално надясно, докато не стигне ръба на матрицата
+# или не стигне друга клетка с число различно от нейното.
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [2] [4]
+# [ ] [ ] [ ] [2]
+# [ ] [ ] [ ] [ ]
+# при натискане нагоре резултатът от началната ситуация отново е "плъзгане" максималоно нагоре докато клетките не
+# достигнат горния ръб на матрицата или друга клетка с число различно от нейното
+# [2] [2] [4] [ ]
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+
+# При движение в дадена посока(нагоре, надолу, наляво или надясно) ако има допир на две клетки със еднакви числа в тях, те се сливат и
+# се получава нова клетка със стойност равна на сумата от двете клетки, които са участвали в сливането.Новата клетка се "плъзга"
+# максимално в зададената посока(тоест докато не достигне ръб на матрицата или друга клетка с число различно от нейното). Пример:
+# Дадена е ситуацията:
+# [ ] [ ] [ ] [ ]
+# [2] [ ] [2] [8]
+# [2] [ ] [ ] [2]
+# [ ] [ ] [ ] [ ]
+# при натискане наляво се получава следното:
+# на втория ред се сливат клетките със стойност 2 и 2 като резултата е новата клетка със
+# стойност 4, която е позиционирана възможно най-вляво до ръба на матрицата, тъй като движението е било наляво.
+# [ ] [ ] [ ] [ ]
+# [4] [8] [ ] [ ]
+# [4] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# Ако движението беше нядясно от горния пример резултатът щеше да е следния:
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [4] [8]
+# [ ] [ ] [ ] [4]
+# [ ] [ ] [ ] [ ]
+# Тук от сливането на двете клетки със стойност 2 на втори ред се е получила нова със стойност 4
+# позиционирана възможно най-вдясно(в случая не до ръба на матрицата, а до клетката със стойност 8),
+# а на третия ред клетките със числото 2 се сливат и се получава нова клетка със стойност 4, която е
+# позиционионирана в десния ръб на матрицата.
+
+# Особеност е, че една клетка с число не може да участва във две сливания в рамките на едно движение.Пример:
+# [ ] [ ] [ ] [ ]
+# [2] [ ] [2] [4]
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# Резултатът при движение наляво е:
+# [ ] [ ] [ ] [ ]
+# [4] [4] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# а не директно нова клетка със стойност 8 възможно най-вляво.
+# Още един пример
+# [ ] [ ] [ ] [ ]
+# [2] [2] [2] [2]
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+
+# Резултатът при движение наляво е:
+# [ ] [ ] [ ] [ ]
+# [4] [4] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# Тоест може да се извършват повече от едно сливания на даден ред или колона, стига клетките,
+# които вече са се сляли в това движение да не участват пак
+
+# При всяко движение на мястото на произволна празна клетка се появява нова клетка със стойност 2 или 4 (не повече)
+# като шансът за клетка със стойност 2
+# е по-голям от такава със стойност 4. Пример:
+# [ ] [ ] [ ] [ ]
+# [2] [ ] [2] [4]
+# [2] [ ] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# При движение нагоре:
+# [4] [ ] [2] [4]
+# [ ] [ ] [ ] [ ]
+# [ ] [2] [ ] [ ]
+# [ ] [ ] [ ] [ ]
+# Тук двойката на третия ред се е появила на мястото на произволна свободна клетка след движението нагоре
+# и сливането на двойките от първа колона.
+
+# Край на играта:
+# Ако няма повече свободни клетки, в които да се появи 2 или 4, играта приключва.
+# Цел:
+# Да се появи клетка със стойност във нея : "2048" (2^11) , от където идва името на играта.
+# Точки:
+# Играчът има резултат през цялото време, като той се променя при всяко сливане на клетки, Например:
+# ако се слеят две клетки със стойност 2 към резутата се прибавя резултата от сливането тоест 4.
+# Въжможно е и добавянето на функция undo до три хода назад от текущото състояние, както и функция
+# high score или може би класация на играчите с най-добър резултат.
+
+# Мисля да имам графичен интерфейс, ако успея да го подкарам.
+# Ако не успея, ще бъде конзолен.

Ако изолираш добре логиката на играта, тогава връзването на графична част трбява да не е особено сложна. Но е напълно ok да тръгнеш с конзолен интерфейс, докато го разработваш.

Добави опция за произволен на размера на дъската.