Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C: Tekstiseikkailu funktioilla

Sivun loppuun

ezuli [29.06.2004 16:51:55]

#

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;
    }
}

Draiz [03.07.2004 00:39:20]

#

http://www.members.lycos.co.uk/ezuli/seka/ceikkailu2.exe

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...

Spirits [03.07.2004 00:49:08]

#

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.

WinC [03.07.2004 23:41:22]

#

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... ;)

Antti Laaksonen [04.07.2004 12:07:25]

#

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.

sooda [05.07.2004 16:38:47]

#

Kiva koodi ja jännä seikkailu :P

Spirits kirjoitti:

http://www.acm.org/classics/oct95/

: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...

J.J. [05.07.2004 20:49:15]

#

Miks juuri kukaan ei kehittele ns. "oikeita" tekstiseikkailupelejä? Siis sellasia, joissa on parseri ym.herkut :)

Tuplanolla [15.07.2004 21:15:26]

#

Vaikea on tehdä sitä C++.
Nyt juuri yritän, mutta se valittaa aina warningeja ja toistaa jotkut kohdat kaksi kertaa.
Ilmoittelen kun se valmistuu.

Tuplanolla [15.07.2004 21:26:41]

#

...jos valmistuu.

p-p [31.07.2004 13:00:32]

#

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ä)

ezuli [31.07.2004 20:59:51]

#

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)

Dude [06.09.2007 16:14:21]

#

Mäki oon ajatellu että functioilla vois teherä. Tosin QBeelle.

vehkis91 [24.01.2008 17:08:46]

#

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

vehkis91 [24.01.2008 17:13:24]

#

Hups osoite on tämä: http://vehkis.100free.com/content/main.html

pienipoika [25.07.2008 02:23:32]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta