Kirjoittaja Aihe: Ferment, teksti-RPG  (Luettu 2576 kertaa)

TQeng

  • Käyttäjä
  • Viestejä: 157
  • Zenwalk / PCLOS / Kubuntu
    • Profiili
    • Vaihtoehto.org
Ferment, teksti-RPG
« : 09.08.09 - klo:01.21 »
Olen kirjoitellut vuodesta 2006 alkaen, varsin hitaasti ja satunnaisesti, lähinnä omaksi ilokseni ja ohjelmointiharjoituksena tekstipohjaista roolipeliä.

Koodirivejä on tällä erää n. 6 700 ja pelin perusrunko alkaa olla kunnossa.

Ferment - Revenge of the Post-Apocalyptic Communist Ninjas on kunnianosoitus fantasiaropejen genrelle ja vähän kaikelle muullekin, tekee popkulttuuriviittauksista taidetta ja on muutenkin varsin erinomainen pieni peli. Pelin perustiedot löytyvät esittelysivulta.

On toki myönnettävä, että vajaan kolmen vuoden kehitystyön jälkeenkään peli ei ole aivan täydellinen. C++-taitoni kun rajoittuvat noin kymmeneen funktioon, joita väärinkäytän surutta. Switch-case ja do-while esiintyvät tiheään. Koodi ei ole ehkä kaunista, mutta useimmiten se toimii.

Tämän ketjun tarkoitus ei niinkään ole markkinoida tuotetta, vaan toimia interaktiivisena ohjelmointipäiväkirjana, jota satunnaisesti päivittelen, ja jossa kokeneemmat voivat joskus neuvoa ongelmissa. Tästä syystä en laittanut ketjua Pelit-alueelle.

Juoni ei ole vielä valmis, eikä pelitasapainoa ole hiottu kuin alkuvaiheen osalta. Tällä hetkellä kehityksessä prioriteettina on vapaamman liikkumismallin keksiminen - suunnitelmissa on roguelike-peleistä tuttu ascii-kartalla suunnistaminen ja tähän liittyen vielä erilliset luolastot. Ja vaikka Fermentin peruslähtökohta onkin olla teksti-RPG, pitkän tähtäimen jatkosuunnitelmiin kuuluu myös GUI:n liimaaminen päälle, kunhan joskus saan aikaiseksi opetella GUI-ohjelmointia.

Eilen "julkaistu" versio 0.0.0.29 on pikkupäivitys joka lähinnä helpottaa hieman peliä. Viimeisimmät suuret muutokset liittyvät tallennusten hallintaan ja talousjärjestelmään.

Tässä vielä työn alla olevan uuden liikkumisfunktion raakaversio, joka löytyy kyllä lähdekoodista mutta ei ole vielä käytössä. Idea on se, että kursorin paikka siirtyy numeroa painamalla tiettyyn suuntaan, johon piirretään pelaajan hahmoa osoittava kirjain. Taustagrafiikka piirretään myös joka päivityksellä uusiksi. Typerä idea, kenties? Toimii kuitenkin jotenkuten.

Koodia: [Valitse]
int mapAlt()
{
int currentchoice;
int fightornot, fightresult, fightlevel, hunterspecial=1;
int posx, posy;
system("clear");
showstats();
ruler();
cout << "                                                                 \n";
cout << "                             :::::::::PI::                       \n";
cout << "                   SE:::::::::   :    :  ::                      \n";
cout << "                   :  ::       :::    ::::::                     \n";
cout << "                   :   ::::    :      :    ::                    \n";
cout << "                   :      ::: ::      :     ::                   \n";
cout << "                   :        CK::::::::::::::::::::::KR           \n";
cout << "                   :      :: ::       :                          \n";
cout << "                   :    :::   :::::::LE                          \n";
cout << "                   :  :::     : ::                               \n";
cout << "                   : ::      :NA                                 \n";
cout << "                   ES:::::::::                                   \n";
cout << "                                                                 \n";
if (cityid == 2)
{
posx = 21;
posy = 10;
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
}
do
{
currentchoice = mygetch()-'0';
updateinfla();
switch (currentchoice)
{
case 1:
posy++;
posx--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 2:
posy++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 3:
posy++;
posx++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 4:
posx--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 5:
break;
case 6:
posx++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 7:
posy--;
posx--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 8:
posy--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 9:
posy--;
posx++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 0:
break;
}
fightornot=(rand()%20)+1;
if (fightornot <= 3)
{
EPÄOLENNAISTA KOODIA LEIKATTU TÄSTÄ
}
else
{
EPÄOLENNAISTA KOODIA LEIKATTU TÄSTÄ
}
}while (currentchoice != 0);
mygetch();
return 0;
}

void drawMap()
{
system("clear");
showstats();
ruler();
cout << "                                                                 \n";
cout << "                             :::::::::PI::                       \n";
cout << "                   SE:::::::::   :    :  ::                      \n";
cout << "                   :  ::       :::    ::::::                     \n";
cout << "                   :   ::::    :      :    ::                    \n";
cout << "                   :      ::: ::      :     ::                   \n";
cout << "                   :        CK::::::::::::::::::::::KR           \n";
cout << "                   :      :: ::       :                          \n";
cout << "                   :    :::   :::::::LE                          \n";
cout << "                   :  :::     : ::                               \n";
cout << "                   : ::      :NA                                 \n";
cout << "                   ES:::::::::                                   \n";
cout << "                                                                 \n";
}

Jos jotakuta kiinnostaa testailla tämänhetkistä tuotetta, palaute tietysti kelpaa. Lähdekoodit löytyvät osoitteesta http://www.vaihtoehto.org/ferment.

Pelihän näyttää suurin piirtein seuraavalta:

« Viimeksi muokattu: 09.08.09 - klo:01.22 kirjoittanut TQeng »
Satius est supervacua scire quam nihil.

TQeng

  • Käyttäjä
  • Viestejä: 157
  • Zenwalk / PCLOS / Kubuntu
    • Profiili
    • Vaihtoehto.org
Vs: Ferment, teksti-RPG
« Vastaus #1 : 11.08.09 - klo:02.24 »
KFerment:

http://www.vaihtoehto.org/ferment/pics/kferment1.png

Toisin sanoen, jätin liikkumissysteemin hautumaan, ja pari viime päivää olen leikkinyt KDevelopilla. Yllä oleva on täysin toimintakelvoton mockup varsinaisesta peli-ikkunasta, mutta hahmonluonti-ikkunaan sain jo viriteltyä nimigeneraattorini toimivaksi. No, kyllä tuossakin Exit-nappi toimii.

Törmäsin heti aluksi pienimuotoiseen pulmaan: Fermentin koko toiminta on tähän mennessä perustunut pitkälti global variableihin, mikä ei Qt:n kanssa pelaillessa ole edes niin suotavaa kuin muuten. Tämä pakottaa etsimään vaihtoehtoista lähestymistapaa, jos haluan viedä Qt-version ajatusleikkiä pidemmälle.

« Viimeksi muokattu: 11.08.09 - klo:02.28 kirjoittanut TQeng »
Satius est supervacua scire quam nihil.

Lasse.

  • Käyttäjä
  • Viestejä: 1668
  • Techjunkie.
    • Profiili
    • Liquid Flower Games
Vs: Ferment, teksti-RPG
« Vastaus #2 : 11.08.09 - klo:23.03 »
Eikö teksti-RPG olisi alunperinkin olisi ollut järkevintä rakentaa ncurses-kirjastolla?  ::) Ei oikein tunnu järkevältä että käyttäjän distrolla on oltava QT että voi pelata teksti-RPG:tä...
Kone 1: Intel Core i5 2500K, 8GB DDR3, nVidia GTX 560 Ti 1GB, 2x1TB & 1x 250GB HDD, Windows 7 & Arch
Kone 2: Lenovo Ideapad Z370 (i5-2410M, 4GB RAM & GeForce 410M) Chakra
Google LG Nexus 4 (ParanoidAndroid)
Linuxia noin vuodesta 2004.

TQeng

  • Käyttäjä
  • Viestejä: 157
  • Zenwalk / PCLOS / Kubuntu
    • Profiili
    • Vaihtoehto.org
Vs: Ferment, teksti-RPG
« Vastaus #3 : 11.08.09 - klo:23.22 »
Qt-kokeilut ovat nimen omaan kokeilua ja ohjelmointiharjoittelua. Varsinainen Ferment on teksti-RPG, jonka pelaamiseen ei tarvita käytännössä mitään muuta kuin *nix ja terminaali. Pelin nykymuodossa graafiseen käyttöliittymään ei varsinaisesti ole edes minkäänlaista tarvetta.

Ncursesiakin olen harkinnut, ja se on myös mahdollinen kehityssuunta varsinaiselle teksti-RPG-versiolle tulevaisuudessa.
Satius est supervacua scire quam nihil.

Lasse.

  • Käyttäjä
  • Viestejä: 1668
  • Techjunkie.
    • Profiili
    • Liquid Flower Games
Vs: Ferment, teksti-RPG
« Vastaus #4 : 12.08.09 - klo:00.00 »
Ai, ymmärsin väärin, anteeksi siinä tapauksessa.
Kone 1: Intel Core i5 2500K, 8GB DDR3, nVidia GTX 560 Ti 1GB, 2x1TB & 1x 250GB HDD, Windows 7 & Arch
Kone 2: Lenovo Ideapad Z370 (i5-2410M, 4GB RAM & GeForce 410M) Chakra
Google LG Nexus 4 (ParanoidAndroid)
Linuxia noin vuodesta 2004.

TQeng

  • Käyttäjä
  • Viestejä: 157
  • Zenwalk / PCLOS / Kubuntu
    • Profiili
    • Vaihtoehto.org
Vs: Ferment, teksti-RPG
« Vastaus #5 : 18.08.09 - klo:19.23 »
Eipä ole mitään syytä pyydellä anteeksi. ;)

Jatkoin vielä Qt-harjoittelua. Tuloksena on tällä hetkellä jo melko lailla pelikelpoinen KFerment. Mitään uusia ennennäkemättömiä ominaisuuksia en ole tähän versioon implementoinut, ja oikeaan teksti-Fermentiin verrattuna puutteitakin löytyy. Tärkeimpänä lähinnä se, ettei peliä voi vielä tallentaa tai ladata. Tarinakin puuttuu lähes kokonaan, mutta pelimekaniikka toimii.

Ulkoasusta viilasin turhia nappeja pois (nykyinen peli-ikkuna).

Jatkanen Qt-harjoituksia vielä hetken ja jatkan sitten tekstiversion kehittämistä.
Satius est supervacua scire quam nihil.