Dependencies:   TextLCD mbed

Fork of Mbed-Mensch-1 by Projekte_werkstatt

Revision:
5:f4db4cd245e3
Parent:
4:2acb70f9cd22
Child:
6:eda2b36d5be1
diff -r 2acb70f9cd22 -r f4db4cd245e3 main.cpp
--- a/main.cpp	Mon Feb 08 18:59:08 2016 +0000
+++ b/main.cpp	Fri Mar 11 07:47:58 2016 +0000
@@ -1,5 +1,7 @@
 #include "mbed.h"
 #include "WS2812B.h"
+#include "TextLCD.h"
+#include <string>
 
 I2C i2c(P0_5,P0_4);
 Serial port(P0_19,P0_18);
@@ -10,6 +12,7 @@
 //BusIn btn(P1_16,P0_23,P0_10,P0_15);
 
 RGBOut rgb(P0_21,P0_9,P1_15);
+TextLCD lcd(p21, p22, p26, p25, p24, p23,TextLCD::LCD20x4);
 
 LedOut Feld (P0_13);
 //LedOut Other(P0_13); //-> Würfel (ersten 3 LED in Binär-4. LED für 7. Zustand), Spieler, Start, Ziel, Referenz(auch RGB am board)
@@ -21,170 +24,39 @@
 InterruptIn Button3(P0_10);
 InterruptIn Button4(P0_15);
 
-Timer Random;
-Timer Dice;
-
-Ticker DiceAnim;
-void DiceStart();
-void DiceStop();
-void DiceRun();
-void setDice(char number);
-void DicePrint();
-char dicePos = 0;
-char diceEn = 0;
-char diceTick = 0;
-char diceNum = 0;
-int16_t diceDecode [7]= {0x1,0x88,0x89,0xAA,0xAB,0x1BA,0x154};
-
-#define Feldgrose 10
-#define Spieler 4
-#define Steine 4
+InterruptIn DD_A(P0_22);//20
+InterruptIn DD_B(P0_16);//19
+InterruptIn DD_C(P0_14);//18
+DigitalIn DD_D(P0_14);
+BusIn DD(P0_22,P0_16);
+//Timeout DD_reset;
+char DD_last;
+char DD_d;
 
-char PlayPos[Spieler*Steine];   //Zahl zwischen 0 & 47 ((0xC0 -> Spieler)>>2 / 0x03 -> Stein)
-char Start[Spieler];           //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
-char Ziel[Spieler];            //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
-char Drann;                    //Spieler, der drann ist
-char count;                    //Für 6er & mehrfaches Würfeln beim Ansetzen
-char last[Spieler];            //zuletzt benutzte Spielstein, der zuletzt benutzt wurde
-char moglich[Steine];
-char selected;                 //der aktuell ausgewählte Zug
-char Field[Spieler*Feldgrose]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
-uint32_t Farben[Spieler];      //Berechnete Hellichkeiten der Speiler fertig zur Ausgabe...
-void FieldPrint();             //Ausgabe auf Com-Port
-void FieldGenerate();          //Berechnung von PlayPos auf Start, Ziel, Field
-void FeldPrint();              //Ausgabe von Field auf den Led-Streifen (Feld) der Farben
-void GameCal();
-void moveNext();
-void moveLast();
-Ticker MoveAnim;
-void MoveRun();
-char MoveShow;
-void MoveDo();
-void ColorPrint(uint32_t color);
-
-void reset()
-{
-    MoveAnim.detach();
-    DiceAnim.detach();
-    for(char i = 0;i<Spieler*Steine;i++)
-        PlayPos[i]=i%4;
-    Drann=0;
-    diceEn=0; 
-    myled = myled&0xF0F;
-    DicePrint();
-    rgb.set_RGB(0);
-    FieldGenerate();
-    FieldPrint();
-    FeldPrint();
-}
+void dreh();
+void druck();
 
-void btn2()
-{
-    Drann = 0;
-    PlayPos[1]=Steine+Feldgrose*Spieler;
-    //PlayPos[2]=Steine+Feldgrose*Spieler+1;
-    PlayPos[3]=Steine+Feldgrose*Spieler+2;
-    PlayPos[0]=Steine+Feldgrose*Spieler-1;
-    FieldGenerate();
-    FieldPrint();
-    FeldPrint();   
-    
-}
-void btn3()
-{
-    /*
-    diceNum=2;
-    diceEn=2;
-    Drann = 1;
-    PlayPos[(1<<2)+0]=5;
-    PlayPos[(1<<2)+1]=7;
-    PlayPos[(1<<2)+2]=10;
-    PlayPos[(1<<2)+3]=12;
-    DicePrint();
-    FieldGenerate();
-    FieldPrint();
-    FeldPrint();
-    GameCal();
-    */
-    port.printf("W%c%c\n",27+0x3E,27+0x7);
-    for(char i=0;i<Spieler;i++)
-    {
-        port.printf("w");
-        ColorPrint(Farben[i]);
-        wait(1);
-    }
-}
-void btn4()
-{
-    /*
-    for(char i = 0;i<Spieler;i++)
-        PlayPos[i<<2]=4;
-    FieldGenerate();
-    FieldPrint();
-    */
-    myled = 0;
-    rgb.set(0,0,0);
-    port.printf("LBtn 4 Pressed\n");
-}
+void up();
+void down();
+void accept();
+void exit();
+void print_menu();
+void Control();
 
-void btn4_()
-{
-    port.printf("LBtn 4 Released\n");
-}
+//string test ("");
+//                                "1234567890123456789","1234567890123456789","1234567890123456789","1234567890123456789",  ,"1234567890123456789","1234567890123456789","1234567890123456789",
+const char * const  text_ln0[] = {"MENU:              ","Spiel-Menu:        ","Anzeige-Menu:      ","Speicher-Menu:     ","","7.Zustand-Menu:    ","Farben-Menu:       ","Spiel-Menu:        ","","Spielregeln-Menu:  ","Hell./Sp.Led-Menu: ","Config-Menu:       ","","Autplay-Menu:      ","Wurfel-Menu:       ","Ofline/Com-Menu:   "};
+const char * const  text_ln1[] = {"Spiel              ","7.Zustand          ","Farben             ","Spiel              ","","Disable            ","                   ","Laden              ","","Smeiszwang <I/0>   ","Wert: <wert>       ","Laden              ","","Zeit               ","Farbverhalten      ","New                "};
+const char * const  text_ln2[] = {"Anzeige            ","Spielregeln        ","Hellichkeit/Sp.Led ","Config.            ","","kleinstmoglich     ","SP: 1   2   3   4  ","Speichern          ","","Go Home first <I/0>","Sp.Led-Verhalten   ","Speichern          ","","Agro/Taktik        ","Farb def           ","Reset              "};
+const char * const  text_ln3[] = {"Speicher           ","Autoplay           ","Wurfel             ","Ofline/Com         ","","grostmoglich       ","                   ","Reset              ","","Ausfahrzwang <I/0> ","Andert: <wert>     ","Reset              ","","Enable/Manuell     ","Hellichkeit        ","Com                "};
 
-void Control()
-{
-    while(port.readable ())
-    {
-        char message = port.getc();
-        switch(message)
-        {
-            case '1':
-            setDice(1);
-            break;
-            case '2':
-            setDice(2);
-            break;
-            case '3':
-            setDice(3);
-            break;
-            case '4':
-            setDice(4);
-            break;
-            case '5':
-            setDice(5);
-            break;
-            case '6':
-            setDice(6);
-            break;
-            case '7':
-            setDice(7);
-            break;
-            case 'A':
-            DiceStart();
-            break;
-            case 'a':
-            DiceStop();
-            break;
-            case 'B':
-            moveNext();
-            break;
-            case 'C':
-            moveLast();
-            break;
-            case 'D':
-            MoveDo();
-            break;
-            case 'I':
-            reset();
-            break;
-        }
-    }
-}
+
+char selected[256];
+char depth = 0;
 
 int main() 
 {
-    Random.start();
+    //Random.start();
     //Random.stop();
     //Random.read_us();
     
@@ -193,460 +65,207 @@
     //.attach_us(&main,[micro-sec]);
     //.detach();
     
-    Button0.rise(&reset);
-    Button1.rise(&DiceStart);
-    Button1.fall(&DiceStop);
-    Button2.rise(&btn2);
-    Button3.rise(&btn3);
-    Button4.rise(&btn4);
-    Button4.fall(&btn4_);
-    
     //myled = 0xFFF;
     port.baud(76800);
     port.format(8,Serial::None, 1); 
     port.attach(&Control);
     /*
-    Farben[0]=0x001000;//Grün
-    Farben[1]=0x100000;//Rot
-    Farben[2]=0x000010;//Blau
-    Farben[3]=0x001010;//Gelb
-    //Farben[4]=0xFFFFFF;//Weiß
+    __disable_irq();
+    __enable_irq();
     */
-    Farben[0]=0x00FF00;//Grün
-    Farben[1]=0xFF0000;//Rot
-    Farben[2]=0x0000FF;//Blau
-    Farben[3]=0x00FFFF;//Gelb
+    wait(0.01);
+    DD_A.mode(PullDown);
+    DD_B.mode(PullDown);
+    DD_C.mode(PullDown);
+    DD_A.rise(&dreh);
+    DD_A.fall(&dreh);
+    DD_B.rise(&dreh);
+    DD_B.fall(&dreh);
+    DD_C.rise(&druck);
+    DD_C.fall(&druck);
+    DD_last = DD;
+    DD_d=DD_D;
     
-    __disable_irq();
-    for(char i = 0;i<Spieler;i++)
-    {
-        Feld.WriteLed(Farben[i]);
-        for(char j = 0;j<Feldgrose-1;j++)
-            Feld.WriteLed(0);
-    }
-    __enable_irq();
-    
+    //text_ln0[0]="";
+    //port.printf("D%c%ctest\n",27,27);
+    print_menu();
     
     while(1) ;        
 }
-
-void DiceStart()
+void Control()
 {
-    if(diceEn==0)
+    while(port.readable ())
     {
-    Dice.start();
-    DiceAnim.attach(&DiceRun,0.1);
-    diceEn = 1;
-    diceTick = 1;
-    DicePrint();
-    }
-}
-void DiceStop()
-{
-    if(diceEn==1)
-    {
-        if(Dice.read_us()> 200)
+        char message = port.getc();
+        switch(message)
         {
-            DiceAnim.detach();
-            diceEn = 2;
-            diceTick = 0;
-            diceNum = Random.read_us()%7;
-            diceNum = (Dice.read_us()+diceNum)%7+1;
-            Dice.stop();
-            Dice.reset();
-            if(diceNum==7)
-            {
-                diceEn=3;
-                for(char i = 0;i<Steine;i++)
-                    if((PlayPos[(Drann<<2)|i]>Steine -1)&&(PlayPos[(Drann<<2)|i] < Steine + Feldgrose*Spieler))
-                        for(char j = 1;j<=6;j++)
-                        {
-                            char temp = Field[(PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+j) % (Feldgrose*Steine)];
-                            if(temp>0)
-                            {
-                                temp--; //(Spieler<<2)|Stein
-                                temp = (temp&0xC)>>2;//Spieler
-                                if(temp!=Drann)
-                                    if(j<diceNum)
-                                        diceNum=j;
-                            }
-                        }
-                //PlayPos[(Drann<<2)|i] im Feld suchen, weiter setzen, wenn treffer, der kleiner als diceNum ->setzen von diceNum
-            }//DiceNum == 7
-            if(diceNum==7)
-                diceNum=6;
-            port.printf("LDiceNum:%d\n",diceNum);
-            DicePrint();
-            GameCal();
+            case 'D':
+                port.printf("Ldepth:%d,selected[depth-1]:%d\n",depth,selected[depth-1]);
+            break;
+            case 'E':
+                exit();
+            break;
+            case 'F':
+                up();
+            break;
+            case 'G':
+                down();
+            break;
+            case 'H':
+                accept();
+            break;
+            case 'I':
+                depth=0;
+                selected[0]=0;
+                print_menu();
+            break;
         }
     }
 }
-void setDice(char number)
-{
-    if(diceEn==1)
-    {
-        DiceAnim.detach();
-        diceTick = 0;
-        Dice.stop();
-        Dice.reset();
-    }
-    diceEn = 2;
-    diceNum = number;
-    if(diceNum>7)
-        diceNum=7;
-    if(diceNum==7)
-    {
-        diceEn=3;
-        for(char i = 0;i<Steine;i++)
-            if((PlayPos[(Drann<<2)|i]>3)&&(PlayPos[(Drann<<2)|i] < 44))
-                for(char j = 1;j<=6;j++)
-                {
-                    char temp = Field[(PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+j) % (Feldgrose*Steine)];
-                    if(temp>0)
-                    {
-                        temp--; //(Spieler<<2)|Stein
-                        temp = (temp&0xC)>>2;//Spieler
-                        if(temp!=Drann)
-                            if(j<diceNum)
-                                diceNum=j;
-                    }
-                }
-        //PlayPos[(Drann<<2)|i] im Feld suchen, weiter setzen, wenn treffer, der kleiner als diceNum ->setzen von diceNum
-    }//DiceNum == 7
-    if(diceNum==7)
-        diceNum=6;
-    port.printf("LForceDice:%d\n",diceNum);
-    DicePrint();
-    GameCal();
-}
-void DiceRun()
+void dreh()
 {
-    if(diceTick)
-    {
-        diceTick=0;
-        if(dicePos<7)
-            dicePos++;
-        else
-            dicePos=0;
-        }
+    char temp = DD;
+    if(DD_last == 3)
+    { 
+        if(temp == 0)
+            DD_last = 0;
+    }
     else
-        diceTick=1;
-    DicePrint();
-}
-
-void DicePrint()
-{
-    switch(diceEn)
     {
-        case 0:
-        myled=(myled&0xFF0);
-        port.printf("W%c%c\n",27,27);
-        break;
-        case 1:
-        char dice_help = 0xFF-(1<<dicePos);
-        myled=(myled&0xFF0)|(5)|(diceTick<<1);
-        //myled = (myled&0xF)|(dice_help<<4);
-        
-        port.printf("W%c%c\n" , 27 + diceTick+((dice_help&0x1F)<<1),27 + ((dice_help& 0xE0)>>5));
-        break;
-        case 2:
-        myled=(myled&0xFF0)|(diceNum);
-        //myled=myled|0xFF0;
-        
-        port.printf("W%c%c\n" , 27 +(diceDecode[diceNum-1]&0x3F),27 + ((diceDecode[diceNum-1]&0x1C0)>>6));
-        break;
-        case 3:
-        myled=(myled&0xFF0)|(diceNum)|8;
-        //myled=myled|0xFF0;
-        
-        port.printf("W%c%c\n" , 27 +(diceDecode[diceNum-1]&0x3F),27 + ((diceDecode[diceNum-1]&0x1C0)>>6));
-        break;
+        if(temp == 3)
+        {
+            if(DD_last == 1)
+                up();
+            if(DD_last == 2)
+                down();
+        }
+        DD_last = temp;
     }
 }
 
-void FieldGenerate()
+void druck()
 {
-    for(char i = 0; i<Spieler*Feldgrose;i++)
-        Field[i]=0; //Feld zurücksetzen
-        
-    for(char i = 0; i<Spieler;i++)
-        for(char j = 0; j<Steine;j++)
-        {
-            if (PlayPos[(i<<2)|j] >= Steine)
-            {
-                if (PlayPos[(i<<2)|j] > Steine * Feldgrose+Steine-1)
-                {
-                    if (PlayPos[(i<<2)|j] < Steine * Feldgrose+Steine*2)
-                        Ziel[PlayPos[(i<<2)|j] - Steine * Feldgrose+Steine] = ((i<<2)|j) + 1;
-                        //Ziel PlayPos[(i<<2)|j] - 44
-                }
-                else
-                    Field[(PlayPos[(i<<2)|j]- Steine + Feldgrose * i) % (Steine * Feldgrose)] = ((i<<2)|j) + 1;
-                    //Feld (PlayPos[(i<<2)|j]- 4 + 10 * i) % 40
-            }
-            else
-                Start[PlayPos[(i<<2)|j]] = ((i<<2)|j)+1;
-                //start PlayPos[(i<<2)|j]
-        }
-}
-
-void FieldPrint()
-{
-    port.printf("F");
-    for(char i = 0;i<Spieler*Steine;i++)
-    {
-        port.printf("%c",27+PlayPos[i]);
-    }
-    port.printf("\n");
-}
-
-void FeldPrint()
-{
-    __disable_irq();
-    for(char i = 0;i<Spieler*Feldgrose;i++)
-        if(Field[i]>0)
-            Feld.WriteLed(Farben[((Field[i]- 1)&0x0C)>>2]);
-        else
-            Feld.WriteLed(0);
-    __enable_irq();
+    if(DD_D==DD_d)
+        return;
+    else  if(DD_D)
+        accept();
+    DD_d=DD_D;
 }
 
-/*
-char PlayPos[Spieler*Steine];  //Zahl zwischen 0 & 47 ((0xC0 -> Spieler)>>2 / 0x03 -> Stein)
-char PlayPosOld[Spieler*Steine];
-char Start[Spieler];           //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
-char Ziel[Spieler];            //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
-char Drann;                    //Spieler, der drann ist
-char count;                    //Für 6er & mehrfaches Würfeln beim Ansetzen
-char last[Spieler];            //zuletzt benutzte Spielstein, der zuletzt benutzt wurde
-char moglich[Steine];
-char selected;                 //der aktuell ausgewählte Zug
-char Field[Spieler*Feldgrose]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
-uint32_t Farben[Spieler];      //Berechnete Hellichkeiten der Speiler fertig zur Ausgabe...
-void FieldPrint();             //Ausgabe auf Com-Port
-void FieldGenerate();          //Berechnung von PlayPos auf Start, Ziel, Field
-void FeldPrint();              //Ausgabe von Field auf den Led-Streifen (Feld) der Farben
-void GameCal();
-void moveNext();
-void moveLast();
-Ticker MoveAnim;
-void MoveRun();
-char MoveShow;
-void MovePrint();                */
-
-void MoveRun()
+void up()
 {
-    if(MoveShow)
-        MoveShow=0;
-    else
-        MoveShow = 1;
-    if(MoveShow>0)
+    if(depth>0)
     {
-        __disable_irq();
-        port.printf("F");
-        for(char i = 0;i<Spieler*Steine;i++)
-            {
-                if(i==((Drann<<2)|selected))
-                {
-                    if(PlayPos[i]<Steine)
-                        port.printf("%c",27+Steine);
-                        else
-                            port.printf("%c",27+PlayPos[i]+diceNum);
-                }
-                else
-                    port.printf("%c",27+PlayPos[i]);
-            }
-        port.printf("\n");
-        __enable_irq();
+        if(selected[depth-1]<1)
+            selected[depth-1]=3;
+        else
+            selected[depth-1]--;
     }
-    else
-        FieldPrint();
+    print_menu();
 }
-
-void moveNext()
+void down()
 {
-    selected = (selected+1)%Steine;
-    for(char i = 0;i<Steine;i++)
-        if(moglich[selected]>0)
-            break;
-        else
-            selected = (selected+1)%Steine;
-}
-
-void moveLast()
-{
-    selected = (selected+3)%Steine;
-    for(char i = 0;i<Steine;i++)
-        if(moglich[selected]>0)
-            break;
-        else
-            selected = (selected+3)%Steine;
-}
-
-void GameCal()
-{
-    char drausen = 0; //Ziel
-    char feld = 0;
-    char drinnen = 0; //start
-    char moglichAny = 1;
-    for(char i = 0;i<Steine;i++)
+    if(depth>0)
     {
-        if(PlayPos[(Drann<<2)|i]>3)
-        {
-            if(PlayPos[(Drann<<2)|i] > 43)
-                drausen++;
-            else
-                feld++;
-        }
+        if(selected[depth-1]>2)
+            selected[depth-1]=0;
         else
-            drinnen++;
-        moglich[i]=0;
+            selected[depth-1]++;
     }
-    //Berechnung
-    //Ausfahren:
-    //drinnen >0 (Noch Spieler drinnen?)
-    //Startfeld ist von Spieler belegt
-    //Ziel ist frei
-    if((drinnen>0)&&(moglichAny))
+    print_menu();
+}
+void accept()
+{
+    if(depth>0)
     {
-        //port.printf("LDrinnen\n");
-        if(((((Field[Feldgrose*Drann]-1) &0x0C) >>2)==Drann)&&(Field[Feldgrose*Drann]>0))
+        if(depth<=3)
         {
-            //port.printf("LAusfahrt Belegt\n");
-            if(((((Field[(Feldgrose*Drann+diceNum)%(Feldgrose*Spieler)]-1) &0x0C) >>2)!=Drann)||(Field[(Feldgrose*Drann+diceNum)%(Feldgrose*Spieler)]==0))
+            if(selected[depth-1]==0)
+                exit();
+            else
             {
-                //port.printf("LZiel frei (Done)\n");
-                moglich[(Field[Feldgrose*Drann]-1) &0x03] = 1;
-                moglichAny=0;
+                selected[depth]=1;
+                depth++;
             }
         }
     }
-    
-    //Ansetzen
-    // 6 gewürfelt
-    //drinnen>0
-    //Start-feld ist nicht von Spieler belegt
-    if((drinnen>0)&&(moglichAny)&&(diceNum==6))
+    else
+        depth=1;
+    print_menu();
+}
+void exit()
+{
+    if(depth>0)
     {
-        //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;
-        }
+        depth--;
+        if(depth<=3)
+            selected[depth]=0;
     }
-    
-    //Fahren
-    if(moglichAny)
+    print_menu();
+}
+void print_menu()
+{
+    if(depth>0)
     {
-        //port.printf("LNormal...\n");
-        for(char i = 0;i<Steine;i++)
+        if(depth>3)//        "                    "
+        {
+            port.printf("D%c%c Custom              \n",27,27);
+            lcd.locate(0,0);
+            lcd.printf(" Custom              ");
+        }
+        else
         {
-            if(PlayPos[(Drann<<2)|i]>Spieler-1) //Drausen
+            uint32_t _selected = 0;
+            for(char i = 0;i<depth-1;i++)
+                _selected = _selected|(selected[i]<<(i*2));
+            //port.printf("L_selected:%d\n",_selected);
+            lcd.locate(1,0);
+            lcd.printf(text_ln0[_selected]);
+            port.printf("D%c%c%s\n",28,27,text_ln0[_selected]);
+            lcd.locate(1,1);
+            lcd.printf(text_ln1[_selected]);
+            port.printf("D%c%c%s\n",28,28,text_ln1[_selected]);
+            lcd.locate(1,2);
+            lcd.printf(text_ln2[_selected]);
+            port.printf("D%c%c%s\n",28,29,text_ln2[_selected]);
+            lcd.locate(1,3);
+            lcd.printf(text_ln3[_selected]);
+            port.printf("D%c%c%s\n",28,30,text_ln3[_selected]);
+            
+            for(char i=0;i<4;i++)
             {
-                if((PlayPos[(Drann<<2)|i]-Steine+diceNum) < Feldgrose*Spieler)//Zeil noch am Feld
+                lcd.locate(0,i);
+                if((selected[depth-1]+0)==i)
                 {
-                    char temp = Field[(PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+diceNum) % (Feldgrose*Steine)]; //zielfeld
-                    if(temp>0)
+                    if(i==0)
                     {
-                        //myled = myled|temp<<8;
-                        temp--; //(Spieler<<2)|Stein
-                        temp = (temp&0xC)>>2;//Spieler
-                        if(temp!=Drann)     //zielfeld ist nicht ich
-                            moglich[i]=1;
+                        port.printf("D%c%c<\n",27,i+27);
+                        lcd.putc('<');
                     }
-                    else//Feld ist leer
-                        moglich[i]=1;
+                    else
+                    {
+                        port.printf("D%c%c>\n",27,i+27);
+                        lcd.putc('>');
+                    }
                 }
                 else
-                {//Kollisionsberechnung ins Ziel...
-                    if((PlayPos[(Drann<<2)|i]+diceNum)<(Steine*2+ Feldgrose*Spieler))//Schiest nicht über das Ziel hinaus...
-                        if(Ziel[PlayPos[(Drann<<2)|i]-Steine-Feldgrose*Spieler+diceNum]==0)//Zielfeld ist leer (enthält ja nur mich)
-                            moglich[i]=1;
+                {
+                    port.printf("D%c%c \n",27,i+27);
+                    lcd.putc(' ');
                 }
             }
         }
     }
-        
-    moglichAny=0;
-    myled = myled&0xF0F;
-    for(char i = 0;i<Steine;i++)
-    {
-        myled = myled|(moglich[i]<<i+4);
-        moglichAny = moglichAny | moglich[i];
-    }
-    if(moglichAny)
-    {
-        selected = (last[Drann]+Steine-1)%Steine;
-        moveNext();
-        MoveAnim.attach(&MoveRun,0.3);
-    }
     else
     {
-        if(feld)
-        diceEn = 1;
-        else 
-        {
-            if(count<3)
-            {
-                diceEn=0;
-                count++;
-                port.printf("LCount: %d\n",count);
-            }
-        }
+        lcd.cls();
+        lcd.printf(" Spiel lauft...");
+        lcd.locate(0,3);
+        lcd.printf("12345678901234567890");
+        port.printf("D%c%c Spiel lauft...     \n",27,27);
+        port.printf("D%c%c                    \n",27,28);
+        port.printf("D%c%c                    \n",27,29);
+        port.printf("D%c%c12345678901234567890\n",27,30);
     }
 }
 
-void MoveDo()
-{
-    if(diceEn>1)
-    {
-        if(PlayPos[(Drann<<2)|selected]<Steine)
-        {
-            PlayPos[(Drann<<2)|selected] = Steine;
-            char temp = Field[Drann*Feldgrose];
-            if(temp>0)
-            {
-                //myled = myled|temp<<8;
-                temp--; //(Spieler<<2)|Stein
-                PlayPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
-            }
-        }
-        else
-        {
-            PlayPos[(Drann<<2)|selected] += diceNum;
-            //PlayPos[(Drann<<2)|selected]
-            if((PlayPos[(Drann<<2)|selected]>=Steine)&&(PlayPos[(Drann<<2)|selected]<Steine+Spieler*Feldgrose))
-            {
-                //Field>0
-                char temp = Field[ ( PlayPos[(Drann<<2)|selected] - Steine + (Feldgrose * Drann) ) % (Feldgrose*Steine) ];
-                if(temp>0)
-                {
-                    //myled = myled|temp<<8;
-                    temp--; //(Spieler<<2)|Stein
-                    PlayPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
-                }
-            }
-        }
-        MoveAnim.detach();
-        last[Drann]=selected;
-        if(diceNum<6)
-        {
-            Drann = (Drann+1)%Spieler;
-        }
-        diceEn = 0;
-        count = 0;
-        DicePrint();
-        myled = myled&0xF0F;
-        FieldGenerate();
-        FieldPrint();
-        FeldPrint();
-    }
-}
-void ColorPrint(uint32_t color)
-{
-    port.printf("%c%c%c%c\n",27+((color&0xFC0000)>>18),27+((color&0x03f000)>>12),27+((color&0x000FC0)>>6),27+(color&0x00003F));
-}
\ No newline at end of file