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";
};
}
//---------------------------------------------------------------------------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] = {
"...............",
"...............",
"..............."
};Kiitos vinkistä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.