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!
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.
Tuon devin grafiikan kanssa suosittelisin käyttämään SDL:ää.
http://www.libsdl.org
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.
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.
1) Tekstin kirjoituskohdan voit valita funktiolla gotoxy(x,y);. Löytyy muistaakseni conio.h-kirjastosta (en muista tarkkaan, enpä ole konsoliohjelmia juurikaan viimeaikoina tehnyt...)
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...
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 :)"); ... ...
Kursorin liikuttamista ja värin vaihtamista konsoliohjelmissa tunnutaan kysyvän nykyisin todella usein. Ehdoittaisin kummankin asian lisäämistä FAQiin.
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!
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?
->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.
Muistaakseni Dev-C++ ei oletuksena osaa ottaa coniota mukaan linkkausvaiheessa, joten lisää conion objektifilu kohtaan "additional object/library files" tms.
fawkz: Kyllä minulla vaan ovat conion funktiot toimineet edellä mainitsemallani tavalla ilman mitään lisälinkityksiä.
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" :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.