10. Exam

10.1. Dragon (version alpha)

../_images/dragon2.gif

Figure 36. Firkraag dragon from game Baldur's Gate II: Shadows of Amn

English
  1. Dragon has:

    1. name

    2. position x on the screen

    3. position y on the screen

    4. texture file name, default img/dragon/alive.png

    5. health points, default random int in range from 50 to 100

  2. Dragon can:

    1. have position set to any place on the screen

    2. make damage in range from 5 to 20

    3. take damage

    4. move in any direction by specified value

  3. Assume left-top screen corner as a initial coordinates position:

    1. going right add to x

    2. going left subtract from x

    3. going up subtract from y

    4. going down add to y

  4. After each hit, print: name of the Dragon, damage taken, current health points

  5. When health points drop to, and below zero:

    1. Dragon is dead

    2. Set object status to dead

    3. Print XXX is dead, where XXX is the name of the dragon

    4. Change texture file name to img/dragon/dead.png

    5. Print how much gold Dragon dropped (random in range from 1 to 100)

    6. Print position where dragon died

    7. Dragon cannot take any more damage

    8. Dragon cannot make any more damage

    9. Dragon cannot move or have position set

  6. Run the game:

    1. Create dragon at x=50, y=120 position and name it "Wawelski"

    2. Set new position to x=10, y=20

    3. Move dragon left by 10 and down by 20

    4. Move dragon left by 10 and right by 15

    5. Move dragon right by 15 and up by 5

    6. Move dragon down by 5

    7. Make 10 points damage to the dragon

    8. Make 5 points damage to the dragon

    9. Make 3 points damage to the dragon

    10. Make 2 points damage to the dragon

    11. Make 15 points damage to the dragon

    12. Make 25 points damage to the dragon

    13. Make 75 points damage to the dragon

Non-functional requirements
  • Task is a narrative story telling to demonstrate OOP and good engineering practices

  • Last position should be x=20, y=40

  • You can introduce new fields, methods, functions, variables, constants, classes, objects, whatever you want

  • Task is business requirements specification, not a technical documentation, i.e. "what Dragon has to do, not how to do it"

  • You don't have to keep order of business specification while writing code

  • This is alpha version, so no new functionality like negative position checking

  • Do not read any future iterations of this exercise. This is a simulation of development process. If you read future tasks, you will spoil fun and learning.

Polish
  1. Smok ma:

    1. nazwę

    2. pozycję x na ekranie

    3. pozycję y na ekranie

    4. nazwę pliku tekstury, domyślnie img/dragon/alive.png

    5. punkty życia, domyślnie losowy int z zakresu od 50 do 100

  2. Smok może:

    1. być ustawiony w dowolne miejsce ekranu

    2. zadawać komuś losowe obrażenia z przedziału od 5 do 20

    3. otrzymywać obrażenia

    4. być przesuwany o zadaną liczbę punktów w którymś z kierunków

  3. Przyjmij górny lewy róg ekranu za punkt początkowy:

    1. idąc w prawo dodajesz x

    2. idąc w lewo odejmujesz x

    3. idąc w górę odejmujesz y

    4. idąc w dół dodajesz y

  4. Przy każdym obrażeniu wypisz nazwę Smoka, ilość obrażeń i pozostałe punkty życia

  5. Kiedy punkty życia Smoka spadną do, lub poniżej zera:

    1. Smok jest martwy

    2. Ustaw status obiektu na dead

    3. Wypisz napis XXX is dead gdzie XXX to nazwa smoka

    4. Zmień nazwę pliku tekstury na img/dragon/dead.png

    5. Wypisz ile złota smok wyrzucił (losowa 1-100)

    6. Wypisz pozycję gdzie smok zginął

    7. Nie można zadawać mu obrażeń

    8. Smok nie może zadawać obrażeń

    9. Smok nie może się poruszać

  6. Przeprowadź grę:

    1. Stwórz smoka w pozycji x=50, y=120 i nazwij go "Wawelski"

    2. Ustaw nową pozycję na x=10, y=20

    3. Przesuń smoka w lewo o 10 i w dół o 20

    4. Przesuń smoka w lewo o 10 i w prawo o 15

    5. Przesuń smoka w prawo o 15 i w górę o 5

    6. Przesuń smoka w dół o 5

    7. Zadaj 10 obrażeń smokowi

    8. Zadaj 5 obrażeń smokowi

    9. Zadaj 3 obrażeń smokowi

    10. Zadaj 2 obrażeń smokowi

    11. Zadaj 15 obrażeń smokowi

    12. Zadaj 25 obrażeń smokowi

    13. Zadaj 75 obrażeń smokowi

Wymagania niefunkcjonalne
  • Zadanie jest tylko narracją do demonstracji OOP i dobrych praktyk programowania

  • Pozycja Smoka na końcu powinna być x=20, y=40

  • Możesz wprowadzać dodatkowe pola, metody, funkcje, zmienne, stały, klasy, obiekty, co tylko chcesz

  • Zadanie jest specyfikacją wymagań biznesowych, a nie dokumentacją techniczną. tj. "co Smok ma robić, a nie jak to ma robić"

  • Nie musisz trzymać się kolejności punktów i podpunktów w zadaniu

  • Jest to wersja alpha więc bez dodatkowych funkcjonalności (np. sprawdzanie koordynatów)

  • Nie przeglądaj kolejnych (przyszłych) części zadania. Zadanie jest symulacją procesu developmentu. Jeżeli zaglądniesz w przód, to zepsujesz sobie zabawę i naukę.

The whys and wherefores
  • Object oriented thinking

  • Data modeling in OOP

  • Designing and working with objects

  • Nested objects

  • Interface specification

  • MVC architecture

  • Good Engineering Practices

  • Keep it Simple

  • Open to extensions, close for modifications

Hint
  • from random import randint