Projekt: Senso (4 Farben-Spiel)

vor 38 weeks 4 days von SolidNoob

Hallo Leute!

Ich möchte gerne das Spiel Senso mit dem Arduino umsetzen.

Dabei wäre ich über ein paar Tipps sehr dankbar.

Mein Anfang (Ich hoffe ihr könnt bei der Optimierung helfen):

Verwendet: -Arduino Duemilanove, rote LED, blaue LED, gelbe LED, grüne LED, 1,5 kOhm Resistor, 4 "Pushbuttons" zur Bedienung, 1 Taster (Optional) zum Start,etc.

Quote:

//Mein kleines Senso-Game(4 Farben-Spiel)

int T1=2;
int T2=3;
int T3=4;
int T4=5;
int Wahl=6;
int LED_1=7;
int LED_2=8;
int LED_3=9;
int LED_4=10;

long randNumber;
int count=0;
int max_count=2;
int GStatus[255];
int Merker=0;
int weiter=0;
int stage=1;
boolean block=false;
boolean Start=false;

int Status_Rot=0;
int Status_Blau=0;
int Status_Gruen=0;
int Status_Gelb=0;

void setup()
{
   Serial.begin(9600);
  
   randomSeed(analogRead(0));
   
   pinMode(T1,INPUT);
   digitalWrite(T1,HIGH);
   
   pinMode(T2,INPUT);
   digitalWrite(T2,HIGH);
   
   pinMode(T3,INPUT);
   digitalWrite(T3,HIGH);
   
   pinMode(T4,INPUT);
   digitalWrite(T4,HIGH);
   
   pinMode(Wahl,INPUT);
   digitalWrite(Wahl,HIGH);
  
   pinMode(LED_1,OUTPUT);
   pinMode(LED_2,OUTPUT);
   pinMode(LED_3,OUTPUT);
   pinMode(LED_4,OUTPUT);
}

void loop()
{
if(!digitalRead(Wahl))
    {
      delay(50);
      if(!digitalRead(Wahl))
      {
          Start=true;
        do{
        }while(!digitalRead(Wahl));
      }
    }
 
if(Start==true)
{
Go(); 
  
while(count>max_count)
{
  
if(!digitalRead(T1))
    {
      delay(50);
      if(!digitalRead(T1))
      {
          if(GStatus[0]==1 && weiter==0)
          {
            Blink(LED_1,1000);
            weiter=1;
          }
          else if(GStatus[1]==1 && weiter==1)
          {
            Blink(LED_1,1000);
            weiter=2;
          }
          else if(GStatus[2]==1 && weiter==2)
          {
            Blink(LED_1,1000);
            weiter=3;
          }
          else if(GStatus[3]==1 && weiter==3)
          {
            Blink(LED_1,1000);
            weiter=4;
          }
          else if(GStatus[4]==1 && weiter==4)
          {
            Blink(LED_1,1000);
            weiter=5;
          }
          else if(GStatus[5]==1 && weiter==5)
          {
            Blink(LED_1,1000);
            weiter=6;
          }
          else if(GStatus[6]==1 && weiter==6)
          {
            Blink(LED_1,1000);
            weiter=7;
          }
          else if(GStatus[7]==1 && weiter==7)
          {
            Blink(LED_1,1000);
            weiter=8;
          }
          else if(GStatus[8]==1 && weiter==8)
          {
            Blink(LED_1,1000);
            weiter=9;
          }
          else if(GStatus[9]==1 && weiter==9)
          {
            Blink(LED_1,1000);
            weiter=10;
          }
          else
          {
            Falsch();
          }
          
        do{
        }while(!digitalRead(T1));
      }
    }
    
if(!digitalRead(T2))
    {
      delay(50);
      if(!digitalRead(T2))
      {
          if(GStatus[0]==2 && weiter==0)
          {
            Blink(LED_2,1000);
            weiter=1;
          }
          else if(GStatus[1]==2 && weiter==1)
          {
            Blink(LED_2,1000);
            weiter=2;
          }
          else if(GStatus[2]==2 && weiter==2)
          {
            Blink(LED_2,1000);
            weiter=3;
          }
          else if(GStatus[3]==2 && weiter==3)
          {
            Blink(LED_2,1000);
            weiter=4;
          }
          else if(GStatus[4]==2 && weiter==4)
          {
            Blink(LED_2,1000);
            weiter=5;
          }
          else if(GStatus[5]==2 && weiter==5)
          {
            Blink(LED_2,1000);
            weiter=6;
          }
          else if(GStatus[6]==2 && weiter==6)
          {
            Blink(LED_2,1000);
            weiter=7;
          }
          else if(GStatus[7]==2 && weiter==7)
          {
            Blink(LED_2,1000);
            weiter=8;
          }
          else if(GStatus[8]==2 && weiter==8)
          {
            Blink(LED_2,1000);
            weiter=9;
          }
          else if(GStatus[9]==2 && weiter==9)
          {
            Blink(LED_2,1000);
            weiter=10;
          }
          else
          {
            Falsch();
          }
          
        do{
        }while(!digitalRead(T2));
      }
    }
    
if(!digitalRead(T3))
    {
      delay(50);
      if(!digitalRead(T3))
      {
          if(GStatus[0]==3 && weiter==0)
          {
            Blink(LED_3,1000);
            weiter=1;
          }
          else if(GStatus[1]==3 && weiter==1)
          {
            Blink(LED_3,1000);
            weiter=3;
          }
          else if(GStatus[2]==3 && weiter==2)
          {
            Blink(LED_3,1000);
            weiter=3;
          }
          else if(GStatus[3]==3 && weiter==3)
          {
            Blink(LED_3,1000);
            weiter=4;
          }
          else if(GStatus[4]==3 && weiter==4)
          {
            Blink(LED_3,1000);
            weiter=5;
          }
          else if(GStatus[5]==3 && weiter==5)
          {
            Blink(LED_3,1000);
            weiter=6;
          }
          else if(GStatus[6]==3 && weiter==6)
          {
            Blink(LED_3,1000);
            weiter=7;
          }
          else if(GStatus[7]==3 && weiter==7)
          {
            Blink(LED_3,1000);
            weiter=8;
          }
          else if(GStatus[8]==3 && weiter==8)
          {
            Blink(LED_3,1000);
            weiter=9;
          }
          else if(GStatus[9]==3 && weiter==9)
          {
            Blink(LED_3,1000);
            weiter=10;
          }
          else
          {
            Falsch();
          }
          
        do{
        }while(!digitalRead(T3));
      }
    }
    
if(!digitalRead(T4))
    {
      delay(50);
      if(!digitalRead(T4))
      {
          if(GStatus[0]==4 && weiter==0)
          {
            Blink(LED_4,1000);
            weiter=1;
          }
          else if(GStatus[1]==4 && weiter==1)
          {
            Blink(LED_4,1000);
            weiter=2;
          }
          else if(GStatus[2]==4 && weiter==2)
          {
            Blink(LED_4,1000);
            weiter=3;
          }
          else if(GStatus[3]==4 && weiter==3)
          {
            Blink(LED_4,1000);
            weiter=4;
          }
          else if(GStatus[4]==4 && weiter==4)
          {
            Blink(LED_4,1000);
            weiter=5;
          }
          else if(GStatus[5]==4 && weiter==5)
          {
            Blink(LED_4,1000);
            weiter=6;
          }
          else if(GStatus[6]==4 && weiter==6)
          {
            Blink(LED_4,1000);
            weiter=7;
          }
          else if(GStatus[7]==4 && weiter==7)
          {
            Blink(LED_4,1000);
            weiter=8;
          }
          else if(GStatus[8]==4 && weiter==8)
          {
            Blink(LED_4,1000);
            weiter=9;
          }
          else if(GStatus[9]==4 && weiter==9)
          {
            Blink(LED_4,1000);
            weiter=10;
          }
          else
          {
            Falsch();
          }
          
        do{
        }while(!digitalRead(T4));
      }
    }
    if(weiter==(max_count+1))
    {
      max_count++;
      count=0;
      stage++;
      block=true;
      weiter=0;
      delay(3000);
    }
}
}
}

void Clear_GameStatus(void)
{
  count=0;
  max_count=2;
  stage=1;
  weiter=0;
}

void Falsch(void)
{
  digitalWrite(LED_1,HIGH);
  digitalWrite(LED_2,HIGH);
  digitalWrite(LED_3,HIGH);
  digitalWrite(LED_4,HIGH);
  delay(1000);
  digitalWrite(LED_1,LOW);
  digitalWrite(LED_2,LOW);
  digitalWrite(LED_3,LOW);
  digitalWrite(LED_4,LOW);
  Clear_GameStatus();
}

void Blink(int led, int verz)
{
  digitalWrite(led,HIGH);
  delay(verz);
  digitalWrite(led,LOW);
}

void Gaming(int x)
{
  if(GStatus[x]==1)
  {
    Blink(LED_1,3000);
  }
  if(GStatus[x]==2)
  {
    Blink(LED_2,3000);
  }
  if(GStatus[x]==3)
  {
    Blink(LED_3,3000);
  }
  if(GStatus[x]==4)
  {
    Blink(LED_4,3000);
  }
}

void Go(void)
{
  while(count<=max_count)
  {
  if(block==false)
  {
  randNumber = random(4);
  
  if(randNumber==0)
  {
  digitalWrite(LED_1,HIGH);
  Status_Rot++;
  Merker=1;
  }
  if(randNumber==1)
  {
  digitalWrite(LED_2,HIGH);
  Status_Blau++;
  Merker=2;
  }
  if(randNumber==2)
  {
  digitalWrite(LED_3,HIGH);
  Status_Gruen++;
  Merker=3;
  }
  if(randNumber==3)
  {
  digitalWrite(LED_4,HIGH);
  Status_Gelb++;
  Merker=4;
  }
  delay(3000);
  digitalWrite(LED_1,LOW);
  digitalWrite(LED_2,LOW);
  digitalWrite(LED_3,LOW);
  digitalWrite(LED_4,LOW);
  }
  
  if(stage==1)
  {
  if(count==0)
  {
    GStatus[0]=Merker;
    Merker=0;
  }
  if(count==1)
  {
    GStatus[1]=Merker;
    Merker=0;
  }
  if(count==2)
  {
    GStatus[2]=Merker;
    Merker=0;
  }
  }
  if(stage==2)
  {
    Gaming(count);
    if(count==2)
    {
      block=false;
    }
  if(count==3)
  {
    GStatus[3]=Merker;
    Merker=0;
  }
  }
  if(stage==3)
  {
    Gaming(count);
    if(count==3)
    {
      block=false;
    }
  if(count==4)
  {
    GStatus[4]=Merker;
    Merker=0;
  }
  }
  if(stage==4)
  {
    Gaming(count);
    if(count==4)
    {
      block=false;
    }
  if(count==5)
  {
    GStatus[5]=Merker;
    Merker=0;
  }
  }
  if(stage==5)
  {
    Gaming(count);
    if(count==5)
    {
      block=false;
    }
  if(count==6)
  {
    GStatus[6]=Merker;
    Merker=0;
  }
  }
  if(stage==6)
  {
    Gaming(count);
    if(count==6)
    {
      block=false;
    }
  if(count==7)
  {
    GStatus[7]=Merker;
    Merker=0;
  }
  }
  if(stage==7)
  {
    Gaming(count);
    if(count==7)
    {
      block=false;
    }
  if(count==8)
  {
    GStatus[8]=Merker;
    Merker=0;
  }
  }
  if(stage==8)
  {
    Gaming(count);
    if(count==8)
    {
      block=false;
    }
  if(count==9)
  {
    GStatus[9]=Merker;
    Merker=0;
  }
  }
  count++;
  delay(1000);
}
}

Die Sache mit den "else if",... bringt mich dabei in die Verzweiflung.
(Die Funktionalität ist aber da!)

Bitte um Hilfe! (Ton kommt noch über Piezo-Schallwandler)

Danke!

Ähnliche Posts

1 Antwort auf “Projekt: Senso (4 Farben-Spiel)”


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
  1. Spot sagt:

    Hallo

    Ich hab mir dein Programm jetzt nicht komplett durchgeschaut das war mir zu anstrengend.
    Nachdem es dir ja nur um die ganzen else if() geht hätte ich da eine simple Lösung!

    Statt:

    if(!digitalRead(T1))
         {
           delay(50);
           if(!digitalRead(T1))
           {
               if(GStatus[0]==1 && weiter==0)
               {
                 Blink(LED_1,1000);
                 weiter=1;
               }
               else if(GStatus[1]==1 && weiter==1)
               {
                 Blink(LED_1,1000);
                 weiter=2;
               }
     
    .
    .
    .
    .
    .
    .
    .
    .
               else
               {
                 Falsch();
               }
     
             do{
             }while(!digitalRead(T1));
           }
         }

    machst du:
    if(!digitalRead(T1))
    {
        delay(50);
        if(!digitalRead(T1))
        {
            if(weiter >= 10 || GStatus[weiter] != 1)
                Falsch();
            else
            {
                Blink(LED_1,1000);
                weiter++;
            }
     
            while(!digitalRead(T1));
        }
    }

    mfg
    Spot

    Login or register to post comments