a
Dependencies: Led-libary TextLCD mbed
Fork of Mbed-Mensch-8 by
Diff: main.cpp
- Revision:
- 6:ca3d431f2daf
- Parent:
- 5:31d406df862a
- Child:
- 7:6b4048a2b9ff
--- a/main.cpp Fri Mar 11 19:07:06 2016 +0000 +++ b/main.cpp Sat Mar 12 15:08:39 2016 +0000 @@ -68,7 +68,8 @@ char AnimField[Spieler*Feldgrose]; char AnimStart[Spieler*Steine]; char AnimZiel[Spieler*Steine]; -char AnimDo; +char AnimPos[Spieler*Steine]; +char AnimDo; //Feld_Animieren,Start Animieren, Ziel Animierenw void AnimCal(); void reset() @@ -383,7 +384,7 @@ port.printf("W%c%c\n" , 27 + diceTick+((dice_help&0x1F)<<1),27 + ((dice_help& 0xE0)>>5)); break; - case 2: + case 2://Case 3 = Case 2 myled=(myled&0xFF0)|(diceNum); //myled=myled|0xFF0; @@ -470,36 +471,176 @@ __enable_irq(); } +void AnimCal() +{ + for(char i = 0; i<Spieler*Feldgrose;i++) + AnimField[i]=0; //Feld zurücksetzen + for (char i = 0; i < Spieler*Steine; i++) + { + AnimZiel[i]=0; + AnimStart[i]=0; + } + AnimDo=0;//Feld_Animieren,Start Animieren, Ziel Animieren + + //char AnimDo; //Feld_Animieren,Start Animieren, Ziel Animierenw + + for (char i = 0; i < Spieler*Steine; i++) //Hauptschleife + if(i==((Drann<<2)|selected)) + { + if(moglich[selected]==1) + { + if(PlayPos[i]<Steine) //nicht Draußsen + { + AnimDo = AnimDo|3;//Feld&Start + AnimPos[i] = Steine; //Ausfahren + char temp = Field[Drann*Feldgrose]; //Ansetzfeld wird analysiert + if(temp>0) + { + //myled = myled|temp<<8; + temp--; //(Spieler<<2)|Stein + AnimPos[temp] = (temp & 0x03); //rücksetzung des Feldes... + } + } + else //Draußen + { + AnimDo = AnimDo|1; //Feld + AnimPos[i] = PlayPos[i]+diceNum;; //Weitersetzen + //PlayPos[(Drann<<2)|selected] + if(AnimPos[i]<Steine+Spieler*Feldgrose) //noch nicht drinnen + { + //Field>0 + char temp = Field[ (AnimPos[i]-Steine+Feldgrose*Drann) % (Feldgrose*Steine) ]; + if(temp>0) + { + AnimDo = AnimDo|3;//Feld&Start + //myled = myled|temp<<8; + temp--; //(Spieler<<2)|Stein + AnimPos[temp] = (temp & 0x03); //rücksetzung des Feldes... + } + } + else + AnimDo=AnimDo|7;//Feld&Ziel (Start auch wegen Hardware) + } + } + else + AnimPos[i] = PlayPos[i]; //Spieler-pos Kopieren, weil es nicht möglich ist... + } + else + AnimPos[i] = PlayPos[i]; //Spieler-pos Kopieren + //FieldGenerate -> Anim... + for(char i = 0; i<Spieler;i++) + for(char j = 0; j<Steine;j++) + { + if (AnimPos[(i<<2)|j] >= Steine) + { + if (AnimPos[(i<<2)|j] >= (Spieler * Feldgrose + Steine)) + { + //if (AnimPos[(i<<2)|j] < Steine * Feldgrose+Steine*2) + AnimZiel[(AnimPos[(i<<2)|j] - (Spieler * Feldgrose + Steine))|(i<<2)] = ((i<<2)|j) + 1; + //AnimZiel AnimPos[(i<<2)|j] - 44 + } + else + AnimField[(AnimPos[(i<<2)|j]- Steine + Feldgrose * i) % (Steine * Feldgrose)] = ((i<<2)|j) + 1; + //Feld (AnimPos[(i<<2)|j]- 4 + 10 * i) % 40 + } + else + AnimStart[AnimPos[(i<<2)|j]|(i<<2)] = ((i<<2)|j)+1; + //start AnimPos[(i<<2)|j] + } +} + void MoveRun() //Animation (zyklisch) { if(MoveShow) - MoveShow=0; + MoveShow = 0; else MoveShow = 1; if(MoveShow>0) { - __disable_irq(); port.printf("F"); for(char i = 0;i<Spieler*Steine;i++) + { + port.printf("%c",27+AnimPos[i]); + } + port.printf("\n"); + + __disable_irq(); + if((AnimDo&1)>0) + { + for(char i = 0;i<Spieler*Feldgrose;i++) + if(AnimField[i]>0) + Feld.WriteLed(Farben[((AnimField[i]- 1)&0x0C)>>2]); + else + Feld.WriteLed(0); + } + //char Start[Spieler]; + //char Ziel[Spieler]; + char i = 0; + char j = 0; + if((AnimDo&2)>0) + { + while(i < Steine*Spieler) { - if(i==((Drann<<2)|selected)) - { - if(PlayPos[i]<Steine) - port.printf("%c",27+Steine); - else - port.printf("%c",27+PlayPos[i]+diceNum); - } + if(AnimStart[i]>0) + Home.WriteLed(Farben[((AnimStart[i]- 1)&0x0C)>>2]); else - port.printf("%c",27+PlayPos[i]); + Home.WriteLed(0); + i++; } - port.printf("\n"); + } + if((AnimDo&4)>0) + { + do + { + if(AnimZiel[j]>0) + Home.WriteLed(Farben[((AnimZiel[j]- 1)&0x0C)>>2]); + else + Home.WriteLed(0); + j++; + }while(j < Steine*Spieler); + } __enable_irq(); } else { FieldPrint(); - FeldPrint(); + __disable_irq(); + if((AnimDo&1)>0) + { + for(char i = 0;i<Spieler*Feldgrose;i++) + if(Field[i]>0) + Feld.WriteLed(Farben[((Field[i]- 1)&0x0C)>>2]); + else + Feld.WriteLed(0); + } + //char Start[Spieler]; + //char Ziel[Spieler]; + char i = 0; + char j = 0; + if((AnimDo&2)>0) + { + while(i < Steine*Spieler) + { + if(Start[i]>0) + Home.WriteLed(Farben[((Start[i]- 1)&0x0C)>>2]); + else + Home.WriteLed(0); + i++; + } + } + if((AnimDo&4)>0) + { + do + { + if(Ziel[j]>0) + Home.WriteLed(Farben[((Ziel[j]- 1)&0x0C)>>2]); + else + Home.WriteLed(0); + j++; + }while(j < Steine*Spieler); + } + __enable_irq(); } } @@ -511,6 +652,7 @@ break; else selected = (selected+1)%Steine; + AnimCal(); } void moveLast() @@ -521,6 +663,7 @@ break; else selected = (selected+3)%Steine; + AnimCal(); } void GameCal() @@ -646,10 +789,10 @@ { if(moglich[selected]==1) { - if(PlayPos[(Drann<<2)|selected]<Steine) + if(PlayPos[(Drann<<2)|selected]<Steine) //nicht Draußsen { - PlayPos[(Drann<<2)|selected] = Steine; - char temp = Field[Drann*Feldgrose]; + PlayPos[(Drann<<2)|selected] = Steine; //Ausfahren + char temp = Field[Drann*Feldgrose]; //Ansetzfeld wird analysiert if(temp>0) { //myled = myled|temp<<8; @@ -657,11 +800,11 @@ PlayPos[temp] = (temp & 0x03); //rücksetzung des Feldes... } } - else + else //Draußen { - PlayPos[(Drann<<2)|selected] += diceNum; + PlayPos[(Drann<<2)|selected] += diceNum; //Weitersetzen //PlayPos[(Drann<<2)|selected] - if((PlayPos[(Drann<<2)|selected]>=Steine)&&(PlayPos[(Drann<<2)|selected]<Steine+Spieler*Feldgrose)) + if(PlayPos[(Drann<<2)|selected]<Steine+Spieler*Feldgrose) //noch nicht drinnen { //Field>0 char temp = Field[ ( PlayPos[(Drann<<2)|selected] - Steine + (Feldgrose * Drann) ) % (Feldgrose*Steine) ];