Dependencies:   TextLCD mbed

Fork of Mbed-Mensch-1 by Projekte_werkstatt

Revision:
2:3a90b20958ff
Parent:
1:0eaa7682f7e1
Child:
3:814d47b6991c
diff -r 0eaa7682f7e1 -r 3a90b20958ff main.cpp
--- a/main.cpp	Thu Feb 04 15:51:34 2016 +0000
+++ b/main.cpp	Fri Feb 05 09:17:21 2016 +0000
@@ -69,6 +69,7 @@
         PlayPos[i]=i%4;
     Drann=0;
     diceEn=0; 
+    myled = myled&0xF0F;
     DicePrint();
     rgb.set_RGB(0);
     FieldGenerate();
@@ -78,12 +79,13 @@
 
 void btn2()
 {
-    diceEn=0;
-    Drann=2;
-    PlayPos[4]=14;
+    Drann = 0;
+    PlayPos[1]=Steine+Feldgrose*Spieler;
+    PlayPos[2]=5; 
     FieldGenerate();
     FieldPrint();
-    FeldPrint();
+    FeldPrint();   
+    
 }
 void btn3()
 {
@@ -468,7 +470,7 @@
     char drausen = 0; //Ziel
     char feld = 0;
     char drinnen = 0; //start
-    char moglichAny = 0;
+    char moglichAny = 1;
     for(char i = 0;i<Steine;i++)
     {
         if(PlayPos[(Drann<<2)|i]>3)
@@ -483,45 +485,79 @@
         moglich[i]=0;
     }
     //Berechnung
-    if((drinnen>0)&&((((Field[Feldgrose*Drann]-1) &0x0C) >>2)==Drann)&&(Field[Feldgrose*Drann]>0))
-    {//Ausfahren
-        moglich[(Field[Feldgrose*Drann]-1) &0x03] = 1;
+    //Ausfahren:
+    //drinnen >0 (Noch Spieler drinnen?)
+    //Startfeld ist von Spieler belegt
+    //Ziel ist frei
+    if((drinnen>0)&&(moglichAny))
+    {
+        port.printf("LDrinnen\n");
+        if(((((Field[Feldgrose*Drann]-1) &0x0C) >>2)==Drann)&&(Field[Feldgrose*Drann]>0))
+        {
+            port.printf("LAusfahrt Belegt\n");
+            if(((((Field[(Feldgrose*Drann+diceNum)%(Feldgrose*Spieler)]-1) &0x0C) >>2)!=Drann)||(Field[(Feldgrose*Drann+diceNum)%(Feldgrose*Spieler)]==0))
+            {
+                port.printf("LZiel frei (Done)\n");
+                moglich[(Field[Feldgrose*Drann]-1) &0x03] = 1;
+                moglichAny=0;
+            }
+        }
     }
-    else
+    
+    //Ansetzen
+    // 6 gewürfelt
+    //drinnen>0
+    //Start-feld ist nicht von Spieler belegt
+    if((drinnen>0)&&(moglichAny)&&(diceNum==6))
     {
-        if((diceNum==6)&&(drinnen>0)) //Ansetzen
+        port.printf("LDrinnen & 6 \n");
+        if(((((Field[Feldgrose*Drann]-1) &0x0C) >>2)!=Drann)||(Field[Feldgrose*Drann]==0))
         {
+            port.printf("LAusfahrt frei (Done...Schleife)\n");
+            moglichAny=0;
             for(char i = 0;i<Steine;i++)
                 if(PlayPos[(Drann<<2)|i]<Steine)
                     moglich[i]=1;
         }
-        else                      //'normal'
+    }
+    
+    //Fahren
+    if(moglichAny)
+    {
+        port.printf("LNormal...\n");
+        for(char i = 0;i<Steine;i++)
         {
-            for(char i = 0;i<Steine;i++)
+            if(PlayPos[(Drann<<2)|i]>Spieler-1) //Drausen
             {
-                if(PlayPos[(Drann<<2)|i]>Spieler-1)
+                if((PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+diceNum)<(Steine + Feldgrose *Spieler))//Zeil noch am Feld
                 {
-                    char temp = Field[(PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+diceNum) % (Feldgrose*Steine)];
+                    char temp = Field[(PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+diceNum) % (Feldgrose*Steine)]; //zielfeld
                     if(temp>0)
                     {
                         //myled = myled|temp<<8;
                         temp--; //(Spieler<<2)|Stein
                         temp = (temp&0xC)>>2;//Spieler
-                        if(!(temp==Drann))
+                        if(temp!=Drann)     //zielfeld ist nicht ich
                             moglich[i]=1;
                     }
-                    else
+                    else//Feld ist leer
                         moglich[i]=1;
                 }
+                else
+                {//Kollisionsberechnung ins Ziel...
+                    
+                }
             }
         }
     }
-    
+        
+    moglichAny=0;
     myled = myled&0xF0F;
     for(char i = 0;i<Steine;i++)
+    {
         myled = myled|(moglich[i]<<i+4);
-    for(char i = 0;i<Steine;i++)
         moglichAny = moglichAny | moglich[i];
+    }
     if(moglichAny)
     {
         selected = (last[Drann]+Steine-1)%Steine;
@@ -534,8 +570,8 @@
         diceEn = 1;
         else
         {
-        diceEn=0;
-        count++;
+            diceEn=0;
+            count++;
         }
     }
 }