Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-10-2009, 17:08   #1
nikel
Senior Member
 
L'Avatar di nikel
 
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
nikel è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2009, 22:05   #2
fero86
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).
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2009, 15:01   #3
nikel
Senior Member
 
L'Avatar di nikel
 
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...
nikel è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2009, 15:19   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da nikel Guarda i messaggi
speravo di finire il tetris text based che avevo iniziato in pascal anni fa...
Finirlo in Pascal?
__________________

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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2009, 17:22   #5
nikel
Senior Member
 
L'Avatar di nikel
 
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
nikel è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2009, 22:25   #6
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da nikel Guarda i messaggi
quindi in ansi c non potrei nemmeno scrivere al centro dello schermo??
in ANSI C non esiste il concetto della console, esiste il concetto degli standard streams: lo standard input, lo standard output e lo standard error; parliamo dello standard output. in quanto stream di output l'unica cosa che puoi fare con lo standard output é buttarci dentro tutti i caratteri che ti pare, poi a seconda del mezzo su cui é mappato l'stdout otterrai determinati effetti collaterali: se gli standard streams sono rediretti sulla console vedrai i caratteri stampati in ordine sulla console, se sono rediretti su un file otterrai un file di testo, e cosi via. l'esempio del file di testo dovrebbe farti capire l'errore concettuale nel voler scrivere in posizioni arbitrarie della console e modificare quello che hai scritto in precedenza: come si dovrebbe vedere una partita del tuo tetris se il tuo programma venisse avviato con stdout rediretto su file? il problema é che tu vuoi gestire un cursore sullo schermo, ma non c'é nessun cursore: lo stream é un pozzo senza fondo, ci puoi solo scrivere, non ha cursore.

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 peró resta comunque un ottimo esercizio didattico.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2009, 17:52   #7
nikel
Senior Member
 
L'Avatar di nikel
 
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
Quote:
Originariamente inviato da fero86 Guarda i messaggi
in ANSI C non esiste il concetto della console, esiste il concetto degli standard streams: lo standard input, lo standard output e lo standard error; parliamo dello standard output. in quanto stream di output l'unica cosa che puoi fare con lo standard output é buttarci dentro tutti i caratteri che ti pare, poi a seconda del mezzo su cui é mappato l'stdout otterrai determinati effetti collaterali: se gli standard streams sono rediretti sulla console vedrai i caratteri stampati in ordine sulla console, se sono rediretti su un file otterrai un file di testo, e cosi via. l'esempio del file di testo dovrebbe farti capire l'errore concettuale nel voler scrivere in posizioni arbitrarie della console e modificare quello che hai scritto in precedenza: come si dovrebbe vedere una partita del tuo tetris se il tuo programma venisse avviato con stdout rediretto su file? il problema é che tu vuoi gestire un cursore sullo schermo, ma non c'é nessun cursore: lo stream é un pozzo senza fondo, ci puoi solo scrivere, non ha cursore.

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 peró resta comunque un ottimo esercizio didattico.
estremamente interessate! grazie ^.^

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??
nikel è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2009, 13:42   #8
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da nikel Guarda i messaggi
estremamente interessate! grazie ^.^

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??
si, esattamente.

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);
fflush serve a svuotare il buffer prima di stampare la prima schermata. queste due istruzioni vanno eseguite immediatamente prima di stampare la prima schermata di gioco ma non prima, altrimenti cominceresti ad usare le modalitá di buffering di gioco per stampare altre cose (menu?) e il risultato sarebbe che non vedresti nulla finché non stampi 80*25 caratteri, newline inclusi.

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.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2009, 13:55   #9
fero86
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 ...");
stampa cosi:
Codice:
printf("%s", "... schermata ...");
giusto per evitare che la printf becchi qualche falso format code se per qualche motivo durante lo sviluppo ti capita di stampare dei % nelle schermate
fero86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
NVIDIA RTX PRO 4500 Server Edition: la s...
Core Ultra 200 HX Plus: Intel mette il t...
Starfield arriva su PS5: data ufficiale,...
iPad Air 13" (M4) scende di prezzo: -100...
Oracle annuncia Java 26 con il Java Veri...
OPPO Find N6 è ufficiale: sottile...
Influencer sotto controllo Agcom: arriva...
Scontro in OpenAI sul ChatGPT per adulti...
Apple Watch Series 11 a 349€ e altri int...
Starlink rinnova i piani residenziali in...
POCO X8 Pro e Pro Max ufficiali: potenza...
Jensen Huang propone i token come nuovo ...
Realme 16 Pro e 16 Pro+ tra i più...
Dall'enciclopedia all'algoritmo: Encyclo...
Il CEO di Epic Games Tim Sweeney ha comp...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:08.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v