Домашни > Време е да помислите за проектите си! > Решения > Решението на Мариана Терзиева

Резултати
0 точки от тестове
5 точки от учител

5 точки общо

0 успешни теста
0 неуспешни теста
Код

 1"""
 2[Title/Звание]
 3ДДЗ (Да Довършим Зомбито)
 4
 5[Description/Обрисовка]
 6Проектът се базира на играта за познаване на дума hangman (бесеница). Сюжетът на тази игра, обаче, 
 7ще бъде по-различен. Играчът е изправен пред предизвикателството да познае (случайно генерирана) дума
 8за ограничен брой опити, но вместо при неуспех да се беси човече, едно зомби ще се приближава все повече
 9до главния герой - Дейвид (по прякор Лудия Дейв), в опит да го изяде. Играчът може да помогне на Дейв да 
10се спаси с помощта на... едно растение. Ако дотук не е станалo ясно, сюжетът е заимстван от видеоиграта 
11Plants vs. Zombies :). Растението, което ще брани Дейв, е мутирала грахова шушулка, която в оригиналната
12версия на играта изстрелва грахчета, но тук ще стреля букви - предположенията на играча. Ако предположението
13е било вярно, то зомбито е забавено, в противен случай - продължава да ходи към Дейв. 
14Да Довършим Зомбито предоставя на играча възможността да използва подсказка (hint) за думата, но за нея се 
15плаща висока цена - броят на опитите ще се намали чувствително. Освен подсказките, ДДЗ надгражда обикновения 
16hangman с multiplayer аспект - след всяка игра се начисляват точки, които влизат в ранклиста. Различните играчи 
17могат да се сприятеляват и да си изпращат взаимно думи с персонализирани подсказки (напр. "Ха! Гадно, нали? 
18Оправяй се.").
19
20[Functionalities/Надарености]
211. Избор на игрови режим:
22    - Обикновен (Zen): избира се дума на случаен принцип и не се начисляват точки след приключване на играта.
23    - За класиране: избира се дума на случаен принцип и получените точки се прибавят към резултата на играча.
24    - Предизвикателство от приятел: при наличие на такова, думата и подсказката са избрани от приятеля, а 
25    получените точки се прибавят към резултата на играча.
26
272. Предположение за буква:
28    - Успех(Hit): зомбито "замръзва" и не се приближава до Дейв.
29    - Неуспех(Miss): зомбито продължава крачка напред и броя на опитите намалява с 1.
30
313. Използване на подсказка (hint):
32    - Намалява се броя на опитите наполовина (но все пак да са достатъчно за успешно познаване на думата).
33
344. Добавяне на приятел (friend request):
35    - Търси се по съществуващо потребителско име.
36
375. Изпращане на предизвикателство до приятел:
38    - Съставяне и изпращане на предизвикателството (дума + подсказка) до приятел от списъка с приятели.
39
40[Milestones/Възлови точки]
411. Генериране на произволна дума
42    - Разработка на модул за генериране на произволна дума от английски речник*.
43    *Думите са на английски език, поради по-достъпните API.
44    *Подсказката представлява синоним на търсената дума (пак идва от API).
45
462. Игрова логика
47    - Управление на игровата логика (ходове на играча).
48
493. Съхранение на данни
50    - Разработка на модул за съхранение на прогреса на играта (точки) и настройките (потребителски данни, 
51    сред които и списък с приятели).
52
534. Multiplayer & Networking
54    - Разработка на модул за friend request, съставяне и изпращане на предизвикателство*, както и leaderboard.
55    *Подсказката при предизвикателство от приятел може да е и на български език.
56
575. Графичен интерфейс
58    - Разработка на графичен интерфейс.
59
606. Тестване и оптимизация
61    - Създаване на система за тестване и решаване на евентуални проблеми при избора на случайна дума и
62    предизвикателствата от приятели.
63
64[Estimate in man-hours/Времеоценка в човекочасове]
65100-120 часа
66
67[Usage of technologies/Потребление на технологии]
681. Генериране на произволна дума: Безплатно API на английски речник (python-freeDictionaryAPI)
692. Игрова логика: Pygame
703. Съхранение на данни: SQLite с Python
714. Multiplayer & Networking: socket модул от Python
725. Графичен интерфейс: Pygame
736. Тестване и оптимизация: Вградени инструменти за тестване и профилиране в Python
74
75"""


----------------------------------------------------------------------
Ran 0 tests in 0.000s

NO TESTS RAN

Дискусия
Виктор Бечев
17.01.2025 18:29

Здрасти :) Краткия отговор - трудна работа. Да съчетаеш web + pygame - неприятно. Добрата новина - не мисля, че ти е необходимо. С малко изключения, всичко, което си описала, можеш да направиш в pygame. В уеб - трудно, ще е повече JavaSciprt, отколкото [Python](https://www.youtube.com/watch?v=UpPoWGiQIhA). Двете неща, за които pygame няма как да ти свърши работа са следните: 1. Централизация на информацията за всички потребители (потребител, приятелства, точки и прочие). 2. Комуникация между потребителите (изпращане на предизвикателства). И за двете можеш да използваш сокети. Когато имаш сървър-клиент архитектура, горното, преведено в комуникация между двете, изглежда по следния начин (грубо): ``` 0. Сървърът е пуснат и чака съобщения. 1. Стартира се клиент. 2. Клиентът въвежда име и парола за да се свърже със сървъра. 3. Сървърът проверява в базата данни с потребители и решава дали е коректна. 4. Сървърът връща отговор на клиента - приет си, не си приет или направо връща сериализирана потребителска информация. 5. Клиентът вече е "логнат" 6. Клиентът решава да прати съобщение, например: - Дай ми информация за leaderboard-а. - Дай ми информация за списъкът ми с приятели. - Започни нова игра. 7. Сървърът, на базата на заявката, връща отговор на клиента с необходимата информация. 8. Клиентът взима информацията и я визуализира както е удачно (нова игра, leaderbord, etc.). 9. Алтернативно, клиентът решава да изпрати предизвикателство на приятел. Е, то пак отива към сървъра. 10. Сървърът получава предизвикателството. 11. Оттук насетне имаш варианти - да пращаш "насилствени" или "push" рекуести към друг клиент, което е по-неприятно и не бих те посъветвал да наливаш време в това преди да имаш всичко останало. По-скоро бих ти препоръчал предизвикателствата да се запазват в някаква база данни и когато клиент влезе в "предизвикателства" - да пуска рекуест към сървъра за всички негови предизвикателства. Не, че другото е rocket science, просто трябва да пуснеш нещо, което да пита сървъра за нови предизвикателства на всяка секунда-две, в която си на главното меню. Просто не мога да гадая какви проблеми могат да изникнат и бих те посъветвал да го оставиш за накрая. ``` А що се отнася до самата база данни - можеш да използваш ORM, който не зависи от Django, като SQLAlchemy или Peewee. С други думи, не би трябвало да имаш никакво взимане даване с Django. Ако пропускам нещо - дай да го изговорим.
Мариана Терзиева
17.01.2025 14:09

Здравейте! Започнах да разглеждам различните технологии, които съм посочила, за да добия представа как да ги свържа. Понеже приложението е web-базирано, не знам дали не е по-удачно да използвам Django за работа с базата данни и networking (поддръжка на login authentication на потребители, както и списък с приятели и предизвикателства). От друга страна, как би се съчетало web приложение с pygame(-ce), което е по-подходящо за desktop приложения? Разгледах модула pygbag, с който може една pygame игра да се отвори в браузър, но с оглед на backend частта, не би било добра идея. В такъв случай, за графичен интерфейс бих могла да се спра на друга технология. Бих се радвала, ако можете да ми дадете насоки, и съответно дали смяната на някои от посочените технологии би довела до по-малко предизвикателен проект.
Виктор Бечев
03.12.2024 14:10

Супер, звучи чудесно. Ще се сблъскаш с интересни предизвикателства, единственото, което от сега бих ти препоръчал е да погледнеш SQLAlchemy за работа с базата данни.
История
Това решение има само една версия.