Решение на Изберете си проект от Цветомир Цанов

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

Към профила на Цветомир Цанов

Код

#Проекта ще представлява 2D конзолна игра, в която ще има герои, #врагове, оръжия, магии и съкровища. Всеки герой и враг ще може #да има оръжие и магии, може да бъде си възстановява живота и #маната по 2 начина: магия и при придвижване. Играта ще има 2 #нива, като за да може едно ниво да бъде завършено героя трябва #да стигне до определена точка.Картата ще представлява нещо като:
#
# S.##.....T
# #T##..###.
# #.###E###E
# #.E...###.
# ###T#####G
#
#където:
# S - мястото на което може да бъде призован героя ни
# G - мястото до което трябва се стигне
# # - непроходима част
# . - проходима част
# T - съкровище, което е на рандом принцип
# E - враговете, които трябва да убием
#
#Картата ще се съхранява в текстов файл.
#
#Работеща програма изглежда нещо като това:
#>>> h = Hero(name="Bron", title="Dragonslayer", health=100, #mana=100, mana_regeneration_rate=2)
#>>> w = Weapon(name="The Axe of Destiny", damage=20)
#>>> h.equip(w)
#>>> s = Spell(name="Fireball", damage=30, mana_cost=50, #cast_range=2)
#>>> h.learn(s)
#>>> map = Dungeon("level1.txt")
#>>> map.spawn(h)
#>>> map.print_map()
# #H.##.....T
# #T##..###.
# #.###E###E
# #.E...###.
# ###T#####G
# >>> map.move_hero("right")
# True
# >>> map.move_hero("down")
# Found health potion. Hero health is max.
# >>> map.print_map()
# # ..##.....T
# #H##..###.
# #.###E###E
# #.E...###.
# ###T#####G
# >>> map.hero_attack(by="spell")
# Nothing in casting range 2
# >>> map.move_hero("down")
# >>> map.move_hero("down")
# >>> map.print_map()
# ..##.....T
# #.##..###.
# #.###E###E
# #HE...###.
# ###T#####G
# >>> map.hero_attack(by="spell")
# A fight is started between our Hero(health=100, mana=100) and # Enemey(health=100, mana=100, damage=20)
# Hero casts a Fireball, hits enemy for 20 dmg. Enemy health is # 80
# Enemy moves one square to the left in order to get to the # hero. This is his move.
# Hero casts a Fireball, hits enemy for 20 dmg. Enemy health is # 60
# Enemy hits hero for 20 dmg. Hero health is 80
# Hero does not have mana for another Fireball.
# Hero hits with Axe for 20 dmg. Enemy health is 40
# Enemy hits hero for 20 dmg. Hero health is 60.
# Hero hits with Axe for 20 dmg. Enemy health is 20
# Enemy hits hero for 20 dmg. Hero health is 40.
# Hero hits with Axe for 20 dmg. Emely health is 0
# Enemy is dead!

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

Цветомир обнови решението на 26.04.2015 21:37 (преди почти 9 години)

+#Проекта ще представлява 2D конзолна игра, в която ще има герои, #врагове, оръжия, магии и съкровища. Всеки герой и враг ще може #да има оръжие и магии, може да бъде си възстановява живота и #маната по 2 начина: магия и при придвижване. Играта ще има 2 #нива, като за да може едно ниво да бъде завършено героя трябва #да стигне до определена точка.Картата ще представлява нещо като:
+#
+# S.##.....T
+# #T##..###.
+# #.###E###E
+# #.E...###.
+# ###T#####G
+#
+#където:
+# S - мястото на което може да бъде призован героя ни
+# G - мястото до което трябва се стигне
+# # - непроходима част
+# . - проходима част
+# T - съкровище, което е на рандом принцип
+# E - враговете, които трябва да убием
+#
+#Картата ще се съхранява в текстов файл.
+#
+#Работеща програма изглежда нещо като това:
+#>>> h = Hero(name="Bron", title="Dragonslayer", health=100, #mana=100, mana_regeneration_rate=2)
+#>>> w = Weapon(name="The Axe of Destiny", damage=20)
+#>>> h.equip(w)
+#>>> s = Spell(name="Fireball", damage=30, mana_cost=50, #cast_range=2)
+#>>> h.learn(s)
+#>>> map = Dungeon("level1.txt")
+#>>> map.spawn(h)
+#>>> map.print_map()
+# #H.##.....T
+# #T##..###.
+# #.###E###E
+# #.E...###.
+# ###T#####G
+# >>> map.move_hero("right")
+# True
+# >>> map.move_hero("down")
+# Found health potion. Hero health is max.
+# >>> map.print_map()
+# # ..##.....T
+# #H##..###.
+# #.###E###E
+# #.E...###.
+# ###T#####G
+# >>> map.hero_attack(by="spell")
+# Nothing in casting range 2
+# >>> map.move_hero("down")
+# >>> map.move_hero("down")
+# >>> map.print_map()
+# ..##.....T
+# #.##..###.
+# #.###E###E
+# #HE...###.
+# ###T#####G
+# >>> map.hero_attack(by="spell")
+# A fight is started between our Hero(health=100, mana=100) and # Enemey(health=100, mana=100, damage=20)
+# Hero casts a Fireball, hits enemy for 20 dmg. Enemy health is # 80
+# Enemy moves one square to the left in order to get to the # hero. This is his move.
+# Hero casts a Fireball, hits enemy for 20 dmg. Enemy health is # 60
+# Enemy hits hero for 20 dmg. Hero health is 80
+# Hero does not have mana for another Fireball.
+# Hero hits with Axe for 20 dmg. Enemy health is 40
+# Enemy hits hero for 20 dmg. Hero health is 60.
+# Hero hits with Axe for 20 dmg. Enemy health is 20
+# Enemy hits hero for 20 dmg. Hero health is 40.
+# Hero hits with Axe for 20 dmg. Emely health is 0
+# Enemy is dead!

Супер, само че това е дървен начин за ползване. Ок е да няма GUI, но си поиграй за по-ползваем command line интерфейс. Приемане на прости текстовеи команди като "move right", "move left", "attack" и прочее, които да parse-ваш и обработваш по някакъв начин. Така си гарантираш едно ниво на абстракция между играча и кода отговорен за логиката на играта. Ако ти остане време все пак е препоръчително да се опиташ да сглобиш нещо с Qt например.