posta10100 ha scritto:Galaxi93 ha scritto:...quindi li preferirei in inglese...
Infatti quello è in inglese!
scusa, ma sono malato
Volevo dire italiano.
Moderatore:
Paolino
posta10100 ha scritto:Galaxi93 ha scritto:...quindi li preferirei in inglese...
Infatti quello è in inglese!
void cambiaStato(unsigned char x, unsigned char y, unsigned char z, unsigned char stato)
{
unsigned char index = getIndex(y-1, z-1);
unsigned char bitIndex = getBitIndex(x-1, y-1);
unsigned char maschera = getMaschera(bitIndex, stato);
if (stato) // Devo mettere a 1 il bit corrispondente.
{ // Eseguo l'OR logico tra la maschera e il byte dell'array che
map[index] |= maschera; // equivale a map[index] = map[index] | maschera.
}
else // Devo mettere a 0 il bit corrispondente.
{ // Eseguo l'AND logico tra la maschera e il byte dell'array.
map[index] &= maschera; // equivale a map[index] = map[index] & maschera.
}
}Galaxi93 ha scritto:E ora che mi viene in mente, come faccio a rifare i giochini dell'inizio (quelli che accendevano un piano alla volta)???
//Funzione che controlla se il cubo è vuoto o pieno oppure nessuno dei due,
//restituendo i valori 0 = vuoto, 1 = pieno, 2 = non pieno e non vuoto.
char fill_empty()
{
char i, stato; //Dichiaro le variabili.
stato=8; //Stato = 8.
for (i=0;i<8;i++) //incremente di 1, i, finche non diventa 8.
{ //Inizion for.
if (map[i]==255) //Controlla map[] se è uguale a 255 (pieno),
stato++; //e se è vero, incrementa di uno stato.
if (map[i]==0) //Poi controlla se è uguale ad 0 e
--stato; //se è vero, decrementa di 1 da stato.
} //Fine for.
if (stato!=0, stato!=16) //Se stato è diverso da 0 (vuoto) e 16(pieno).
stato=2; //Mette a stato il valore 2(ne pieno ne vuoto).
else //Altrimenti,
{
if (stato==0) //Se stato è uguale a 0(vuoto),
stato=0; //Mette a 0 stato (questo if è inutile).
if (stato==16) //Se stato è uguale a 16(pieno),
stato=1; //Mette stato a 1.
}
return(stato); //Ritorna stato (0=vuoto, 1=pieno, 2=né pieno,
} //né vuoto).
char IsEmpty(char nLimit)
{
char i=0, n=0;
for (i;i<nLimit;i++)
{
if (map[i]) ++n;
}
if (n) return n==nLimit?1:2;
return 0;
}
//Funzione che date le coordinate x, y, z, ne cambia lo stato solo se è diverso
//dallo stato dato alla funzione e se lo cambia, restituisce 1 altrimenti 0.
char cambia_if(char x, char y, char z, char stato)
{
char stato_led =getStato(x,y,z);
char cambiato = 0;
if (stato==0)
{
if (stato_led!=0)
cambiaStato(x,y,z,stato);
cambiato=1;
}
if (stato==1)
{
if (stato_led==0)
cambiastato(x,y,z,stato);
cambiato=1;
}
return(cambiato);
}
//Funzione che accende (stato=1) o spegne (stato=0) tutti i led del cubo
//casualmente.
void fill_empty_led(char stato, char tempo)
{
char gioco=0, i;
for (i = 0; i < 8; i++)
{ map[i] = !stato*255; }
while (gioco!=64)
{
random();
x_led=random_4;
random();
y_led=random_4;
random();
z_led=random_4;
if (cambia_if(x_led,y_led,z_led,stato)==1)
{
gioco++;
check_led(tempo);
}
}
} //Funzione che date le coordinate x, y, z, ne cambia lo stato solo se è diverso
//dallo stato dato alla funzione e se lo cambia, restituisce 1 altrimenti 0.
char cambia_if(char x, char y, char z, char stato)
{
char stato_led =getStato(x,y,z);
char cambiato = 0;
if (stato != statoLed) { // se lo stato è diverso
cambiaStato(x, y, z, stato); //lo cambio
return 1; // e restituisco 1
}
return 0; // altrimenti restituisco 0
}
//Funzione che accende (stato=1) o spegne (stato=0) tutti i led del cubo
//casualmente.
void fill_empty_led(char stato, char tempo)
{
char gioco=0, i;
for (i = 0; i < 8; i++) {
if (stato == 0) {
map[i] = 0;
} else {
map[i] = 255;
}
// map[i] = !stato*255; così non fa quello che vuoi
}
while (gioco<=64)
{
random();
x_led=random_4;
random();
y_led=random_4;
random();
z_led=random_4;
if (cambia_if(x_led,y_led,z_led,stato)) { // non è necessario specificare == 1,
//in C è falso se == 0 e vero in tutti gli altri casi
gioco++;
check_led(tempo);
}
}
}

Torna a Realizzazioni, interfacciamento e nozioni generali.
Visitano il forum: Nessuno e 10 ospiti