Eli, miten tehdä karttasysteemi joka lataa kartan tekstitiedostosta? Ja miten voi etsiä sen kansion mihin peli on luotu? Jos olen tehnyt tekstitiedoston jossa on nollia ja ykkösiä ja minun pitäisi saada se ladattua peliin niin miten tekisin sen?
No joo, tässä on kuvaustasi vastaava, staattinen kartanlataaja. Annoin taulukon tietotyypiksi bool, koska 1:stä ja 0:aa varten on kai turha käyttää muuta.
Karttatiedosto sisältää siis niitä ykkösiä ja nollia. Yhdellä rivillä on aina kartan leveyden verran tavaraa.
#include <fstream> #include <iostream> #include <string> using namespace std; #define LEVEYS 20 // koko #define KORKEUS 10 #define POLKU "map.txt" // Polku ladattavaan karttafiluun int main (void) { bool Kartta[LEVEYS][KORKEUS]; ifstream File (POLKU); if (!File.is_open()) { cout << "Karttaa ei voi ladata!\n"; return 0; } int y = 0; while (!File.eof()) { string Line; getline (File, Line); for (int i=0; i<LEVEYS; i++) { if (Line[i] == '0' || Line[i] == '1') Kartta [i][y] = (Line[i] == '1'); } y++; } File.close(); for (int y=0; y<KORKEUS; y++) { for (int x=0; x<LEVEYS; x++) { if (Kartta[x][y]) cout << '#'; else cout << ' '; } cout << endl; } }
Ruma esimerkkikartta kokoa 20*10:
00000001000000000000 00000111110000000000 01000001100011100000 01001000000111000000 01100111100000000000 00100000100001100000 00110100100000111000 00001000000111111000 01100000100000000000 00100000000000000000
En saa jostain syystä tätä toimimaan pdcursesin kanssa :/ Kiitos kuitenkin koska enköhän saa sen kuitenkin toimimaan!
noi stream jutut pitää ainakin tehdä ei-curses tilassa, muuten ne ei toimi...ja piirtäminen sitten vaikka addch:lla tai vastaavalla curses-tilassa
Voi perskuta kun ei minulla leikkaa että miten tämän saa cursesilla toimimaan... Voikos joku kiltti auttaa?
Vaihdat annetun esimerkin merkkejä tulostaviin cout-kohtiin mvaddch-funktion sopivilla parametreilla, sillä saat piirrettyä sopivan merkin kohtaan (x, y). Silmukan lopussa olevan endl-rivin voit poistaa kokonaan. Lisäksi pitää tietenkin olla normaalit curses-alustukset ja lopetukset yms.
Tiedostoilla ja cursesilla ei ole mitään tekemistä keskenään eivätkä ne häiritse toisiaan, eli jokupoika neuvoi tässä suhteessa väärin.
Jaa no... Saattaa olla ettei toiminut kun tein noin kuin jokupoika neuvoi :) Kokeilen uudestaan!
Edit. Miten muuten C++:lla voi etsiä polun mihin ohjelma on asennettu? Eli samalla tavalla kuin VB:ssä App.Path.
Syntty kirjoitti:
Miten muuten C++:lla voi etsiä polun mihin ohjelma on asennettu? Eli samalla tavalla kuin VB:ssä App.Path.
Ajettavan ohjelman nimeä voi metsästää main-funktion argumentista args[0]
. Se voi sisältää ohjelman nimen ja koko polunkin. Takeita tästä ei ole, sillä ohjelmaahan voidaan ajaa sulautettuna ohjelmistona vaikka ompelukoneessa, jossa ei ole edes tiedostojärjestelmää.
Windowsissa exen nimi polkuineen voi selvitä vaikka seuraavalla funktiolla:
#include <windows.h> #include <string> #include <vector> typedef std::basic_string<TCHAR> tstring; tstring get_module_file_name(HMODULE hmodule = 0) { int const blen = 1000; std::vector<TCHAR> buf(blen); DWORD len; for (;;) { len = GetModuleFileName(hmodule, &buf[0], buf.size()); if (len < buf.size()) break; buf.resize(buf.size() + blen); } if (len == 0) throw GetLastError(); return tstring(&buf[0], len); }
lainaus:
Jaa no... Saattaa olla ettei toiminut kun tein noin kuin jokupoika neuvoi :) Kokeilen uudestaan!
Kyllä pitäis toimia ilman mitään hämminkiä.
En osannut cursesilla kirjottaa tiedostoon niin otin curses tilan pois ja tein normaalisti. Varmaan purkkaratkasu monen mielestä mutta kyllä se toimii
Aihe on jo aika vanha, joten et voi enää vastata siihen.