Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Merkkigraafinen peli

Sweiz [22.01.2006 22:54:42]

#

Terve! Olen aloitellut tämmöistä merkkigraafista peliä C++ : lla. Ongelmani on se, etten saa näkymään merkkiä, joka kertoo missä pelaaja on. Toivottavasti joku osaisi auttaa. Kiitos.

Alussa, X on 2, Y on 2, pitää siis kirjoittaa 'O' kohtaan alue[1][1]

#include <clx.h>
#pragma hdrstop

#include <iostream.h>

//Itse pelaajan tiedot
namespace ukko {
        char nimi[9];   //Pelaajan nimi
        int x = 2;      //Pelaajan vaaka-sijainti (X)
        int y = 2;      //Pelaajan pysty-sijainti (Y)
        int raha = 150; //Pelin alkaessa pelaajalla on 150€ rahaa
        int helt = 100; //Pelin alkaessa täysi energia
};

int liiku;

//Liikkuvat symboolit
char hahmo = 'O';     //Pelaaja
char vih1 = 'A';      //Jalankulkija
char vih2 = 'B';      //1. Vihollinen
char vih3 = 'C';      //2. Vihollinen

//Liikkumattomat symboolit
char seina = '#';     //Seinä, läpi ei pääse
char koti = 'H';      //Koti, voi tallentaa pelin
char kauppa = 'X';    //Kauppa, voi ostaa panoksia aseeseen
char puu = 'P';       //Puu, läpi ei pääse
char tolppa = 'T';    //Tolppa, läpi ei pääse
char tehtavat = 'E';  //Täältä saa tehtäviä

#pragma argsused
int main(int argc, char* argv[])
{

        cout << "Tervetuloa pelaamaan FlatLandia v1.0!\n\n";
        cout << "Mika on sinun nimesi? ________\b\b\b\b\b\b\b\b";
        cin >> ukko::nimi;

        //Pelikartta
        char alue[15][15]={
        {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}, //[0]
        {'#','.','.','.','.','.','.','.','.','.','.','.','H','H','#'}, //[1]
        {'#','.','.','.','.','.','.','.','.','.','.','.','H','H','#'}, //[2]
        {'#','.','.','.','.','.','.','.','.','.','.','.','.','.','#'}, //[3]
        {'#','#','#','#','#','#','#','.','.','.','.','.','.','.','#'}, //[4]
        {'#','.','.','.','.','.','#','.','.','.','.','.','.','.','#'}, //[5]
        {'#','.','.','.','.','.','#','.','.','.','.','.','.','.','#'}, //[6]
        {'#','.','.','#','.','.','.','.','.','.','.','.','.','.','#'}, //[7]
        {'#','.','.','#','.','.','.','.','.','.','.','.','.','.','#'}, //[8]
        {'#','.','.','#','.','.','.','.','.','.','.','.','.','.','#'}, //[9]
        {'#','.','.','#','.','.','.','.','.','.','.','.','.','.','#'}, //[10]
        {'#','.','.','#','.','.','.','.','.','.','.','.','.','.','#'}, //[11]
        {'#','.','.','.','.','.','.','.','.','.','.','.','.','.','#'}, //[12]
        {'#','.','.','.','.','.','.','.','.','.','.','.','.','E','#'}, //[13]
        {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}  //[14]
        };

        cout << ukko::nimi << " | ";              //Tulosta pelaajan nimi
        cout << "<Q = Quit> | ";
        cout << "Raha: " << ukko::raha << "€ | ";  //Rahat
        cout << "Energia: " << ukko::helt << "%";  //Energia


        //Sijoitetaan kartta hieman alas
        cout << "\n\n\n\n\n\n\n\n";

        //Liiku
        switch (liiku){
                case 'q':return 0; //Ohjelma loppuu
                case 4: ukko::x--; //Vasenmalle
                case 6: ukko::x++; //Oikealle
                case 8: ukko::y--; //Ylös
                case 2: ukko::y++; //Alas
        };

        //Tulostetaan ruutuun
        for (int a = ukko::x; a < 10; a++){
                for (int b = ukko::y; b < 15; b++){
                        cout << alue[a][b];
                };
        cout << "\n";
        };
}
//---------------------------------------------------------------------------

Peli on vielä alkeellisessa vaiheessa, ja useimmilla muuttujilla ei vielä tee mitään.

Tiedän, että viimeisessä For-silmukassa on virhe, se oli vain epätoivoinen yritys.

        //Tulostetaan ruutuun
        for (int a = 0; a < 10; a++){
                for (int b = 0; b < 15; b++){
                        cout << alue[a][b];
                };
        cout << "\n";
        };
}
//---------------------------------------------------------------------------

Metabolix [23.01.2006 00:12:56]

#

C++:n perusominaisuuksilla on jokseenkin toivotonta saada aikaan mitenkään graafista peliä. Hakeudu suosiolla NCurses-/PDCurses-oppaan pariin.

Jos kuitenkin haluat yrittää, niin tee tähän tapaan:

char Ruutu[25][81]; // Tässä 81, koska loppuun halutaan \0-merkki
char Taso[25][80]; // Tämä on tason "maasto". Toteuta miten haluat, tämä on vain periaate-esitys.

// Kaikki rivit päättymään...
for (y = 0; y < 25; ++y)
  Ruutu[y][80] = 0;

// ================================
// "piirrellään" maasto paikalleen
for (y = 0; y < 25; ++y)
  for (x = 0; x < 80; ++x)
    Ruutu[y][x] = 0;

// Ukko oikeaan paikkaan
Ruutu[ukko::y][ukko::x] = ukko::merkki;

// Tulostetaan rivit ruudulle.
for (y = 0; y < 25; ++y)
  cout << Ruutu[y];

Voi olla, että rivejä pitää hieman lyhentää, ettei tule automaattista rivitystä. Muutenkaan ei ole taattua, että kaikilla olisi yhtä iso komentorivilaatikko. Eli suosittelen uudestaan NCurses-/PDCurses-opasta.

Niin ja pelialue kannattaa alusta asti ladata tiedostosta. Koodiin kirjoittaessakin sen voi tehdä näin lainausmerkeillä (tilaa yksi enemmän kuin merkkejä):

char alue[3][15] = {
 "...............",
 "...............",
 "..............."
};

Sweiz [23.01.2006 14:45:20]

#

Kiitos vinkistä.

Vastaus

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

Tietoa sivustosta