{"id":16287156,"url":"https://github.com/bandysc/jinp_1_horror","last_synced_at":"2025-08-10T00:03:14.653Z","repository":{"id":74061370,"uuid":"74356648","full_name":"BAndysc/JINP_1_horror","owner":"BAndysc","description":"Czwarty projekt na zaliczenie kursu C++ (zadanie Horror)","archived":false,"fork":false,"pushed_at":"2017-03-12T16:16:18.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"obczaj","last_synced_at":"2025-04-09T05:19:32.645Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BAndysc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-21T11:25:29.000Z","updated_at":"2017-03-12T16:17:48.000Z","dependencies_parsed_at":"2023-03-04T18:30:43.591Z","dependency_job_id":null,"html_url":"https://github.com/BAndysc/JINP_1_horror","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BAndysc/JINP_1_horror","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_1_horror","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_1_horror/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_1_horror/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_1_horror/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BAndysc","download_url":"https://codeload.github.com/BAndysc/JINP_1_horror/tar.gz/refs/heads/obczaj","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BAndysc%2FJINP_1_horror/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269654968,"owners_count":24454349,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-09T02:00:10.424Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T19:44:29.569Z","updated_at":"2025-08-10T00:03:13.856Z","avatar_url":"https://github.com/BAndysc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Jesteś scenarzystą horroru. Musisz stworzyć program, który symuluje potencjalną fabułę i dostarczy Ci pomysłów do Twojego arcydzieła. Akcja dzieje się w małym miasteczku w stanie Maine. Miasteczko zostaje nawiedzone przez tajemniczą bestię. Ponieważ nie masz koncepcji na konkretnych bohaterów i potwora będącego głównym zagrożeniem, musisz przygotować rozwiązanie ogólne.\n\n\nStwórz następujące typy szablonowe:\n\n## citizen.h\n\nKlasy `Adult\u003ctypename T\u003e`, `Teenager\u003ctypename T\u003e`, `Sheriff\u003ctypename T\u003e`, gdzie `T` jest typem pól przechowujących punkty życia, wiek, a w przypadku szeryfa siłę ataku.\n\n\nKlasy `Adult`, `Teenager` przyjmują w konstruktorze `T` `health` oraz `T` `age`, a `Sheriff` dodatkowo `T` `attackPower`. Klasy `Adult` i `Sheriff` mogą przyjmować `age` w zakresie od `18` do `100`, a `Teenager\u003cT\u003e` w zakresie od `11` do `17`.\n\nKlasy `Adult`, `Teenager`, `Sheriff` zawierają metody publiczne:\n - `T getHealth()` – zwraca liczbę punktów życia mieszkańca,\n - `T getAge()` – zwraca wiek mieszkańca,\n - `void takeDamage(T damage)` – zmniejsza liczbę punktów życia mieszkańca o damage, ale nie więcej niż mieszkaniec ma aktualnie.\n\nKlasa `Sheriff` ma dodatkowo metodę publiczną:\n - `T getAttackPower()` – zwraca siłę ataku szeryfa.\n\nSzablony klas `Adult`, `Teenager`, `Sheriff` powinny być specjalizacją ogólniejszego szablonu `Citizen\u003ctypename T, ...\u003e`.\n\n## monster.h\n\nKlasy `Zombie\u003ctypename T\u003e`, `Vampire\u003ctypename T\u003e`, `Mummy\u003ctypename T\u003e`, gdzie `T` jest typem pól przechowujących punkty życia i siłę ataku.\n\n\nKlasy `Zombie`, `Vampire` i `Mummy` przyjmują w konstruktorze `T health` oraz `T attackPower`.\n\nKlasy `Vampire`, `Zombie` i `Mummy` mają metody publiczne:\n - `T getHealth()` – zwraca liczbę punktów życia potwora,\n - `T getAttackPower()` – zwraca siłę ataku potwora,\n - `void takeDamage(T damage)` – zmniejsza liczbę punktów życia potwora o damage, ale nie więcej niż potwór ma aktualnie.\n\n\nKlasy `Vampire`, `Zombie` i `Mummy` mają publiczną składową valueType reprezentującą typ `T`, którym zostały sparametryzowane.\n\n\nDodatkowo trzeba stworzyć funkcję, która umożliwi potworowi zaatakowanie wybranego mieszkańca:\n - `void attack\u003cM, U\u003e(M monster, U victim)` – wykonuje atak na ofiarę, zabierając jej punkty życia.  Należy też uwzględnić specjalny przypadek, gdy `U = Sheriff\u003cT\u003e` – wtedy atak następuje w dwie strony – punkty życia traci zarówno szeryf, jak i potwór.\n\n\nSzablony klas `Zombie`, `Vampire` i `Mummy` powinny być specjalizacją ogólniejszego szablonu `Monster\u003ctypename T, ...\u003e`.\n\n## smalltown.h\n\nKlasa `SmallTown\u003ctypename M, typename U, U t0, U t1, typename... C\u003e`, gdzie:\n - `M` – typ potwora nawiedzającego miasto,\n - `U` – typ przechowujący czas,\n - `t0` – czas startowy,\n - `t1` – czas końcowy, po którego przekroczeniu następuje wyzerowanie licznika,\n - `C...` – typy mieszkańców.\nNależy sprawdzać poprawność parametrów `t0` i `t1` w czasie kompilacji.\n\n\nKlasa `SmallTown` przyjmuje w konstruktorze obiekt reprezentujący bestię oraz\nkolejno obiekty mieszkańców.\n\n\nKlasa `SmallTown` ma metody publiczne:\n - `tuple\u003cstring, T, size_t\u003e getStatus()` – zwraca nazwę typu potwora, liczbę jego punktów życia (typu `T`) oraz liczbę pozostałych przy życiu mieszkańców;\n - `void tick(U timeStep)` – na początku sprawdza aktualny czas; jeśli jest to czas ataku, to następuje atak na wszystkich mieszkańców; na koniec czas w miasteczku przesuwa się o timeStep.\n\n\n`SmallTown` operuje zgodnie z wewnętrznym zegarem. Czas liczony jest w godzinach, od godziny `0` do godziny `t1` i potem znów od godziny `0`, i tak cyklicznie. Pierwsze odliczanie zaczyna się od godziny `t0`. Potwór atakuje tylko o godzinach równych kolejnym liczbom z ciągu Fibonacciego. Obliczenie wszystkich potrzebnych liczb z tego ciągu i ich zapamiętanie w jakiejś kolekcji musi odbyć się w czasiekompilacji.\n\n\nŚmierć mieszkańca bądź potwora następuje w momencie, gdy jego liczba punktów życia osiągnie zero. Wywołanie `tick()` na miasteczku z martwym potworem i co najmniej jednym żywym mieszkańcem powoduje wypisanie na standardowe wyjście komunikatu \"CITIZENS WON\". Wywołanie `tick()` na miasteczku z martwymi mieszkańcami i żywym potworem powoduje wypisanie na standardowym wyjściu napisu \"MONSTER WON\". Jeśli zarówno mieszańcy, jak i potwór są martwi, to `tick()` wypisuje na standardowe wyjście \"DRAW\".\n\n# Kompilacja\n\nW tym zadaniu wymagane jest użycie kompilatora Clang, który wypisuje bardzo szczegółowe komunikaty o błędach w przypadku korzystania z szablonów i metaprogramowania. Rozwiązanie będzie kompilowane za pomocą polecenia\n\n\n`clang -Wall -std=c++14 -O2 -lstdc++`\n\nPrzykład użycia znajduje się w pliku `horror_example.cc`.\n\nRozwiązanie powinno zawierać pliki `citizen.h`, `monster.h`, `smalltown.h`. Pliki te należy umieścić w repozytorium w katalogu\n\n`grupaN/zadanie4/ab123456+cd123456`\n\nlub\n\n`grupaN/zadanie4/ab123456+cd123456+ef123456`\n\ngdzie N jest numerem grupy, a ab123456, cd123456, ef123456 są identyfikatorami członków zespołu umieszczającego to rozwiązanie. Katalog z rozwiązaniem nie powinien zawierać innych plików, ale może zawierać podkatalog private, gdzie można umieszczać różne pliki, np. swoje testy. Pliki umieszczone w tym podkatalogu nie będą oceniane.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbandysc%2Fjinp_1_horror","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbandysc%2Fjinp_1_horror","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbandysc%2Fjinp_1_horror/lists"}