|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
[ANSI C] cerco istruzioni!
ciao ragazzi...
sto cercando istruzioni o funzioni che siano l'equivalente di queste istruzioni in pascal: gotoxy() textcolor() backgroundcolor() a:=readkey; keypressed spero mi possiate aiutare ^^ uso dev-cpp e vorrei non dover utilizzare librerie non standard.. grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
in ANSI C non ci sono, dovresti appunto usare librerie non standard. l'unica per la quale puoi trovare una cosa analoga é la readkey: non so se la readkey mostri l'echo e attenda Invio, ma in C c'é la getchar (che fa entrambe le cose).
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
quindi in ansi c non potrei nemmeno scrivere al centro dello schermo??
speravo di finire il tetris text based che avevo iniziato in pascal anni fa... |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
nah ho smesso con certe cose... volevo considerarlo come un esercizio in vista dell'esame di informatica a
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
una cosa che potresti tuttavia fare é quella di assumere che la console sia grande 80x25 caratteri (cioé che abbia 25 linee di testo e che ogni linea possa contenere 80 caratteri) che sono le dimensioni classiche, e stampare molto velocemente intere schermate da 80x25; per evitare il flickering devi lavorare sul buffering dello standard output (prova a consultare la documentazione di setvbuf, non mi ricordo se é quella che possa fare al caso tuo). in tal modo nell'esempio del file di testo la tua partita di tetris verrebbe stampata come una marea di schermate in successione (sarebbe un file enorme ).tutto sommato a me non sembra schifosissimissimo come approccio, se vuoi assolutamente realizzare un tetris senza GUI e senza grafica accelerata ma solamente in ASCII mi sembra la soluzione migliore; il fatto che possa sembrare schifosa dipende dal fatto che i videogames non si fanno in ANSI C |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
Quote:
per quello che ho capito (sono abbastanza ignorante in materia) quello che potrei fare è riempire prima un buffer di 80x25 e poi stamparlo tutto insieme sullo schermo giusto?? |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
peró prima di iniziare a stampare le schermate ti conviene impostare adeguatamente il buffering: devi fare in modo che stdout bufferizzi 80*25 bytes prima di fare il flush, cosi quando avviene il flush viene inviata un'intera schermata alla console. per stampare una schermata stampa con printf una stringa di 80*25 caratteri; se la tua schermata contiene spazi vuoti non commettere l'errore di stampare linee con meno di 80 caratteri concludendole con un newline: cosi non riempiresti tutto il buffer e sfaseresti i flush automatici, quindi usa gli spazi per riempire le celle vuote della schermata. i newline non stamparli proprio: se assumi che la console sia grossa esattamente 80x25 le linee vanno a capo da sole. ho ricontrollato il reference della funzione setvbuf, mi pare proprio quella che fa al caso tuo. la dovresti chiamare cosi: Codice:
setvbuf(stdout, NULL, _IOFBF, 80 * 25); fflush(stdout); maggiori dettagli sulla setvbuf: http://www.linuxmanpages.com/man3/setvbuf.3.php le altre funzioni che vedi descritte sono implementate al di sopra della setvbuf, che é quella principale; non usare le altre perché tra quelle che ti sono utili la setvbuf é l'unica conformante allo standard ANSI C. |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
altra cosa: evita di stampare caratteri ASCII del set esteso, quindi stampa solo caratteri con codice compreso tra 0 e 127 inclusi. il motivo é che la console di Windows non é propriamente ASCII ma ANSI, che significa che i codici ASCII del set esteso sono mappati su caratteri diversi a seconda della codepage impostata.
altra cosa ancora non stampare cosi: Codice:
printf("... schermata ...");
Codice:
printf("%s", "... schermata ...");
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:41.












).







