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.