Komponentit - Demo 3
Tee seuraavat ohjelmat käyttäen Visual Studiota (tai vastaavaa) ja Windows Formsia. Muista palauttaa jokainen tehtävä omassa kansiossaan!
Tehtävä 1
Luo mallikuvaa vastaava ohjelma käyttäen omia komponentteja. Luo seuraavat komponentit:
- Peri TextBox-luokasta oma luokka, joka osaa tarkistaa, että siihen on syötetty kokonaisluku, joka on halutulla välillä.
- Lukuväli pitää pystyä määrittämään designer-tilassa sopivan propertyn/propertyjen avulla
- Peri TextBox-luokasta oma luokka, joka osaa tarkistaa, että siihen on syötetty minuutin tarkkuudella päivämäärä ja kellonaika (ISO-standardimuodossa esim. 2010-09-24 18:32), jotka ovat menneisyydessä.
- Peri TextBox-luokasta oma luokka, joka osaa tarkistaa, että siihen on syötetty ajanjakso muodossa hh:mm:ss eli esim 03:20:50 tai 12:02:00. vrt. sql-kielen interval ilman päiväosaa.
Kentän taustaväri muuttuu punaiseksi jos kentän arvo ei ole kelvollinen. Kelvollisen syötteen jälkeen taustaväri palaa normaaliksi.
Kenttien rajoitteet:
- Alkuaika: menneisyydessä oleva pvm ja kellonaika
- Kesto: ajanjakso muodossa hh:min:ss
- Keskisyke: kokonaisluku väliltä 20-220
- Maksimisyke: kokonaisluku väliltä 20-220
- Noususumma: kokonaisluku väliltä 0-50000
- Maksimikorkeus: kokonaisluku väliltä -15000 - 15000
- Kalorit: kokonaisluku väliltä 0 - 10000
- Lämpötila: kokonaisluku väliltä -275 - 100
- Tuuli: kokonaisluku väliltä 0-100
- Matka: kokonaisluku väliltä 0-10000
Kokeile komponenttejasi mallin mukaisella lomakkeella. Itse tuotettua ohjelmakoodia ei saa olla riviäkään muualla kuin omissa komponenteissa. Lomakkeella olevat painikkeet eivät tee mitään.
Tehtävä 2
Laajenna edellistä tehtävää seuraavasti:
Tee aiemmista komponenteistasi koostettuja. Yhdistä samaan komponenttiin tekstikenttä ja siihen liittyvä label. Tee koostetuilla komponenteilla samanlainen lomake samalla toiminnallisuudella kuin edellisessä tehtävässä.
Virheellisen syötteen tapauksessa kentän viereen ilmestyy ErrorProvider-luokalla toteutettu ikoni, joka kertoo tarkemmin mitä syötteessä on vialla.
Virheikoni poistuu näkyvistä, kun kentän syöte on kelvollinen.
Lomakkeen cancel-painikkeella voi sulkea lomakkeen milloin tahansa. Lomakkeen ok-painike sulkee lomakkeen vain jos kaikkiin kenttiin on syötetty kelvollinen arvo. Nyt saa ohjelmakoodia olla muuallakin kuin komponenteissa.
Tehtävä 3
Tee uusi komponentti LiikkuvaAuto, jolla on oma nopeus ja joka tutkii itse, milloin tulee seinä vastaan. Peri LiikkuvaAuto PictureBox-luokasta. Auto kulkee näytöllä aluksi satunnaiseen suuntaan (myös pystysuunnassa) ja muuttaa seinän kohdalla suuntaansa 90 astetta.
Auton oletusnopeus pitää olla asetettavissa propertyna designer-tilassa.
Auto tietää miten monta kertaa se on törmännyt seinään. Tämä tieto pitää olla saatavilla myös propertyna.
Auto aiheuttaa Tormays-tapahtuman aina törmätessään seinään.
Auto aiheuttaa Rikki-tapahtuman törmättyään 10 kertaa seinään. Auto ei enää liiku näin monen törmäyksen jälkeen. Autolla pitää olla property OnkoEhja, joka kertoo vieläkö auto on kunnossa vai ei.
Tee sopiva testiohjelma jossa voit kokeilla komponenttiasi. Laita ohjelmaan painike jolla voi luoda uusia liikkuvia autoja. Laita ohjelmaan myös laskuri josta näkee kuinka monesti seinään on törmätty. Laita ohjelmaan myös laskuri, joka kertoo montako rikkinäistä autoa ohjelmassa on.
Tehtävä 4
Laajenna edellisen tehtävän LiikkuvaAuto-luokkaa siten, että auto muuttaa suuntaa myös muista autoista. Auto siis törmää muihin autoihin samaan tapaan kuin lomakkeen seiniin.
Törmäys rikkinäiseen autoon liikauttaa myös rikkinäistä autoa vähän matkaa ja aiheuttaa törmäys-tapahtuman myös rikkinäisessä autossa.
Laajenna auto hoksaamaan myös kaikki muut mahdolliset lomakkeella olevat kontrollit. Auto törmäisi ja muuttaisi suuntaa siis myös vaikkapa painikkeesta.
Auto tuhoutuu kun se on törmännyt/siihen on törmätty 20 kertaa. Auto lähettää Tuhoudun-tapahtuman ja katoaa.
Laajenna testipääohjelmaa siten, että ohjelmasta näkee montako autoa on tuhoutunut.
Tehtävä 5
Kirjoita koostettu ChessClock-komponentti. Komponentilla on property jolla määritellään aloitusaika josta aika lähtee pienenemään. Komponentissa on kaksi digitaalista kelloa eli yksi kummallekkin pelaajalla. Komponentissa on painike jolla aina toinen kello pysähtyy ja toinen lähtee liikkeelle. Komponentti aiheuttaa TurnOver-tapahtuman aina, kun painiketta painetaan. Komponentti aiheuttaa GameOver-tapahtuman, kun jomman kumman kellon aika loppuu.
Koosta ChessClock-komponentti kahdesta Clock-komponentista ja painikkeesta. Clock-komponentti esittää digitaalisessa muodossa nollaa kohti juoksevan kellonajan. Clock-komponentilta pitää voida kysyä sen hetkinen jäljellä oleva aika ja pystyä asettamaan ja kysymään aloitusaika. Komponentilla on Start-metodi jolla kello lähtee käyntiin ja Stop-metodi jolla kello pysäytetään ja Restart-metodi jolla kello aloittaa uudelleen alusta. Komponentti lähettää TimeOut-tapahtuman ajan loppuessa. Komponentti lähettää aina käynnistyessään tapahtuman IdleOver ja pysähtyessään tapahtuman ThinkingOver. Kumpikin tapahtuma sisältää tiedon kauanko on kulunut aikaa edellisestä. Kello myös tietää montako kertaa se on pysäytetty ja käynnistetty. Restart nollaa laskurin.
Kirjoita pieni testiohjelma jossa shakkikelloa voi testata. Testiohjelma ilmoittaa kumpi pelaaja voitti.
Käyttäjien kommentit