Aihepiiri: pelit
Labyrintti
Tee ohjelma, joka luo ja piirtää ruudulle labyrintin, sekä asettaa hiirulaisen (tms.) labyrintin keskelle vapaaseen ruutuun. Ohjelman generoiman labyrintin pitää olla sellainen, että sillä on ratkaisu (ulospääsy tai maaliruutu, johon on mahdollista päästä lähtöruudusta).
Käyttäjän tehtävä on ohjata hiiri pois labyrintistä. Käyttäjällä pitää olla mahdollisuus luovuttaa, jolloin ohjelman on pystyttävä kuljettamaan "demomaisesti" itsekin hiiri pois labyrintistä ja/tai näyttämään oikea reitti. Mm. Think Labyrinth-sivustolla [1] on annettu joukko mahdollisia algoritmeja.
Labyrintti ei saa olla vain tasomainen, vaan sen tulee tukea myös toisiaan ylittäviä/alittavia reittejä. Vilkaise lähteestä [1] selitys siitä millaisia ovat 3d ja weave-tyyppiset sokkelot.
Labyrintti täytyy voida tallentaa ohjelmasta tiedostoon jossakin itse keksityssä formaatissa. (**e* Pickle:n avulla)* Kaksi esimerkkiä suht erilaisista formaateista on esitetty harjoituskierroksella 4.
Vaatimukset
Helppo
- Aiheen perusvaatimukset (yllä)
- merkkipohjainen liittymä
- kiinnitä erityistä huomiota ohjelman toimivuuteen ja selkeään ulkoasuun
- labyrintti voi koostua neliömäisistä ruuduista.
Keskivaikea
- kaikki helpon työn vaatimukset mutta graafisella liittymällä
- labyrintin koon tulee olla vapaasti annettavissa
Vaativa
- Kaikki keskivaikean työn vaatimukset, sekä:
- laajennettavuuteen on kiinnitettävä erityistä huomiota. Yritä mahdollistaa mm. ratkaisu- ja luontialgoritmien helppo lisääminen.
- lisäksi ainakin kaksi seuraavista (tai kaksi vastaavaa assistentin
kanssa sovittua lisäominaisuutta):
- hiottu pelimäisyys eli pelillinen käytettävyys, pelin tulee olla hyvin kätevästi pelattavissa (ei kelpaa ilman dokumenttiin kirjoitettuja perusteluita)
- labyrintin luonti- ja ratkaisualgoritmien pitää olla tehokkaita (muistin ja ajan suhteen)
- labyrintin kokoa ei ole rajoitettu näkyvään alueeseen, vaan ruutu liikkuu pelaajan mukana
- järkevä pisteytys ja tuloslista. tässä voi hyödyntää ajanottoa (pelkkä aika ei kelpaa), siirtojen määrää, labyrintin laatua tms.
- labyrintti ei ole yksinkertainen neliöihin perustuva 2D-labyrintti vaan jotain monimutkaisempaa kuusikulmainen 2D-labyrintti tms.
Lähteet
- [1] Think Labyrinth: http://www.astrolog.org/labyrnth/algrithm.htm
- Cormen et. al., Introduction to Algorithms (tai vastaavamuu tietorakennekirja). Luvussa graafialgoritmeista on (riippumatta kirjasta) selitetty joitakin tässä mahdollisesti sovellettavia graafien hakualgoritmeja.