Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Aloittelijan kysymyksiä

Sivun loppuun

Puhveli [06.07.2004 19:28:04]

#

Innostuin siirtymään seehen kun näin kaverin tehneen sulavasti liukuvan tasohyppelyn. Se pyöri niin nopeasti, että qbasic -ohjelmat jäivät kauas taakse, siis auttakaa! Ihan totta, se on hyvä syy vastata näihin kysymyksiin :)

Teen ensimmäisehköä DOS -ohjelmaa joka mielellään saisi toimia sekä konsolissa että "oikeassa" Dosissa. Jos vastaukset löytyisivät "standardikirjastoista" niin olisin iloinen, ettei tarvitse netistä latailla kirjastoja (allegroa yritin mutta en saanut DevC++4:ssä toimimaan).

1) Miten siis liikutetaan kursoria (siis sitä vilkkuvaa hommaa, ei hiirtä) antamalla parametreinä esim rivin (y) ja merkin (x) sillä tavalla että seuraava näytölle (coutilla) printattu teksti ilmestyisi kursorin kohdalle? Ja miten kursorin saa näkyville ja piiloon?
2) Miten vaihdetaan tekstin väriä ja taustan väriä?
3) Tarvitsen vielä jonkinlaisen QBasicin INKEY$tä vastaavan näppiksenlukufunktion. Mistä kirjastosta sellainen löytyisi ja miten käytetään?

edit: Niin kieli tosiaan on C++. Kiitos jo etukäteen avusta!

Aruviel [06.07.2004 20:20:02]

#

2) Tekstin ja taustavärin vaihtaminen aivan kylmiltään ei ole kovin helppo homma. En tiedä tarkemmin (Eiköhän siinä pidä päästä oikeaan näyttötilaan ja kaikkea muuta...), mutta se ei ole ollenkaan niin helppoa kuin QBasicissa. Allegrollahan se nyt onnistuisi helpohkosti.

3) Syötettä voi ainakin lukea cin-oliolla, jolloin syötteen luku lopetetaan enterin painallukseen. Eri tilanteisiin sitten on näitä cinin metodeja (getlineä ja getiä sun muuta sellaista)

// Luetaan kokonaisluku
int numeric = 0;
cin >> numeric;

Toivottavasti oli jotain apua, vaikka en osannut noihin toisiin kysymyksiin vastata.

peki [06.07.2004 20:20:33]

#

Tuon devin grafiikan kanssa suosittelisin käyttämään SDL:ää.
http://www.libsdl.org

Antti Laaksonen [06.07.2004 20:56:05]

#

1-2) Jos haluat tehdä DOSissa toimivan ohjelman, käytä tarkoitukseen jotain oikeaa DOS-kääntäjää. Esim. Borlandin vanha C-kääntäjä taitaa olla saatavilla ilmaiseksi. Siinä on mukana kirjasto conio.h, jossa on tarvittavat funktiot mm. värin valintaan, kirjoituskohdan muuttamiseen ja näytön tyhjennykseen. Näin tehty ohjelma toimii oikein myös Windowsin komentoikkunassa.

Metabolix [06.07.2004 21:05:50]

#

Tässä on erään ilmaisen, GNU-lisenssin alaisen kääntäjän sivusto: http://gcc.gnu.org/
Pakettiin kuuluu muutaman muunkin kielen kääntäjät. Kääntäjän saa (varmaankin GNU-lisenssin ansiosta) lähes mille tahansa alustalle, mm. DOSiin. Tätä kääntäjää käytetään Datatähti-kilpailun C-kääntäjänä, joten ei se kovin huono voi olla.

Heikki [06.07.2004 23:01:45]

#

1) Tekstin kirjoituskohdan voit valita funktiolla gotoxy(x,y);. Löytyy muistaakseni conio.h-kirjastosta (en muista tarkkaan, enpä ole konsoliohjelmia juurikaan viimeaikoina tehnyt...)

ttuoppi [07.07.2004 09:37:14]

#

2) värin PITÄISI vaihtua näin:

 COLOR (Tekstinväri, taustanväri)
 CPRINTF "Tämä on värillistä tekstiä";

Mutta minulla se ei ainakaan vaihtunut, lie johtui Dev-C++:sasta joka on aivan v**** syvältä!!!

EDIT: Hups, jäi qBasic päälle kun tuli noi koodit kirjotettua isolla...

sqwiik [07.07.2004 11:02:07]

#

Muistaakseni tekstin värin saa vaihdettua komennolla textcolor(väri) (conio.h), samoin kuin tekstin taustavärinkin textbackground(väri) (en ole varma funkkarin nimestä).

Näppäimistön lukuun voi käyttää siis cin-oliota, tai kahden conio.h:n funktion (kbhit() ja getch())yhteistoimintaa.

int key;
...
...
if(kbhit())key=getch(); else key = -1;
if(key=='a')printf("a painettu :)");
...
...

firebug [07.07.2004 11:16:05]

#

Kursorin liikuttamista ja värin vaihtamista konsoliohjelmissa tunnutaan kysyvän nykyisin todella usein. Ehdoittaisin kummankin asian lisäämistä FAQiin.

Puhveli [07.07.2004 11:41:03]

#

sqwiik kirjoitti:

Muistaakseni tekstin värin saa vaihdettua komennolla textcolor(väri) (conio.h), samoin kuin tekstin taustavärinkin textbackground(väri).

netistä löysin tuon saman, funkkari oli juuri textcolor ja textbackground coniossa, mutta DevC ei suostunut kääntämään sitä, undefined reference :p.
edit: Tuota kbhittiäkään se ei osaa kääntää, niinkuin sitä ei coniossa olisikaan. pitää vaihtaa kääntäjää :)
kiitokset kaikille!

Aruviel [07.07.2004 12:47:28]

#

Tämä on varmaan vähän tyhmä kysymys, mutta: Onko Linuxille olemassa jotain vastaavaa kbhitin muodossa? Olen tuollaista pitkään jo mietiskellyt ja kaavaillut jo Assemblynkin (olettaisin tuolla onnistuvan) opettelua saadakseni tuollaisen käyttööni. Minulla on aika suuri tarve tuollaiselle näppäimistön lukemiselle.

Joo joo, lähden lukemaan sitä manuaalia ja googlaamaan juuri nyt.

Edit: En tarvinnut edes Googlea, olettaisin ratkaisun löytyvän ncurses-kirjastosta?

tn [07.07.2004 23:39:27]

#

->Puhveli: Laita alkuun rivi

#include <conio.c>

, niin pitäisi toimia. Myös tästä conio-kirjaston toimivuudesta Dev-C++ :n kanssa olisi syytä lisätä kohta C/C++ -FAQ-osioon.

thefox [08.07.2004 03:11:09]

#

Muistaakseni Dev-C++ ei oletuksena osaa ottaa coniota mukaan linkkausvaiheessa, joten lisää conion objektifilu kohtaan "additional object/library files" tms.

tn [08.07.2004 13:12:52]

#

fawkz: Kyllä minulla vaan ovat conion funktiot toimineet edellä mainitsemallani tavalla ilman mitään lisälinkityksiä.

thefox [09.07.2004 14:20:13]

#

Ai juu, niin varmasti toimivatkin (en tuota viestiä kirjoittaessani huomannut että inkludetit conio.c:n) mutta onhan se epäkorrektia sisällyttää .c-filu :) Joudutaan joka kerta "turhaan" kääntämään tuo filu ja saat tuossa omaan filuusi kaikenlaisia inkludeja (mm. windows.h ...) myöskin "turhaan" :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta