Eli miten saisin aseteltua jonkin merkin, vaikka O-kirjaimen, ihan mihin tahansa kohtaan näyttöä?
Muistaakseni kyseinen juttu hoitui QBssä Locate:lla, mutta miten C++:ssa?
Tätä on kysytty aika monta kertaa. :)
Mut ei se mitään. Olettaen että haluat konsoliin kirjoitella mihin kohtaan haluat. Tuohon tarvitsee erillistä kirjastoa. Esimerkiksi Pdcurses on hyvä. Se on jonkimoinen ncursesin porttaus windowsille. Sitten se kohta minne haluat vaikka yhden merkin piirtää, onnistuisi näin (kaikkien kirjaston alustuksien yms yms. jälkeen:
// Merkki @ kohtaan x = 10, y = 5. mvaddch(5,10,'@');
http://pdcurses.sourceforge.net/
Pdcursesista löytyy myös DevPak, jos satut omistamaan Dev-C++:n. Löytyy http://devpaks.org osoitteesta. En tosin nyt jostain syystä päässyt sinne surffailemaan. Ja jos haluat oppaita tämän käyttöön, niin kannattaa googlata termeillä "ncurses tutorial" tai muulla vastaavalla. Minusta on hyvin mielekästä käyttää kyseistä kirjastoa. Projektini käyttääkin tuota Pdcursesia Windowsissa ja Ncursesia sitten Linuxissa.
Toki homma onnistuu muutenkin, jos käytät DOS-kääntäjää. Silloin voit tunkea merkkisi juuri minne haluat. Windows-ympäristössä homma menee kuten Aruviel sanoi, eli apukirjastoilla.
Höh, mä en saanu tota Pdcusesia toimimaan.
No jos sinulla on Dev-C++ (ja kääntäjän olevan se default MingW), niin imuroi DevPak täältä:
http://devpaks.org/show.php?devpak=7
Asenna se. Tämän jälkeen pystyt kääntämään ohjelmia esim. komentoriviltä näin: 'g++ source.cpp -o program.exe -lcurses'. Eli linkerille pitää antaa -lcurses. Kääntäjä löytyy Dev-C++:n juurihakemistososta löytyvästä bin/ hakemistosta. Sinun täytyy myös sisällyttää Pdcurses projektiisi näin:
#include <curses.h>
Lisäksi, jos käytät STL:n stringejä ja sen metodeja erase tai clear, joudut määrittelemään saman nimiset makrot pois:
#undef erase #undef clear
Jos olisit kertonut vähän tarkemmin, mikä meni pieleen, niin olisin voinut mahdollisesti tarjota tarkempaa apua kuin nyt...
Aruviel kirjoitti:
Esimerkiksi Pdcurses on hyvä. Se on jonkimoinen ncursesin porttaus windowsille.
Kyseessä lienee kuitenkin Curses-klooni.
Conio.h:sta löytyy gotoxy(int x, int y), jolla homma myös hoituu.
Jos sulla on dev-c++, niin includaa conio.h ja lisää projektiin conio.c(kansiossa include)
Juice kirjoitti:
Conio.h:sta löytyy gotoxy(int x, int y), jolla homma myös hoituu.
Jos sulla on dev-c++, niin includaa conio.h ja lisää projektiin conio.c(kansiossa include)
EI kai mitäää conio.c:tä tarvi includettaa?? En mä ainakaa o koskaa laittanu ja hyvin o toiminu...
Sitä ei tarvitse sisällyttää, jos se on jo oletuksena mukana :)
Siis miten toi gotoxy toimii? Mihin määritetään merkki mitä pitäisi liikuttaa? (En vaan osaa...)
Voisin kuvitella, että tuo funktio liikuttaa vain kursoria ja saat sitten muilla keinoin printata sen itse merkin.
Blaze kirjoitti:
Voisin kuvitella, että tuo funktio liikuttaa vain kursoria ja saat sitten muilla keinoin printata sen itse merkin.
Ei tartte kuvitella, vaan näin on. Tein tosi karseen lumisateen, jossa en metodeista piitannut, vaan lopputuloksesta :)
En nääs halunnut kliinistä Naapurin Teppo-lumisadetta, vaan oikeen myrskyn :P. Samalla havainnollistan gotoxy():tä.
#include <conio.h> #include <stdio.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { for(;;){ gotoxy(rand()%100, rand()%25); printf("*"); if(rand()>10000){clrscr();} } }
EDIT: Oho, koodiin jäi turhia includeja o_O
Juice kirjoitti:
Blaze kirjoitti:
Voisin kuvitella, että tuo funktio liikuttaa vain kursoria ja saat sitten muilla keinoin printata sen itse merkin.
Ei tartte kuvitella, vaan näin on. Tein tosi karseen lumisateen, jossa en metodeista piitannut, vaan lopputuloksesta :)
En nääs halunnut kliinistä Naapurin Teppo-lumisadetta, vaan oikeen myrskyn :P. Samalla havainnollistan gotoxy():tä.#include <conio.h> #include <stdio.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { for(;;){ gotoxy(rand()%100, rand()%25); printf("*"); if(rand()>10000){clrscr();} } }EDIT: Oho, koodiin jäi turhia includeja o_O
Mitäsmitäs. includetat iostreamin ja käytät printf:ää. Ja eikös tuo rand() pitäisi alustaa tj. srandilla.
Juice kirjoitti:
Ei tartte kuvitella, vaan näin on.
Jooh, piti vaan laittaa jotain vastuun pakoilemiseks siltä varalta, että se ei oliskaan ollu noin ;)
Kiitti :) Nyt jopa tällänen halko ku mä tajus ton jutun :)
Linkku kirjoitti:
Mitäsmitäs. includetat iostreamin ja käytät printf:ää. Ja eikös tuo rand() pitäisi alustaa tj. srandilla.
En mitenkään optimoinut koodia, ja koska iostream oli valmiina ja se toimi, niin annoin olla.
randia ei tarvitse siementää, jollei halua :)
Älkää ottako minusta mallia :D
Höh, mulla toi gotoxy ei toimi :( Toimiks toi teillä muilla?
Kääntäjä?
Jos Dev-C++, niin silloin lisää projektiin conio.c ja includaa conio.h (#include <conio.h>)
Aihe on jo aika vanha, joten et voi enää vastata siihen.