Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Merkin asettelu

Sivun loppuun

Jyri [01.12.2004 16:37:23]

#

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?

Aruviel [01.12.2004 16:44:43]

#

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.

Metabolix [01.12.2004 17:37:37]

#

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.

Jyri [05.12.2004 10:19:57]

#

Höh, mä en saanu tota Pdcusesia toimimaan.

Aruviel [05.12.2004 10:30:19]

#

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...

arcatan [05.12.2004 11:12:13]

#

Aruviel kirjoitti:

Esimerkiksi Pdcurses on hyvä. Se on jonkimoinen ncursesin porttaus windowsille.

Kyseessä lienee kuitenkin Curses-klooni.

Juice [05.12.2004 18:48:38]

#

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)

Meitsi [05.12.2004 19:56:06]

#

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...

sqwiik [05.12.2004 20:03:07]

#

Sitä ei tarvitse sisällyttää, jos se on jo oletuksena mukana :)

Jyri [06.12.2004 21:34:19]

#

Siis miten toi gotoxy toimii? Mihin määritetään merkki mitä pitäisi liikuttaa? (En vaan osaa...)

Blaze [06.12.2004 21:40:40]

#

Voisin kuvitella, että tuo funktio liikuttaa vain kursoria ja saat sitten muilla keinoin printata sen itse merkin.

Juice [07.12.2004 18:46:32]

#

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

Linkku [07.12.2004 20:22:37]

#

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.

Blaze [07.12.2004 22:52:04]

#

Juice kirjoitti:

Ei tartte kuvitella, vaan näin on.

Jooh, piti vaan laittaa jotain vastuun pakoilemiseks siltä varalta, että se ei oliskaan ollu noin ;)

Jyri [08.12.2004 12:28:03]

#

Kiitti :) Nyt jopa tällänen halko ku mä tajus ton jutun :)

Juice [08.12.2004 19:47:42]

#

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

ZirpZ [09.12.2004 13:54:30]

#

Höh, mulla toi gotoxy ei toimi :( Toimiks toi teillä muilla?

Juice [09.12.2004 19:00:11]

#

Kääntäjä?
Jos Dev-C++, niin silloin lisää projektiin conio.c ja includaa conio.h (#include <conio.h>)


Sivun alkuun

Vastaus

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

Tietoa sivustosta