PDA

Visualizza la versione completa : [C++] Costruzione di un semaforo


Chunky2
13-02-2012, 10:17
Salve a tutti. :ciauz: Avrei un problema.
Premetto che sono all'inizio con la programmazione... In poche parole sto provando a progettare un semaforo con Dev-C++.
Con l'aiuto dei cicli, del gotoxy e con l'uso degli asterischi ho realizzato la struttura del semaforo. Ecco uno screenshot,

http://prntscr.com/63i52

Per il rosso, il verde e il giallo non ho riscontrato alcun problema, i problemi sorgono quando devo fare il giallo lampeggiante... Avete suggerimenti? Eccovi il codice:
(infondo al codice trovare il download per il conio.c, un include<> che ho "rubato" :D da scuola che serve per attivare il gotoxy(); e il textcolor(); )


#include <iostream>
#include <conio.c>
using namespace std;
int main (){
//Dichiarazione
int i,scelta;
//Struttura Semaforo
gotoxy(55,1);
cout<<"*****************";
cout<<endl;
gotoxy(55,8);
cout<<"*****************";
cout<<endl;
gotoxy(55,16);
cout<<"*****************";
cout<<endl;
gotoxy(55,23);
cout<<"*****************";
cout<<endl;
for (i=1;i<23;i++) {
gotoxy(55,i);
cout<<"*";}
for (i=1;i<24;i++) {
gotoxy(72,i);
cout<<"*";}

//Titolo
gotoxy(0,0);
textcolor(15);
cout<<"Il semaforo"<<endl;
cout<<endl;
//Colore Semaforo
do {
textcolor(8);
cout<<"1. Rosso\n";
cout<<"2. Giallo\n";
cout<<"3. Verde\n";
cout<<"4. Guasto (Giallo Intermittente)\n";
cout<<"0. Chiudi il semaforo!\n";
cout<<endl;
cout<<"Scegli colore semaforo."<<endl;
cin>>scelta;
cout<<endl;
switch (scelta) {
case 1://Rosso
for (i=2;i<8;i++) {
textcolor(68);
gotoxy(56,i);
cout<<"****************"<<endl;
}
break;

case 2://Giallo
for (i=9;i<16;i++) {
textcolor(102);
gotoxy(56,i);
cout<<"****************"<<endl;
}
break;

case 3://Verde
for (i=17;i<23;i++) {
textcolor(34);
gotoxy(56,i);
cout<<"****************"<<endl;
}
break;

case 4://Guasto
do {

textcolor(102);
gotoxy(56,9);
cout<<"****************"<<endl;
gotoxy(56,10);
cout<<"****************"<<endl;
gotoxy(56,11);
cout<<"****************"<<endl;
gotoxy(56,12);
cout<<"****************"<<endl;
gotoxy(56,13);
cout<<"****************"<<endl;
gotoxy(56,14);
cout<<"****************"<<endl;
gotoxy(56,15);
cout<<"****************"<<endl;

}
while (i!=0);

break;



default:
cout<<"La scelta del colore semaforo e' errata.\n";
cout<<endl;
break;

}
}
while (scelta!=0);
return 0;

cout<<endl;
system("pause");
}



http://www.mediafire.com/?4614sqd4b36qayb

oregon
13-02-2012, 10:29
Originariamente inviato da Chunky2
i problemi sorgono quando devo fare il giallo lampeggiante... Avete suggerimenti?

Quali problemi?

Devi visualizzare il colore, attendere un po' di tempo, cancellare il colore, attendere un po' di tempo e di nuovo in un ciclo ... Devi permettere di uscire dal ciclo in base alla pressione di un tasto.


conio.c

Non un file include ma il codice che implementa le due funzioni gotoxy e textcolor con le API di Windows. Non dovrebbe essere "incluso" in quel modo ma compilato in un progetto insieme al tuo file.c.

Chunky2
13-02-2012, 14:41
:D
Ti dispiacerebbe dirmi la codifica in C++? Soltanto del case 4, grazie.

oregon
13-02-2012, 14:59
No ... niente codifica ... non ho tanto tempo, ma se ci provi tu possiamo vedere gli errori ...

Chunky2
13-02-2012, 19:27
Il problema che non saprei appunto come cancellare il colore... Se faccio clrscr(); cancella tutto e non solo il colore, c' un comando specifico?

oregon
13-02-2012, 19:36
Se usi il colore dello sfondo e visualizzi degli spazi?

Chunky2
13-02-2012, 21:31
Sei un genio :mem:

Ecco qui, funziona alla perfezione, ti ringrazio :ciauz:

case 4://Guasto
do {
for(i=0;i<99999999;i++);{
textcolor(102);
for(i=9;i<16;i++){
gotoxy(56,i);
cout<<"****************"<<endl;}}
for(i=0;i<99999999;i++);{
textcolor(0);
for(i=9;i<16;i++){
gotoxy(56,i);
cout<<"****************"<<endl;}}
}
while (i!=0);

break;

oregon
13-02-2012, 21:34
Originariamente inviato da Chunky2
Ecco qui, funziona alla perfezione, ti ringrazio :ciauz:

Di nulla ... era un tipo di codice che si usava quando avevo la tua giovane et, con il Commodore VIC20 ... :ciauz:

Chunky2
13-02-2012, 21:36
Anche se ci sarebbe un dubbio che vaga nella mia testa... :D Quando io premo 1, e subito dopo 2, rimane acceso sia il rosso e sia il giallo... Come posso alla fine di ogni case riportare il programma alla fase iniziale? Ringrazio anticipatamente

oregon
13-02-2012, 22:07
Prepara una funzione con il codice usato per preparare il semaforo e chiamala quando ti serve.

Loading