Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Led-libary TextLCD mbed
Fork of Laufled 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) ];
