Monet aloittavat ohjelmoinnin tekstiseikkailuilla ja tekevät
sen loogisesti ajatellen GOTO lauseilla.
JOS valinta = 1 MENE huoneeseen 1
Sitten nuori koodari ohjelmointisivustolle esittelemään koo-
diaan, joko ongelman takia tai muuten vain. Seuraa keskustelu
"Tässä koodi"
"EI SAA KÄYTTÄÄ GOTOA!"
"Miksei?"
"SITÄ EI SAA KÄYTTÄÄ!"
"Mitenkäs sitten"
"MIETI SITÄ!"
Ja tähän lopahti nuoren lupaava koodarin ura.
Siksi tein tämän koodivinkin, jonka esitän esimerkkipelin
muodossa. Toivottavasti saatte kommenteista selvää.
/* -Tekstiseikkailu pohja funktioilla- Kieli: C Alusta: DOS/Win */ #include <stdio.h> #include <stdlib.h> /* Tarvitaan muutama globaali muuttuja. h1,h2,h3 ovat valintojen "osoitelappuja." loppu kertoo milloin peli loppuu. huone on tämän hetkinen huone.*/ int h1,h2,h3,loppu = 0,huone=0; /* valintaf siirtää seuraavaan huoneeseen. huonef näyttää huoneen ja muuttaa osoitelaput. */ void valintaf(int val); void huonef(); int main() { while (1) { huonef(); /* Jos peli ei ole loppunut, kysytään minne mennään. Jos on loppunut, katkaistaan looppi*/ if (loppu != 1) { valintaf(getchar()); } else { break; } } system("PAUSE >NUL"); return 0; } void huonef() { system("cls"); switch (huone) { /* Jokainen huone on oma case-lohko. Ensin tulostetaan tekstit ja sitten muutetaan osoitelaput tai sanotaan peli loppuneeksi. (kts. 4 viimeistä)*/ case 0: printf("oOoOoOoOoOoOoOoOoOoO\n"); printf("O CEIKKAILU 0.1 o\n"); printf("o -operaatio FISU- O\n"); printf("OoOoOoOoOoOoOoOoOoOo\n\n"); printf("1)Pelaa\n"); printf("2)Juoni\n"); printf("3)Poistu\n"); h1 = 1; h2 = 100; h3 = 101; break; case 1: printf("Luulitko tosiaan, että kalat osaa pelata?\n\n"); printf("1)Tottakai\n"); printf("2)EN TIETENKÄÄN!\n"); printf("3)No sano sinä viisaampana\n"); h1 = 2; h2 = 3; h3 = 101; break; case 100: printf("Luulitko tosiaan, että saisit selville pelin\n"); printf("juonen näin helposti?\n"); printf("Mene nurkkaan häpeämään ja tule takaisin vasta\n"); printf("sitten, kun viitsit pelata itse.\n"); loppu = 1; break; case 101: printf("Tuommosia nöyssejä ei täällä kaivata, hyvästi!\n"); loppu = 1; break; case 2: printf("No mene sinä vaan niitten kalojesi kanssa pelaamaan.\n"); printf("Tämä peli ei nimittäin liity kaloihin mitenkään.\n"); loppu = 1; break; case 3: printf("Mikä sinulla on kaloja vastaan?\n"); printf("Ethän sinäkään osaa sukeltaa 24 tuntia vuorokaudessa,\n"); printf("mutta eivät kalat tule sinulle siitä huutamaan. HÄIVY!\n"); loppu = 1; break; } } void valintaf(int val) { switch (val) { /* Siirrytään pelaajan valitsemaan huoneeseen. Jos valinta on laiton (väärä numero tai kirjain), niin huone pysyy samana. */ case '1': huone = h1; break; case '2': huone = h2; break; case '3': huone = h3; break; default: break; } }
http://www.members.lycos.co.uk/ezuli/seka/
lainaus:
You are trying to download this file from a member page hosted on Lycos Tripod UK for free:
http://members.lycos.co.uk/ezuli/seka/ceikkailu2.exe To access this file, you need to visit the member page first:
http://members.lycos.co.uk/ezuli
(you will be redirected in 5 seconds)
huoh...
lainaus:
Sitten nuori koodari ohjelmointisivustolle esittelemään koo-
diaan, joko ongelman takia tai muuten vain. Seuraa keskustelu
"Tässä koodi"
"EI SAA KÄYTTÄÄ GOTOA!"
"Miksei?"
"SITÄ EI SAA KÄYTTÄÄ!"
"Mitenkäs sitten"
"MIETI SITÄ!"
Ja tähän lopahti nuoren lupaava koodarin ura.
GOTO:n käyttämisen vastustamisen alkuperä:
http://www.acm.org/classics/oct95/
Itse olen kyllä sitä mieltä että sopivasti käytettynä GOTO antaa koodiin kuin koodin sopivan piristysruiskeen sanoi Dijkstra mitä tahansa.
GOTOsta kerran puhe tässä, niin mielestäni juuri switch - case rakenteessa on otollinen paikka käyttää GOTOa, kun tietty CASE: "kutsuu" toista saman SWITCHin sisällä olevaa CASE: kohtaa. (kyllä, homma hoituu muutenkin, mutta pikku oikotiet on mukavia... ;)
Ja tästä varmaan joku voisi valittaa, että ei saa käyttää globaaleja muuttujia. :) Ohjelmoinnissa asiat oppii ehkä parhaiten niin, että tajuaa itse, minkä takia jokin juttu kannattaa tehdä tietyllä tavalla. Siksi voikin olla välillä hyvä, että ensin koettaa toteuttaa asian sillä ns. "väärällä" tavalla.
Kiva koodi ja jännä seikkailu :P
Spirits kirjoitti:
:D
Laaksonen: täällä vinkeissä kun lainaa, niin se keneltä-lainaa juttu ei tule siihen, tulee pelkkä lainaustagi ilman sitä esim: lainaus "sooda" niin ei tu "sooda"a siihen jos multa lainaa... juuh...
Miks juuri kukaan ei kehittele ns. "oikeita" tekstiseikkailupelejä? Siis sellasia, joissa on parseri ym.herkut :)
Vaikea on tehdä sitä C++.
Nyt juuri yritän, mutta se valittaa aina warningeja ja toistaa jotkut kohdat kaksi kertaa.
Ilmoittelen kun se valmistuu.
...jos valmistuu.
Tuli tosta mielee,että miten noi ääkköset saa korjattuuks?Kun yritän tehdä (teksti)peliä, niin ääkköset näkyvät ä=o minkä päällä pallo ja ö=jakomerkki,se mikä on numpadissa kasin yläpuolel...(anteeksi sekavaa tekstiä)
Itse käytän itsetekemääni ohjelmaa:
http://www.freewebs.com/ezuli/merkit.exe
(Kopioi linkki osoiteriville, jos ei klikkaamalla toimi)
Se vaihtaa ö,ä,Ö ja Ä kirjaimet windows-muodosta dos-muotoon.
Käyttö on yksin kertaista:
1)Kopioi samaan kansioon kuin käännettävä tiedosto ja
käynnistä ohjelma.
2)Ensin ohjelma kysyy käännettävän tiedoston nimen.
3)Ohjelma kysyy millä nimellä valmis talllennetaan.
HUOM! Talletettavan tiedoston nimi pitää olla eri kuin
lähde tiedoston, muuten tiedosto tyhjenee ilman varoitusta.
(Ohjelma suunniteltu omaan käyttöön -> ei optimoitu)
Mäki oon ajatellu että functioilla vois teherä. Tosin QBeelle.
Itse teen juuri tekstiseikkalu peliä, enkä ole täysin varma olenko toteuttamassa sitä oikein. Lähdekoodi on jo vähän yli 200 riviä pitkä, joten en viittisi sitä tänne kopioida, jos jotain kiinnostaa niin sen saa täältä: http://vehkis.100free.net/content/main.cpp
Hups osoite on tämä: http://vehkis.100free.com/content/main.html
vehkis91 kirjoitti:
Hups osoite on tämä: http://vehkis.100free.com/content/main.html
ei tuo oikein toimi. pistä toimiva linkki. olisin mielenkiinnosta kattonu että miten oot tehny :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.