Dependencies:   Led-libary TextLCD mbed

Committer:
ogris
Date:
Fri Apr 01 15:46:19 2016 +0000
Revision:
19:b07fa9e47577
Parent:
18:d747cf2de3bf
Child:
20:9908c31eb2f7
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ladner 0:e97a6a69fe4b 1 #include "mbed.h"
ladner 1:0eaa7682f7e1 2 #include "WS2812B.h"
ladner 13:cb068deacb6c 3 #include "TextLCD.h"
ladner 0:e97a6a69fe4b 4
ogris 18:d747cf2de3bf 5
ogris 18:d747cf2de3bf 6 /*Todo list
ogris 18:d747cf2de3bf 7 switch case aktualisieren
ogris 18:d747cf2de3bf 8 Autoplay
ogris 18:d747cf2de3bf 9 Switchcase alle Funktionen einfügen
ogris 18:d747cf2de3bf 10 Menü prüfen, erweitern
ogris 18:d747cf2de3bf 11 (
ogris 18:d747cf2de3bf 12 Farben Menü für alle Spieler fehlt //rgb einstellen -> spieler 2-4 fehlt
ogris 18:d747cf2de3bf 13 Würfel-> Farbe vll bereits ein älteres Menü zu benutzen
ogris 18:d747cf2de3bf 14 Würfel -> Farbverhalten gleich wie oben
ogris 19:b07fa9e47577 15 Autoplay generell ?
ogris 18:d747cf2de3bf 16 )
ogris 18:d747cf2de3bf 17
ogris 18:d747cf2de3bf 18 */
ogris 18:d747cf2de3bf 19
ogris 18:d747cf2de3bf 20
ogris 18:d747cf2de3bf 21
ladner 0:e97a6a69fe4b 22 I2C i2c(P0_5,P0_4);
ladner 0:e97a6a69fe4b 23 Serial port(P0_19,P0_18);
ladner 0:e97a6a69fe4b 24 BusOut myled(P1_8,P1_9,P1_10,P1_11,P1_0,P1_1,P1_3,P1_4,P1_6,P1_7,P1_12,P1_13);
ladner 0:e97a6a69fe4b 25 AnalogIn ldr(P0_12);
ladner 0:e97a6a69fe4b 26 AnalogIn poti(P0_11);
ladner 1:0eaa7682f7e1 27 //BusOut rgb(P0_9,P1_15,P0_21);
ladner 1:0eaa7682f7e1 28
ladner 1:0eaa7682f7e1 29 RGBOut rgb(P0_21,P0_9,P1_15);
ladner 1:0eaa7682f7e1 30
ladner 1:0eaa7682f7e1 31 InterruptIn Button0(P0_1);
ladner 0:e97a6a69fe4b 32 InterruptIn Button1(P1_16);
ladner 0:e97a6a69fe4b 33 InterruptIn Button2(P0_23);
ladner 1:0eaa7682f7e1 34 InterruptIn Button3(P0_10);
ladner 1:0eaa7682f7e1 35 InterruptIn Button4(P0_15);
ladner 13:cb068deacb6c 36 BusIn btn(P1_16,P0_23,P0_10,P0_15,P0_1);
ladner 0:e97a6a69fe4b 37
ladner 13:cb068deacb6c 38 LedOut Feld (p6);//P6
ladner 13:cb068deacb6c 39 LedOut Home (p7);//P7
ladner 13:cb068deacb6c 40 LedOut Dice (p8);//P8
ladner 13:cb068deacb6c 41 //-> Würfel (ersten 3 LED in Binär-4. LED für 7. Zustand), Spieler, Referenz(auch RGB am board)
ladner 13:cb068deacb6c 42
ladner 13:cb068deacb6c 43 TextLCD lcd(p21, p22, p23, p24, p25, p26,TextLCD::LCD20x4);
ladner 13:cb068deacb6c 44
ladner 13:cb068deacb6c 45 InterruptIn DD_A(p29);//P29
ladner 13:cb068deacb6c 46 InterruptIn DD_B(p30);//P30
ladner 13:cb068deacb6c 47 InterruptIn DD_C(p35);//P35
ladner 13:cb068deacb6c 48 DigitalIn DD_D(p35);
ladner 13:cb068deacb6c 49 BusIn DD(p29,p30);//P29,P30
ladner 13:cb068deacb6c 50
ladner 13:cb068deacb6c 51 //Dice
ladner 1:0eaa7682f7e1 52 Timer Random;
ladner 13:cb068deacb6c 53 Timer RandomDice;
ladner 1:0eaa7682f7e1 54
ladner 1:0eaa7682f7e1 55 Ticker DiceAnim;
ladner 1:0eaa7682f7e1 56 void DiceRun();
ladner 1:0eaa7682f7e1 57 void setDice(char number);
ladner 1:0eaa7682f7e1 58 void DicePrint();
ladner 13:cb068deacb6c 59 void DiceCal(); //umrechning des 7.Zustands in eine Zahl zwischen 1 & 6
ladner 1:0eaa7682f7e1 60 char dicePos = 0;
ladner 1:0eaa7682f7e1 61 char diceEn = 0;
ladner 1:0eaa7682f7e1 62 char diceTick = 0;
ladner 1:0eaa7682f7e1 63 char diceNum = 0;
ladner 1:0eaa7682f7e1 64 int16_t diceDecode [7]= {0x1,0x88,0x89,0xAA,0xAB,0x1BA,0x154};
ladner 13:cb068deacb6c 65 //Game
ladner 1:0eaa7682f7e1 66 #define Feldgrose 10
ladner 1:0eaa7682f7e1 67 #define Spieler 4
ladner 1:0eaa7682f7e1 68 #define Steine 4
ladner 1:0eaa7682f7e1 69
ladner 1:0eaa7682f7e1 70 char PlayPos[Spieler*Steine]; //Zahl zwischen 0 & 47 ((0xC0 -> Spieler)>>2 / 0x03 -> Stein)
ladner 13:cb068deacb6c 71 char Start[Spieler*Steine]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
ladner 13:cb068deacb6c 72 char Ziel[Spieler*Steine]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
ladner 1:0eaa7682f7e1 73 char Drann; //Spieler, der drann ist
ladner 1:0eaa7682f7e1 74 char count; //Für 6er & mehrfaches Würfeln beim Ansetzen
ladner 1:0eaa7682f7e1 75 char last[Spieler]; //zuletzt benutzte Spielstein, der zuletzt benutzt wurde
ladner 1:0eaa7682f7e1 76 char moglich[Steine];
ladner 1:0eaa7682f7e1 77 char selected; //der aktuell ausgewählte Zug
ladner 1:0eaa7682f7e1 78 char Field[Spieler*Feldgrose]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
ladner 1:0eaa7682f7e1 79 void FieldPrint(); //Ausgabe auf Com-Port
ladner 1:0eaa7682f7e1 80 void FieldGenerate(); //Berechnung von PlayPos auf Start, Ziel, Field
ladner 1:0eaa7682f7e1 81 void FeldPrint(); //Ausgabe von Field auf den Led-Streifen (Feld) der Farben
ladner 1:0eaa7682f7e1 82 void GameCal();
ladner 1:0eaa7682f7e1 83 Ticker MoveAnim;
ladner 1:0eaa7682f7e1 84 void MoveRun();
ladner 1:0eaa7682f7e1 85 char MoveShow;
ladner 13:cb068deacb6c 86 void ColorPrint(uint32_t color);
ladner 13:cb068deacb6c 87 //Animations
ladner 13:cb068deacb6c 88 char AnimField[Spieler*Feldgrose];
ladner 13:cb068deacb6c 89 char AnimStart[Spieler*Steine];
ladner 13:cb068deacb6c 90 char AnimZiel[Spieler*Steine];
ladner 13:cb068deacb6c 91 char AnimPos[Spieler*Steine];
ladner 13:cb068deacb6c 92 char AnimDo; //Feld_Animieren,Start Animieren, Ziel Animierenw
ladner 13:cb068deacb6c 93 void AnimCal();
ladner 13:cb068deacb6c 94 //Core Interactions
ladner 13:cb068deacb6c 95 void reset();
ladner 1:0eaa7682f7e1 96 void MoveDo();
ladner 13:cb068deacb6c 97 void moveNext();
ladner 13:cb068deacb6c 98 void moveLast();
ladner 13:cb068deacb6c 99 void DiceStart();
ladner 13:cb068deacb6c 100 void DiceStop();
ladner 13:cb068deacb6c 101 //Button entprellung (funktioniert nicht...)
ladner 13:cb068deacb6c 102 void btn0();
ladner 13:cb068deacb6c 103 void btn1();
ladner 13:cb068deacb6c 104 void btn2();
ladner 13:cb068deacb6c 105 void btn3();
ladner 13:cb068deacb6c 106 void btn4();
ladner 13:cb068deacb6c 107 char btnLast;
ladner 13:cb068deacb6c 108 //Farben
ladner 13:cb068deacb6c 109 uint32_t Farben[Spieler]; //Berechnete Hellichkeiten der Speiler fertig zur Ausgabe...
ladner 13:cb068deacb6c 110 uint32_t Background = 0; //Hintergrund (Leerfeld)
ladner 13:cb068deacb6c 111 uint32_t DiseC = 0x00FF00; //Würfelfarbe
ladner 13:cb068deacb6c 112 void ColorPrint(uint32_t color); //vorher den Header senden (manuell...)
ladner 13:cb068deacb6c 113
ladner 13:cb068deacb6c 114 char DD_last;
ladner 13:cb068deacb6c 115 char DD_d;
ladner 13:cb068deacb6c 116
ladner 13:cb068deacb6c 117 void dreh();
ladner 13:cb068deacb6c 118 void druck();
ladner 13:cb068deacb6c 119
ladner 13:cb068deacb6c 120 void up();
ladner 13:cb068deacb6c 121 void down();
ladner 13:cb068deacb6c 122 void accept();
ladner 13:cb068deacb6c 123 void exit();
ladner 13:cb068deacb6c 124 void print_menu();
ladner 13:cb068deacb6c 125 void print_pos();
ladner 13:cb068deacb6c 126 void print_default();
ladner 13:cb068deacb6c 127 void posUpdate();
ladner 13:cb068deacb6c 128 char ausfuehren(uint32_t postion);
ladner 13:cb068deacb6c 129
ladner 13:cb068deacb6c 130 //string test ("");
ladner 13:cb068deacb6c 131 // "1234567890123456789","1234567890123456789","1234567890123456789","1234567890123456789", ,"1234567890123456789","1234567890123456789","1234567890123456789",
ogris 16:9a868ab2a5cb 132 const char * const text_ln0[] = {"MENU: ","Spiel-Menu: ","Anzeige-Menu: ","Speicher-Menu: ","ERROR ","7.Zustand-Menu: ","Farben-Menu: ","Spiel-Menu: ","Spielregeln-Menu: ","Spielregeln-Menu: ","Hell./Sp.Led-Menu: ","Config-Menu: ","Autplay-zeit ","Autplay-Menu: ","Wurfel-Menu: ","Ofline/Com-Menu: ","Enable/Manuell ","Farben ","Helligkeit Wert ","Sp.Led-Verhalten ","Farbverhalten ","Farbverhalten def ","Helligkeit Wert "};
ogris 16:9a868ab2a5cb 133 const char * const text_ln1[] = {"Spiel ","7.Zustand ","Farben ","Spiel "," ","Disable "," ","Laden ","Taktik 1 ","Smeiszwang <I/0> ","Wert: <wert> ","Laden ","normal ","Zeit ","Farbverhalten ","New "," ","R: ","100% ","Verhalten 1 ","fixe Farbe ","Standart ","100% "};
ogris 16:9a868ab2a5cb 134 const char * const text_ln2[] = {"Anzeige ","Spielregeln ","Hellichkeit/Sp.Led ","Config. "," ","kleinstmoglich ","SP: 1 2 3 4 ","Speichern ","Taktik 2 ","Go Home first <I/0>","Sp.Led-Verhalten ","Speichern ","x2 ","Agro/Taktik ","Farb def ","Reset "," ","G: ","75% ","Verhalten 2 ","Spieler Farbe ","erlaubt ","75% "};
ogris 16:9a868ab2a5cb 135 const char * const text_ln3[] = {"Speicher ","Autoplay ","Wurfel ","Ofline/Com "," ","grostmoglich "," ","Reset ","Taktik 3 ","Ausfahrzwang <I/0> ","Andert: <wert> fehl","Reset ","x4 ","Enable/Manuell ","Hellichkeit ","Com "," ","B: ","50%b ","Verhalten 3 ","3 Farben ","verboten ","50% "};
ogris 17:0e7af2d4cd63 136 char textPos[] = {0x0 ,0x1 ,0x2 ,0x3 ,0x4 ,0x5 ,0x6 ,0x7 ,0x4 ,0x9 ,0xA ,0xB ,0x4 ,0xD ,0xE ,0xF ,0x10 ,0x11 ,0x12 ,0x13 ,0x14 ,0x15 ,0x16,0x17,0x18,0x19,0x12,0x1B,0x1C,0xC,0x14,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x11,0x27,0x28,0x29,0x13,0x2B,0x10,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x16,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F};
ladner 13:cb068deacb6c 137
ladner 13:cb068deacb6c 138 char VHS = 0;
ladner 13:cb068deacb6c 139 char mSelected[256];
ladner 13:cb068deacb6c 140 char depth = 0;
ladner 13:cb068deacb6c 141 uint32_t postion = 0;//Dafür brauche ich die Methode
ladner 13:cb068deacb6c 142 char mDiceEn = 5;
ladner 13:cb068deacb6c 143
ladner 13:cb068deacb6c 144
ladner 13:cb068deacb6c 145 void btn0()
ladner 13:cb068deacb6c 146 {
ladner 13:cb068deacb6c 147 if((btnLast&0x10)==(btn&0x10))
ladner 13:cb068deacb6c 148 return;
ladner 13:cb068deacb6c 149 else
ladner 13:cb068deacb6c 150 {
ladner 13:cb068deacb6c 151 if((btn&0x10)>0)
ladner 13:cb068deacb6c 152 reset();
ladner 13:cb068deacb6c 153 else
ladner 13:cb068deacb6c 154 /*DoNothing*/;
ladner 13:cb068deacb6c 155 }
ladner 13:cb068deacb6c 156 btnLast=(btnLast&(0x1F-0x10))|(btn&0x10);
ladner 13:cb068deacb6c 157 }
ladner 13:cb068deacb6c 158
ladner 13:cb068deacb6c 159 void btn1()
ladner 13:cb068deacb6c 160 {
ladner 13:cb068deacb6c 161 if((btnLast&0x01)==(btn&0x01))
ladner 13:cb068deacb6c 162 return;
ladner 13:cb068deacb6c 163 else
ladner 13:cb068deacb6c 164 {
ladner 13:cb068deacb6c 165 if((btn&0x01)>0)
ladner 13:cb068deacb6c 166 DiceStart();
ladner 13:cb068deacb6c 167 else
ladner 13:cb068deacb6c 168 DiceStop();
ladner 13:cb068deacb6c 169 }
ladner 13:cb068deacb6c 170 btnLast=(btnLast&(0x1F-0x01))|(btn&0x01);
ladner 13:cb068deacb6c 171 }
ladner 13:cb068deacb6c 172
ladner 13:cb068deacb6c 173 void btn2()
ladner 13:cb068deacb6c 174 {
ladner 13:cb068deacb6c 175 if((btnLast&0x02)==(btn&0x02))
ladner 13:cb068deacb6c 176 return;
ladner 13:cb068deacb6c 177 else
ladner 13:cb068deacb6c 178 {
ladner 13:cb068deacb6c 179 if((btn&0x02)>0)
ladner 13:cb068deacb6c 180 moveNext();
ladner 13:cb068deacb6c 181 else
ladner 13:cb068deacb6c 182 /*DoNothing*/;
ladner 13:cb068deacb6c 183 }
ladner 13:cb068deacb6c 184 btnLast=(btnLast&(0x1F-0x02))|(btn&0x02);
ladner 13:cb068deacb6c 185 }
ladner 13:cb068deacb6c 186
ladner 13:cb068deacb6c 187 void btn3()
ladner 13:cb068deacb6c 188 {
ladner 13:cb068deacb6c 189 if((btnLast&0x04)==(btn&0x04))
ladner 13:cb068deacb6c 190 return;
ladner 13:cb068deacb6c 191 else
ladner 13:cb068deacb6c 192 {
ladner 13:cb068deacb6c 193 if((btn&0x04)>0)
ladner 13:cb068deacb6c 194 moveLast();
ladner 13:cb068deacb6c 195 else
ladner 13:cb068deacb6c 196 /*DoNothing*/;
ladner 13:cb068deacb6c 197 }
ladner 13:cb068deacb6c 198 btnLast=(btnLast&(0x1F-0x04))|(btn&0x04);
ladner 13:cb068deacb6c 199 }
ladner 13:cb068deacb6c 200
ladner 13:cb068deacb6c 201 void btn4()
ladner 13:cb068deacb6c 202 {
ladner 13:cb068deacb6c 203 if((btnLast&0x08)==(btn&0x08))
ladner 13:cb068deacb6c 204 return;
ladner 13:cb068deacb6c 205 else
ladner 13:cb068deacb6c 206 {
ladner 13:cb068deacb6c 207 if((btn&0x08)>0)
ladner 13:cb068deacb6c 208 MoveDo();
ladner 13:cb068deacb6c 209 else
ladner 13:cb068deacb6c 210 /*DoNothing*/;
ladner 13:cb068deacb6c 211 }
ladner 13:cb068deacb6c 212 btnLast=(btnLast&(0x1F-0x08))|(btn&0x08);
ladner 13:cb068deacb6c 213 }
ladner 1:0eaa7682f7e1 214
ladner 1:0eaa7682f7e1 215 void reset()
ladner 1:0eaa7682f7e1 216 {
ladner 1:0eaa7682f7e1 217 MoveAnim.detach();
ladner 1:0eaa7682f7e1 218 DiceAnim.detach();
ladner 1:0eaa7682f7e1 219 for(char i = 0;i<Spieler*Steine;i++)
ladner 1:0eaa7682f7e1 220 PlayPos[i]=i%4;
ladner 13:cb068deacb6c 221 for (char i = 0; i < Spieler; i++)
ladner 13:cb068deacb6c 222 last[i]=0;
ladner 1:0eaa7682f7e1 223 Drann=0;
ladner 1:0eaa7682f7e1 224 diceEn=0;
ladner 2:3a90b20958ff 225 myled = myled&0xF0F;
ladner 1:0eaa7682f7e1 226 DicePrint();
ladner 1:0eaa7682f7e1 227 rgb.set_RGB(0);
ladner 1:0eaa7682f7e1 228 FieldGenerate();
ladner 1:0eaa7682f7e1 229 FieldPrint();
ladner 1:0eaa7682f7e1 230 FeldPrint();
ladner 1:0eaa7682f7e1 231 }
ladner 1:0eaa7682f7e1 232
ladner 1:0eaa7682f7e1 233 void Control()
ladner 1:0eaa7682f7e1 234 {
ladner 1:0eaa7682f7e1 235 while(port.readable ())
ladner 0:e97a6a69fe4b 236 {
ladner 1:0eaa7682f7e1 237 char message = port.getc();
ladner 1:0eaa7682f7e1 238 switch(message)
ladner 1:0eaa7682f7e1 239 {
ladner 1:0eaa7682f7e1 240 case '1':
ladner 1:0eaa7682f7e1 241 setDice(1);
ladner 1:0eaa7682f7e1 242 break;
ladner 1:0eaa7682f7e1 243 case '2':
ladner 1:0eaa7682f7e1 244 setDice(2);
ladner 1:0eaa7682f7e1 245 break;
ladner 1:0eaa7682f7e1 246 case '3':
ladner 1:0eaa7682f7e1 247 setDice(3);
ladner 1:0eaa7682f7e1 248 break;
ladner 1:0eaa7682f7e1 249 case '4':
ladner 1:0eaa7682f7e1 250 setDice(4);
ladner 1:0eaa7682f7e1 251 break;
ladner 1:0eaa7682f7e1 252 case '5':
ladner 1:0eaa7682f7e1 253 setDice(5);
ladner 1:0eaa7682f7e1 254 break;
ladner 1:0eaa7682f7e1 255 case '6':
ladner 1:0eaa7682f7e1 256 setDice(6);
ladner 1:0eaa7682f7e1 257 break;
ladner 1:0eaa7682f7e1 258 case '7':
ladner 1:0eaa7682f7e1 259 setDice(7);
ladner 1:0eaa7682f7e1 260 break;
ladner 1:0eaa7682f7e1 261 case 'A':
ladner 1:0eaa7682f7e1 262 DiceStart();
ladner 1:0eaa7682f7e1 263 break;
ladner 1:0eaa7682f7e1 264 case 'a':
ladner 1:0eaa7682f7e1 265 DiceStop();
ladner 1:0eaa7682f7e1 266 break;
ladner 1:0eaa7682f7e1 267 case 'B':
ladner 1:0eaa7682f7e1 268 moveNext();
ladner 1:0eaa7682f7e1 269 break;
ladner 1:0eaa7682f7e1 270 case 'C':
ladner 1:0eaa7682f7e1 271 moveLast();
ladner 1:0eaa7682f7e1 272 break;
ladner 1:0eaa7682f7e1 273 case 'D':
ladner 1:0eaa7682f7e1 274 MoveDo();
ladner 1:0eaa7682f7e1 275 break;
ladner 13:cb068deacb6c 276 case 'E':
ladner 13:cb068deacb6c 277 exit();
ladner 13:cb068deacb6c 278 break;
ladner 13:cb068deacb6c 279 case 'F':
ladner 13:cb068deacb6c 280 up();
ladner 13:cb068deacb6c 281 break;
ladner 13:cb068deacb6c 282 case 'G':
ladner 13:cb068deacb6c 283 down();
ladner 13:cb068deacb6c 284 break;
ladner 13:cb068deacb6c 285 case 'H':
ladner 13:cb068deacb6c 286 accept();
ladner 13:cb068deacb6c 287 break;
ladner 1:0eaa7682f7e1 288 case 'I':
ladner 13:cb068deacb6c 289 depth=0;
ladner 13:cb068deacb6c 290 mSelected[0]=0;
ladner 13:cb068deacb6c 291 print_default();
ladner 13:cb068deacb6c 292 mDiceEn=5;
ladner 13:cb068deacb6c 293 reset();
ladner 1:0eaa7682f7e1 294 break;
ladner 1:0eaa7682f7e1 295 }
ladner 0:e97a6a69fe4b 296 }
ladner 0:e97a6a69fe4b 297 }
ladner 0:e97a6a69fe4b 298
ladner 1:0eaa7682f7e1 299 int main()
ladner 0:e97a6a69fe4b 300 {
ladner 1:0eaa7682f7e1 301 Random.start();
ladner 1:0eaa7682f7e1 302 //Random.stop();
ladner 1:0eaa7682f7e1 303 //Random.read_us();
ladner 1:0eaa7682f7e1 304
ladner 1:0eaa7682f7e1 305 //Ticker:
ladner 1:0eaa7682f7e1 306 //.attach(&main,[sek]);
ladner 1:0eaa7682f7e1 307 //.attach_us(&main,[micro-sec]);
ladner 1:0eaa7682f7e1 308 //.detach();
ladner 13:cb068deacb6c 309 Button0.mode(PullDown);
ladner 13:cb068deacb6c 310 Button1.mode(PullDown);
ladner 13:cb068deacb6c 311 Button2.mode(PullDown);
ladner 13:cb068deacb6c 312 Button3.mode(PullDown);
ladner 13:cb068deacb6c 313 Button4.mode(PullDown);
ladner 1:0eaa7682f7e1 314
ladner 13:cb068deacb6c 315 DD_A.mode(PullDown);
ladner 13:cb068deacb6c 316 DD_B.mode(PullDown);
ladner 13:cb068deacb6c 317 DD_C.mode(PullDown);
ladner 13:cb068deacb6c 318
ladner 13:cb068deacb6c 319 wait(0.01);
ladner 13:cb068deacb6c 320
ladner 13:cb068deacb6c 321 DD_A.rise(&dreh);
ladner 13:cb068deacb6c 322 DD_A.fall(&dreh);
ladner 13:cb068deacb6c 323 DD_B.rise(&dreh);
ladner 13:cb068deacb6c 324 DD_B.fall(&dreh);
ladner 13:cb068deacb6c 325 DD_C.rise(&druck);
ladner 13:cb068deacb6c 326 DD_C.fall(&druck);
ladner 13:cb068deacb6c 327 DD_last = DD;
ladner 13:cb068deacb6c 328 DD_d=DD_D;
ladner 13:cb068deacb6c 329
ladner 1:0eaa7682f7e1 330 Button0.rise(&reset);
ladner 13:cb068deacb6c 331 Button1.rise(&btn1);
ladner 13:cb068deacb6c 332 Button1.fall(&btn1);
ladner 1:0eaa7682f7e1 333 Button2.rise(&btn2);
ladner 13:cb068deacb6c 334 Button2.fall(&btn2);
ladner 1:0eaa7682f7e1 335 Button3.rise(&btn3);
ladner 13:cb068deacb6c 336 Button3.fall(&btn3);
ladner 1:0eaa7682f7e1 337 Button4.rise(&btn4);
ladner 13:cb068deacb6c 338 Button4.fall(&btn4);
ladner 13:cb068deacb6c 339
ladner 1:0eaa7682f7e1 340 //myled = 0xFFF;
ladner 1:0eaa7682f7e1 341 port.baud(76800);
ladner 1:0eaa7682f7e1 342 port.format(8,Serial::None, 1);
ladner 1:0eaa7682f7e1 343 port.attach(&Control);
ladner 4:2acb70f9cd22 344 /*
ladner 13:cb068deacb6c 345 Farben[0]=0x00FF00;//Rot
ladner 13:cb068deacb6c 346 Farben[1]=0xFF0000;//Blau
ladner 13:cb068deacb6c 347 Farben[2]=0x0000FF;//Grun
ladner 13:cb068deacb6c 348 Farben[3]=0x00FFFF;//Gelb
ladner 13:cb068deacb6c 349 Background = 0; //Schwarz
ladner 13:cb068deacb6c 350 DiseC = 0x00FF00; //Rot
ladner 4:2acb70f9cd22 351 */
ladner 13:cb068deacb6c 352 Farben[0]=0x000800;//Rot
ladner 13:cb068deacb6c 353 Farben[1]=0x080000;//Blau
ladner 13:cb068deacb6c 354 Farben[2]=0x000008;//Grun
ladner 13:cb068deacb6c 355 Farben[3]=0x000808;//Gelb
ladner 13:cb068deacb6c 356 Background = 0; //Schwarz
ladner 13:cb068deacb6c 357 DiseC = 0x000800; //Rot
ladner 13:cb068deacb6c 358 /*
ladner 13:cb068deacb6c 359 Farben[0]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 360 Farben[1]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 361 Farben[2]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 362 Farben[3]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 363 Background = 0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 364 DiseC = 0xFFFFFF; //Weiß
ladner 13:cb068deacb6c 365 */
ladner 13:cb068deacb6c 366
ladner 1:0eaa7682f7e1 367 __disable_irq();
ladner 1:0eaa7682f7e1 368 for(char i = 0;i<Spieler;i++)
ladner 1:0eaa7682f7e1 369 {
ladner 1:0eaa7682f7e1 370 Feld.WriteLed(Farben[i]);
ladner 1:0eaa7682f7e1 371 for(char j = 0;j<Feldgrose-1;j++)
ladner 13:cb068deacb6c 372 if((j==(Feldgrose-2))&(i==(Spieler-1)))
ladner 13:cb068deacb6c 373 Feld.WriteLed(0xFFFFFF);
ladner 13:cb068deacb6c 374 else
ladner 13:cb068deacb6c 375 Feld.WriteLed(Background);
ladner 1:0eaa7682f7e1 376 }
ladner 1:0eaa7682f7e1 377 __enable_irq();
ladner 13:cb068deacb6c 378 //reset();
ladner 13:cb068deacb6c 379 print_default();
ladner 1:0eaa7682f7e1 380 while(1) ;
ladner 0:e97a6a69fe4b 381 }
ladner 0:e97a6a69fe4b 382
ladner 1:0eaa7682f7e1 383 void DiceStart()
ladner 1:0eaa7682f7e1 384 {
ladner 1:0eaa7682f7e1 385 if(diceEn==0)
ladner 1:0eaa7682f7e1 386 {
ladner 13:cb068deacb6c 387 RandomDice.start();
ladner 1:0eaa7682f7e1 388 DiceAnim.attach(&DiceRun,0.1);
ladner 1:0eaa7682f7e1 389 diceEn = 1;
ladner 1:0eaa7682f7e1 390 diceTick = 1;
ladner 1:0eaa7682f7e1 391 DicePrint();
ladner 1:0eaa7682f7e1 392 }
ladner 1:0eaa7682f7e1 393 }
ladner 13:cb068deacb6c 394
ladner 1:0eaa7682f7e1 395 void DiceStop()
ladner 0:e97a6a69fe4b 396 {
ladner 1:0eaa7682f7e1 397 if(diceEn==1)
ladner 1:0eaa7682f7e1 398 {
ladner 13:cb068deacb6c 399 if(RandomDice.read_us()> 200)
ladner 1:0eaa7682f7e1 400 {
ladner 1:0eaa7682f7e1 401 DiceAnim.detach();
ladner 1:0eaa7682f7e1 402 diceEn = 2;
ladner 1:0eaa7682f7e1 403 diceTick = 0;
ladner 1:0eaa7682f7e1 404 diceNum = Random.read_us()%7;
ladner 13:cb068deacb6c 405 diceNum = (RandomDice.read_us()+diceNum)%7+1;
ladner 13:cb068deacb6c 406 RandomDice.stop();
ladner 13:cb068deacb6c 407 RandomDice.reset();
ladner 13:cb068deacb6c 408 if(diceNum>=7)
ladner 13:cb068deacb6c 409 DiceCal();
ladner 13:cb068deacb6c 410 //port.printf("LDiceNum:%d\n",diceNum);
ladner 1:0eaa7682f7e1 411 DicePrint();
ladner 1:0eaa7682f7e1 412 GameCal();
ladner 1:0eaa7682f7e1 413 }
ladner 1:0eaa7682f7e1 414 }
ladner 1:0eaa7682f7e1 415 }
ladner 13:cb068deacb6c 416
ladner 13:cb068deacb6c 417 void DiceCal()
ladner 13:cb068deacb6c 418 {
ladner 13:cb068deacb6c 419 if((diceEn==2)||(diceEn==3))
ladner 13:cb068deacb6c 420 {
ladner 13:cb068deacb6c 421 if(diceNum>7)
ladner 13:cb068deacb6c 422 diceNum=7;
ladner 13:cb068deacb6c 423 if(diceNum==7)
ladner 13:cb068deacb6c 424 {
ladner 13:cb068deacb6c 425 diceEn=3;
ladner 13:cb068deacb6c 426 for(char i = 0;i<Steine;i++)
ladner 13:cb068deacb6c 427 if((PlayPos[(Drann<<2)|i]>3)&&(PlayPos[(Drann<<2)|i] < 44))
ladner 13:cb068deacb6c 428 for(char j = 1;j<=6;j++)
ladner 13:cb068deacb6c 429 {
ladner 13:cb068deacb6c 430 char temp = Field[(PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+j) % (Feldgrose*Steine)];
ladner 13:cb068deacb6c 431 if(temp>0)
ladner 13:cb068deacb6c 432 {
ladner 13:cb068deacb6c 433 temp--; //(Spieler<<2)|Stein
ladner 13:cb068deacb6c 434 temp = (temp&0xC)>>2;//Spieler
ladner 13:cb068deacb6c 435 if(temp!=Drann)
ladner 13:cb068deacb6c 436 if(j<diceNum)
ladner 13:cb068deacb6c 437 diceNum=j;
ladner 13:cb068deacb6c 438 }
ladner 13:cb068deacb6c 439 }
ladner 13:cb068deacb6c 440 //PlayPos[(Drann<<2)|i] im Feld suchen, weiter setzen, wenn treffer, der kleiner als diceNum ->setzen von diceNum
ladner 13:cb068deacb6c 441 }//DiceNum == 7
ladner 13:cb068deacb6c 442 if(diceNum==7)
ladner 13:cb068deacb6c 443 diceNum=6;
ladner 13:cb068deacb6c 444 //port.printf("LdiceNum:%d\n",diceNum);
ladner 13:cb068deacb6c 445 }
ladner 13:cb068deacb6c 446 }
ladner 13:cb068deacb6c 447
ladner 1:0eaa7682f7e1 448 void setDice(char number)
ladner 1:0eaa7682f7e1 449 {
ladner 13:cb068deacb6c 450 if(diceEn==4)
ladner 1:0eaa7682f7e1 451 {
ladner 13:cb068deacb6c 452 port.printf("LWarning: diceEn:%d -> Game over\n",diceEn);
ladner 1:0eaa7682f7e1 453 }
ladner 13:cb068deacb6c 454 else if(diceEn<4)
ladner 1:0eaa7682f7e1 455 {
ladner 13:cb068deacb6c 456 port.printf("LdiceEn:%d\n",diceEn);
ladner 13:cb068deacb6c 457 if(diceEn==1)
ladner 13:cb068deacb6c 458 {
ladner 13:cb068deacb6c 459 DiceAnim.detach();
ladner 13:cb068deacb6c 460 diceTick = 0;
ladner 13:cb068deacb6c 461 RandomDice.stop();
ladner 13:cb068deacb6c 462 RandomDice.reset();
ladner 13:cb068deacb6c 463 }
ladner 13:cb068deacb6c 464 diceEn = 2;
ladner 13:cb068deacb6c 465 diceNum = number;
ladner 13:cb068deacb6c 466 if(diceNum>=7)
ladner 13:cb068deacb6c 467 DiceCal();
ladner 13:cb068deacb6c 468 //port.printf("LForceDice:%d\n",diceNum);
ladner 13:cb068deacb6c 469 DicePrint();
ladner 13:cb068deacb6c 470 GameCal();
ladner 13:cb068deacb6c 471 }
ladner 1:0eaa7682f7e1 472 }
ladner 13:cb068deacb6c 473
ladner 1:0eaa7682f7e1 474 void DiceRun()
ladner 1:0eaa7682f7e1 475 {
ladner 1:0eaa7682f7e1 476 if(diceTick)
ladner 1:0eaa7682f7e1 477 {
ladner 1:0eaa7682f7e1 478 diceTick=0;
ladner 1:0eaa7682f7e1 479 if(dicePos<7)
ladner 1:0eaa7682f7e1 480 dicePos++;
ladner 1:0eaa7682f7e1 481 else
ladner 1:0eaa7682f7e1 482 dicePos=0;
ladner 1:0eaa7682f7e1 483 }
ladner 1:0eaa7682f7e1 484 else
ladner 1:0eaa7682f7e1 485 diceTick=1;
ladner 1:0eaa7682f7e1 486 DicePrint();
ladner 0:e97a6a69fe4b 487 }
ladner 0:e97a6a69fe4b 488
ladner 1:0eaa7682f7e1 489 void DicePrint()
ladner 0:e97a6a69fe4b 490 {
ladner 1:0eaa7682f7e1 491 switch(diceEn)
ladner 1:0eaa7682f7e1 492 {
ladner 13:cb068deacb6c 493 case 0: //Schwarz & Drann überschreiben...
ladner 1:0eaa7682f7e1 494 myled=(myled&0xFF0);
ladner 13:cb068deacb6c 495 myled=(myled&0x0FF)|(0x100<<Drann);
ladner 1:0eaa7682f7e1 496 port.printf("W%c%c\n",27,27);
ladner 1:0eaa7682f7e1 497 break;
ladner 13:cb068deacb6c 498 case 1: //Animation
ladner 1:0eaa7682f7e1 499 char dice_help = 0xFF-(1<<dicePos);
ladner 1:0eaa7682f7e1 500 myled=(myled&0xFF0)|(5)|(diceTick<<1);
ladner 1:0eaa7682f7e1 501 //myled = (myled&0xF)|(dice_help<<4);
ladner 1:0eaa7682f7e1 502
ladner 1:0eaa7682f7e1 503 port.printf("W%c%c\n" , 27 + diceTick+((dice_help&0x1F)<<1),27 + ((dice_help& 0xE0)>>5));
ladner 1:0eaa7682f7e1 504 break;
ladner 13:cb068deacb6c 505 case 2://Case 3 = Case 2 ->Anzeigen
ladner 1:0eaa7682f7e1 506 myled=(myled&0xFF0)|(diceNum);
ladner 1:0eaa7682f7e1 507 //myled=myled|0xFF0;
ladner 1:0eaa7682f7e1 508
ladner 1:0eaa7682f7e1 509 port.printf("W%c%c\n" , 27 +(diceDecode[diceNum-1]&0x3F),27 + ((diceDecode[diceNum-1]&0x1C0)>>6));
ladner 1:0eaa7682f7e1 510 break;
ladner 1:0eaa7682f7e1 511 case 3:
ladner 1:0eaa7682f7e1 512 myled=(myled&0xFF0)|(diceNum)|8;
ladner 1:0eaa7682f7e1 513 //myled=myled|0xFF0;
ladner 1:0eaa7682f7e1 514
ladner 1:0eaa7682f7e1 515 port.printf("W%c%c\n" , 27 +(diceDecode[diceNum-1]&0x3F),27 + ((diceDecode[diceNum-1]&0x1C0)>>6));
ladner 1:0eaa7682f7e1 516 break;
ladner 13:cb068deacb6c 517 case 4://Spiel beendet! Animation?
ladner 13:cb068deacb6c 518 myled=(myled&0xFF0);
ladner 13:cb068deacb6c 519 port.printf("W%c%c\n",27,27);
ladner 13:cb068deacb6c 520 break;
ladner 13:cb068deacb6c 521 case 5://Menu
ladner 13:cb068deacb6c 522 break;
ladner 1:0eaa7682f7e1 523 }
ladner 0:e97a6a69fe4b 524 }
ladner 1:0eaa7682f7e1 525
ladner 1:0eaa7682f7e1 526 void FieldGenerate()
ladner 1:0eaa7682f7e1 527 {
ladner 1:0eaa7682f7e1 528 for(char i = 0; i<Spieler*Feldgrose;i++)
ladner 1:0eaa7682f7e1 529 Field[i]=0; //Feld zurücksetzen
ladner 13:cb068deacb6c 530 for (char i = 0; i < Spieler*Steine; i++)
ladner 13:cb068deacb6c 531 {
ladner 13:cb068deacb6c 532 Ziel[i]=0;
ladner 13:cb068deacb6c 533 Start[i]=0;
ladner 13:cb068deacb6c 534 }
ladner 1:0eaa7682f7e1 535
ladner 1:0eaa7682f7e1 536 for(char i = 0; i<Spieler;i++)
ladner 1:0eaa7682f7e1 537 for(char j = 0; j<Steine;j++)
ladner 1:0eaa7682f7e1 538 {
ladner 1:0eaa7682f7e1 539 if (PlayPos[(i<<2)|j] >= Steine)
ladner 1:0eaa7682f7e1 540 {
ladner 13:cb068deacb6c 541 if (PlayPos[(i<<2)|j] >= (Spieler * Feldgrose + Steine))
ladner 1:0eaa7682f7e1 542 {
ladner 13:cb068deacb6c 543 //if (PlayPos[(i<<2)|j] < Steine * Feldgrose+Steine*2)
ladner 13:cb068deacb6c 544 Ziel[(PlayPos[(i<<2)|j] - (Spieler * Feldgrose + Steine))|(i<<2)] = ((i<<2)|j) + 1;
ladner 1:0eaa7682f7e1 545 //Ziel PlayPos[(i<<2)|j] - 44
ladner 1:0eaa7682f7e1 546 }
ladner 1:0eaa7682f7e1 547 else
ladner 1:0eaa7682f7e1 548 Field[(PlayPos[(i<<2)|j]- Steine + Feldgrose * i) % (Steine * Feldgrose)] = ((i<<2)|j) + 1;
ladner 1:0eaa7682f7e1 549 //Feld (PlayPos[(i<<2)|j]- 4 + 10 * i) % 40
ladner 1:0eaa7682f7e1 550 }
ladner 1:0eaa7682f7e1 551 else
ladner 13:cb068deacb6c 552 Start[PlayPos[(i<<2)|j]|(i<<2)] = ((i<<2)|j)+1;
ladner 1:0eaa7682f7e1 553 //start PlayPos[(i<<2)|j]
ladner 1:0eaa7682f7e1 554 }
ladner 1:0eaa7682f7e1 555 }
ladner 1:0eaa7682f7e1 556
ladner 1:0eaa7682f7e1 557 void FieldPrint()
ladner 1:0eaa7682f7e1 558 {
ladner 1:0eaa7682f7e1 559 port.printf("F");
ladner 1:0eaa7682f7e1 560 for(char i = 0;i<Spieler*Steine;i++)
ladner 1:0eaa7682f7e1 561 {
ladner 1:0eaa7682f7e1 562 port.printf("%c",27+PlayPos[i]);
ladner 1:0eaa7682f7e1 563 }
ladner 1:0eaa7682f7e1 564 port.printf("\n");
ladner 1:0eaa7682f7e1 565 }
ladner 1:0eaa7682f7e1 566
ladner 1:0eaa7682f7e1 567 void FeldPrint()
ladner 1:0eaa7682f7e1 568 {
ladner 1:0eaa7682f7e1 569 __disable_irq();
ladner 1:0eaa7682f7e1 570 for(char i = 0;i<Spieler*Feldgrose;i++)
ladner 1:0eaa7682f7e1 571 if(Field[i]>0)
ladner 1:0eaa7682f7e1 572 Feld.WriteLed(Farben[((Field[i]- 1)&0x0C)>>2]);
ladner 1:0eaa7682f7e1 573 else
ladner 13:cb068deacb6c 574 Feld.WriteLed(Background);
ladner 13:cb068deacb6c 575 //char Start[Spieler];
ladner 13:cb068deacb6c 576 //char Ziel[Spieler];
ladner 13:cb068deacb6c 577 char i = 0;
ladner 13:cb068deacb6c 578 char j = 0;
ladner 13:cb068deacb6c 579 while(i < Steine*Spieler)
ladner 13:cb068deacb6c 580 {
ladner 13:cb068deacb6c 581 if(Start[i]>0)
ladner 13:cb068deacb6c 582 Home.WriteLed(Farben[((Start[i]- 1)&0x0C)>>2]);
ladner 13:cb068deacb6c 583 else
ladner 13:cb068deacb6c 584 Home.WriteLed(Background);
ladner 13:cb068deacb6c 585 i++;
ladner 13:cb068deacb6c 586 }
ladner 13:cb068deacb6c 587 do
ladner 13:cb068deacb6c 588 {
ladner 13:cb068deacb6c 589 if(Ziel[j]>0)
ladner 13:cb068deacb6c 590 Home.WriteLed(Farben[((Ziel[j]- 1)&0x0C)>>2]);
ladner 13:cb068deacb6c 591 else
ladner 13:cb068deacb6c 592 Home.WriteLed(Background);
ladner 13:cb068deacb6c 593 j++;
ladner 13:cb068deacb6c 594 }while(j < Steine*Spieler);
ladner 1:0eaa7682f7e1 595 __enable_irq();
ladner 0:e97a6a69fe4b 596 }
ladner 1:0eaa7682f7e1 597
ladner 13:cb068deacb6c 598 void AnimCal()
ladner 13:cb068deacb6c 599 {
ladner 13:cb068deacb6c 600 for(char i = 0; i<Spieler*Feldgrose;i++)
ladner 13:cb068deacb6c 601 AnimField[i]=0; //Feld zurücksetzen
ladner 13:cb068deacb6c 602 for (char i = 0; i < Spieler*Steine; i++)
ladner 13:cb068deacb6c 603 {
ladner 13:cb068deacb6c 604 AnimZiel[i]=0;
ladner 13:cb068deacb6c 605 AnimStart[i]=0;
ladner 13:cb068deacb6c 606 }
ladner 13:cb068deacb6c 607 AnimDo=0;//Feld_Animieren,Start Animieren, Ziel Animieren
ladner 13:cb068deacb6c 608
ladner 13:cb068deacb6c 609 //char AnimDo; //Feld_Animieren,Start Animieren, Ziel Animierenw
ladner 1:0eaa7682f7e1 610
ladner 13:cb068deacb6c 611 for (char i = 0; i < Spieler*Steine; i++) //Hauptschleife
ladner 13:cb068deacb6c 612 if(i==((Drann<<2)|selected))
ladner 13:cb068deacb6c 613 {
ladner 13:cb068deacb6c 614 if(moglich[selected]==1)
ladner 13:cb068deacb6c 615 {
ladner 13:cb068deacb6c 616 if(PlayPos[i]<Steine) //nicht Draußsen
ladner 13:cb068deacb6c 617 {
ladner 13:cb068deacb6c 618 AnimDo = AnimDo|3;//Feld&Start
ladner 13:cb068deacb6c 619 AnimPos[i] = Steine; //Ausfahren
ladner 13:cb068deacb6c 620 char temp = Field[Drann*Feldgrose]; //Ansetzfeld wird analysiert
ladner 13:cb068deacb6c 621 if(temp>0)
ladner 13:cb068deacb6c 622 {
ladner 13:cb068deacb6c 623 //myled = myled|temp<<8;
ladner 13:cb068deacb6c 624 temp--; //(Spieler<<2)|Stein
ladner 13:cb068deacb6c 625 AnimPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 13:cb068deacb6c 626 }
ladner 13:cb068deacb6c 627 }
ladner 13:cb068deacb6c 628 else //Draußen
ladner 13:cb068deacb6c 629 {
ladner 13:cb068deacb6c 630 AnimDo = AnimDo|1; //Feld
ladner 13:cb068deacb6c 631 AnimPos[i] = PlayPos[i]+diceNum;; //Weitersetzen
ladner 13:cb068deacb6c 632 //PlayPos[(Drann<<2)|selected]
ladner 13:cb068deacb6c 633 if(AnimPos[i]<Steine+Spieler*Feldgrose) //noch nicht drinnen
ladner 13:cb068deacb6c 634 {
ladner 13:cb068deacb6c 635 //Field>0
ladner 13:cb068deacb6c 636 char temp = Field[ (AnimPos[i]-Steine+Feldgrose*Drann) % (Feldgrose*Steine) ];
ladner 13:cb068deacb6c 637 if(temp>0)
ladner 13:cb068deacb6c 638 {
ladner 13:cb068deacb6c 639 AnimDo = AnimDo|3;//Feld&Start
ladner 13:cb068deacb6c 640 //myled = myled|temp<<8;
ladner 13:cb068deacb6c 641 temp--; //(Spieler<<2)|Stein
ladner 13:cb068deacb6c 642 AnimPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 13:cb068deacb6c 643 }
ladner 13:cb068deacb6c 644 }
ladner 13:cb068deacb6c 645 else
ladner 13:cb068deacb6c 646 AnimDo=AnimDo|7;//Feld&Ziel (Start auch wegen Hardware)
ladner 13:cb068deacb6c 647 }
ladner 13:cb068deacb6c 648 }
ladner 13:cb068deacb6c 649 else
ladner 13:cb068deacb6c 650 AnimPos[i] = PlayPos[i]; //Spieler-pos Kopieren, weil es nicht möglich ist...
ladner 13:cb068deacb6c 651 }
ladner 13:cb068deacb6c 652 else
ladner 13:cb068deacb6c 653 AnimPos[i] = PlayPos[i]; //Spieler-pos Kopieren
ladner 13:cb068deacb6c 654 //FieldGenerate -> Anim...
ladner 13:cb068deacb6c 655 for(char i = 0; i<Spieler;i++)
ladner 13:cb068deacb6c 656 for(char j = 0; j<Steine;j++)
ladner 13:cb068deacb6c 657 {
ladner 13:cb068deacb6c 658 if (AnimPos[(i<<2)|j] >= Steine)
ladner 13:cb068deacb6c 659 {
ladner 13:cb068deacb6c 660 if (AnimPos[(i<<2)|j] >= (Spieler * Feldgrose + Steine))
ladner 13:cb068deacb6c 661 {
ladner 13:cb068deacb6c 662 //if (AnimPos[(i<<2)|j] < Steine * Feldgrose+Steine*2)
ladner 13:cb068deacb6c 663 AnimZiel[(AnimPos[(i<<2)|j] - (Spieler * Feldgrose + Steine))|(i<<2)] = ((i<<2)|j) + 1;
ladner 13:cb068deacb6c 664 //AnimZiel AnimPos[(i<<2)|j] - 44
ladner 13:cb068deacb6c 665 }
ladner 13:cb068deacb6c 666 else
ladner 13:cb068deacb6c 667 AnimField[(AnimPos[(i<<2)|j]- Steine + Feldgrose * i) % (Steine * Feldgrose)] = ((i<<2)|j) + 1;
ladner 13:cb068deacb6c 668 //Feld (AnimPos[(i<<2)|j]- 4 + 10 * i) % 40
ladner 13:cb068deacb6c 669 }
ladner 13:cb068deacb6c 670 else
ladner 13:cb068deacb6c 671 AnimStart[AnimPos[(i<<2)|j]|(i<<2)] = ((i<<2)|j)+1;
ladner 13:cb068deacb6c 672 //start AnimPos[(i<<2)|j]
ladner 13:cb068deacb6c 673 }
ladner 13:cb068deacb6c 674 }
ladner 13:cb068deacb6c 675
ladner 13:cb068deacb6c 676 void MoveRun() //Animation (zyklisch)
ladner 0:e97a6a69fe4b 677 {
ladner 1:0eaa7682f7e1 678 if(MoveShow)
ladner 13:cb068deacb6c 679 MoveShow = 0;
ladner 1:0eaa7682f7e1 680 else
ladner 1:0eaa7682f7e1 681 MoveShow = 1;
ladner 13:cb068deacb6c 682
ladner 1:0eaa7682f7e1 683 if(MoveShow>0)
ladner 0:e97a6a69fe4b 684 {
ladner 1:0eaa7682f7e1 685 port.printf("F");
ladner 1:0eaa7682f7e1 686 for(char i = 0;i<Spieler*Steine;i++)
ladner 13:cb068deacb6c 687 {
ladner 13:cb068deacb6c 688 port.printf("%c",27+AnimPos[i]);
ladner 13:cb068deacb6c 689 }
ladner 13:cb068deacb6c 690 port.printf("\n");
ladner 13:cb068deacb6c 691
ladner 13:cb068deacb6c 692 __disable_irq();
ladner 13:cb068deacb6c 693 if((AnimDo&1)>0)
ladner 13:cb068deacb6c 694 {
ladner 13:cb068deacb6c 695 for(char i = 0;i<Spieler*Feldgrose;i++)
ladner 13:cb068deacb6c 696 if(AnimField[i]>0)
ladner 13:cb068deacb6c 697 Feld.WriteLed(Farben[((AnimField[i]- 1)&0x0C)>>2]);
ladner 13:cb068deacb6c 698 else
ladner 13:cb068deacb6c 699 Feld.WriteLed(Background);
ladner 13:cb068deacb6c 700 }
ladner 13:cb068deacb6c 701 //char Start[Spieler];
ladner 13:cb068deacb6c 702 //char Ziel[Spieler];
ladner 13:cb068deacb6c 703 char i = 0;
ladner 13:cb068deacb6c 704 char j = 0;
ladner 13:cb068deacb6c 705 if((AnimDo&2)>0)
ladner 13:cb068deacb6c 706 {
ladner 13:cb068deacb6c 707 while(i < Steine*Spieler)
ladner 1:0eaa7682f7e1 708 {
ladner 13:cb068deacb6c 709 if(AnimStart[i]>0)
ladner 13:cb068deacb6c 710 Home.WriteLed(Farben[((AnimStart[i]- 1)&0x0C)>>2]);
ladner 1:0eaa7682f7e1 711 else
ladner 13:cb068deacb6c 712 Home.WriteLed(Background);
ladner 13:cb068deacb6c 713 i++;
ladner 1:0eaa7682f7e1 714 }
ladner 13:cb068deacb6c 715 }
ladner 13:cb068deacb6c 716 if((AnimDo&4)>0)
ladner 13:cb068deacb6c 717 {
ladner 13:cb068deacb6c 718 do
ladner 13:cb068deacb6c 719 {
ladner 13:cb068deacb6c 720 if(AnimZiel[j]>0)
ladner 13:cb068deacb6c 721 Home.WriteLed(Farben[((AnimZiel[j]- 1)&0x0C)>>2]);
ladner 13:cb068deacb6c 722 else
ladner 13:cb068deacb6c 723 Home.WriteLed(Background);
ladner 13:cb068deacb6c 724 j++;
ladner 13:cb068deacb6c 725 }while(j < Steine*Spieler);
ladner 13:cb068deacb6c 726 }
ladner 1:0eaa7682f7e1 727 __enable_irq();
ladner 1:0eaa7682f7e1 728 }
ladner 1:0eaa7682f7e1 729 else
ladner 13:cb068deacb6c 730 {
ladner 1:0eaa7682f7e1 731 FieldPrint();
ladner 13:cb068deacb6c 732 __disable_irq();
ladner 13:cb068deacb6c 733 if((AnimDo&1)>0)
ladner 13:cb068deacb6c 734 {
ladner 13:cb068deacb6c 735 for(char i = 0;i<Spieler*Feldgrose;i++)
ladner 13:cb068deacb6c 736 if(Field[i]>0)
ladner 13:cb068deacb6c 737 Feld.WriteLed(Farben[((Field[i]- 1)&0x0C)>>2]);
ladner 13:cb068deacb6c 738 else
ladner 13:cb068deacb6c 739 Feld.WriteLed(Background);
ladner 13:cb068deacb6c 740 }
ladner 13:cb068deacb6c 741 //char Start[Spieler];
ladner 13:cb068deacb6c 742 //char Ziel[Spieler];
ladner 13:cb068deacb6c 743 char i = 0;
ladner 13:cb068deacb6c 744 char j = 0;
ladner 13:cb068deacb6c 745 if((AnimDo&2)>0)
ladner 13:cb068deacb6c 746 {
ladner 13:cb068deacb6c 747 while(i < Steine*Spieler)
ladner 13:cb068deacb6c 748 {
ladner 13:cb068deacb6c 749 if(Start[i]>0)
ladner 13:cb068deacb6c 750 Home.WriteLed(Farben[((Start[i]- 1)&0x0C)>>2]);
ladner 13:cb068deacb6c 751 else
ladner 13:cb068deacb6c 752 Home.WriteLed(Background);
ladner 13:cb068deacb6c 753 i++;
ladner 13:cb068deacb6c 754 }
ladner 13:cb068deacb6c 755 }
ladner 13:cb068deacb6c 756 if((AnimDo&4)>0)
ladner 13:cb068deacb6c 757 {
ladner 13:cb068deacb6c 758 do
ladner 13:cb068deacb6c 759 {
ladner 13:cb068deacb6c 760 if(Ziel[j]>0)
ladner 13:cb068deacb6c 761 Home.WriteLed(Farben[((Ziel[j]- 1)&0x0C)>>2]);
ladner 13:cb068deacb6c 762 else
ladner 13:cb068deacb6c 763 Home.WriteLed(Background);
ladner 13:cb068deacb6c 764 j++;
ladner 13:cb068deacb6c 765 }while(j < Steine*Spieler);
ladner 13:cb068deacb6c 766 }
ladner 13:cb068deacb6c 767 __enable_irq();
ladner 13:cb068deacb6c 768 }
ladner 1:0eaa7682f7e1 769 }
ladner 1:0eaa7682f7e1 770
ladner 1:0eaa7682f7e1 771 void moveNext()
ladner 1:0eaa7682f7e1 772 {
ladner 1:0eaa7682f7e1 773 selected = (selected+1)%Steine;
ladner 1:0eaa7682f7e1 774 for(char i = 0;i<Steine;i++)
ladner 1:0eaa7682f7e1 775 if(moglich[selected]>0)
ladner 1:0eaa7682f7e1 776 break;
ladner 1:0eaa7682f7e1 777 else
ladner 1:0eaa7682f7e1 778 selected = (selected+1)%Steine;
ladner 13:cb068deacb6c 779 AnimCal();
ladner 1:0eaa7682f7e1 780 }
ladner 1:0eaa7682f7e1 781
ladner 1:0eaa7682f7e1 782 void moveLast()
ladner 1:0eaa7682f7e1 783 {
ladner 1:0eaa7682f7e1 784 selected = (selected+3)%Steine;
ladner 1:0eaa7682f7e1 785 for(char i = 0;i<Steine;i++)
ladner 1:0eaa7682f7e1 786 if(moglich[selected]>0)
ladner 1:0eaa7682f7e1 787 break;
ladner 1:0eaa7682f7e1 788 else
ladner 1:0eaa7682f7e1 789 selected = (selected+3)%Steine;
ladner 13:cb068deacb6c 790 AnimCal();
ladner 1:0eaa7682f7e1 791 }
ladner 1:0eaa7682f7e1 792
ladner 1:0eaa7682f7e1 793 void GameCal()
ladner 1:0eaa7682f7e1 794 {
ladner 1:0eaa7682f7e1 795 char drausen = 0; //Ziel
ladner 1:0eaa7682f7e1 796 char feld = 0;
ladner 1:0eaa7682f7e1 797 char drinnen = 0; //start
ladner 2:3a90b20958ff 798 char moglichAny = 1;
ladner 1:0eaa7682f7e1 799 for(char i = 0;i<Steine;i++)
ladner 1:0eaa7682f7e1 800 {
ladner 13:cb068deacb6c 801 if(PlayPos[(Drann<<2)|i]>=Steine)
ladner 0:e97a6a69fe4b 802 {
ladner 13:cb068deacb6c 803 if(PlayPos[(Drann<<2)|i] >= (Steine+Spieler*Feldgrose))
ladner 1:0eaa7682f7e1 804 drausen++;
ladner 1:0eaa7682f7e1 805 else
ladner 1:0eaa7682f7e1 806 feld++;
ladner 0:e97a6a69fe4b 807 }
ladner 1:0eaa7682f7e1 808 else
ladner 1:0eaa7682f7e1 809 drinnen++;
ladner 1:0eaa7682f7e1 810 moglich[i]=0;
ladner 1:0eaa7682f7e1 811 }
ladner 1:0eaa7682f7e1 812 //Berechnung
ladner 2:3a90b20958ff 813 //Ausfahren:
ladner 2:3a90b20958ff 814 //drinnen >0 (Noch Spieler drinnen?)
ladner 2:3a90b20958ff 815 //Startfeld ist von Spieler belegt
ladner 2:3a90b20958ff 816 //Ziel ist frei
ladner 2:3a90b20958ff 817 if((drinnen>0)&&(moglichAny))
ladner 2:3a90b20958ff 818 {
ladner 4:2acb70f9cd22 819 //port.printf("LDrinnen\n");
ladner 2:3a90b20958ff 820 if(((((Field[Feldgrose*Drann]-1) &0x0C) >>2)==Drann)&&(Field[Feldgrose*Drann]>0))
ladner 2:3a90b20958ff 821 {
ladner 4:2acb70f9cd22 822 //port.printf("LAusfahrt Belegt\n");
ladner 2:3a90b20958ff 823 if(((((Field[(Feldgrose*Drann+diceNum)%(Feldgrose*Spieler)]-1) &0x0C) >>2)!=Drann)||(Field[(Feldgrose*Drann+diceNum)%(Feldgrose*Spieler)]==0))
ladner 2:3a90b20958ff 824 {
ladner 4:2acb70f9cd22 825 //port.printf("LZiel frei (Done)\n");
ladner 2:3a90b20958ff 826 moglich[(Field[Feldgrose*Drann]-1) &0x03] = 1;
ladner 2:3a90b20958ff 827 moglichAny=0;
ladner 2:3a90b20958ff 828 }
ladner 2:3a90b20958ff 829 }
ladner 0:e97a6a69fe4b 830 }
ladner 2:3a90b20958ff 831
ladner 2:3a90b20958ff 832 //Ansetzen
ladner 2:3a90b20958ff 833 // 6 gewürfelt
ladner 2:3a90b20958ff 834 //drinnen>0
ladner 2:3a90b20958ff 835 //Start-feld ist nicht von Spieler belegt
ladner 2:3a90b20958ff 836 if((drinnen>0)&&(moglichAny)&&(diceNum==6))
ladner 0:e97a6a69fe4b 837 {
ladner 4:2acb70f9cd22 838 //port.printf("LDrinnen & 6 \n");
ladner 2:3a90b20958ff 839 if(((((Field[Feldgrose*Drann]-1) &0x0C) >>2)!=Drann)||(Field[Feldgrose*Drann]==0))
ladner 1:0eaa7682f7e1 840 {
ladner 4:2acb70f9cd22 841 //port.printf("LAusfahrt frei (Done...Schleife)\n");
ladner 2:3a90b20958ff 842 moglichAny=0;
ladner 1:0eaa7682f7e1 843 for(char i = 0;i<Steine;i++)
ladner 1:0eaa7682f7e1 844 if(PlayPos[(Drann<<2)|i]<Steine)
ladner 1:0eaa7682f7e1 845 moglich[i]=1;
ladner 1:0eaa7682f7e1 846 }
ladner 2:3a90b20958ff 847 }
ladner 2:3a90b20958ff 848
ladner 2:3a90b20958ff 849 //Fahren
ladner 2:3a90b20958ff 850 if(moglichAny)
ladner 2:3a90b20958ff 851 {
ladner 4:2acb70f9cd22 852 //port.printf("LNormal...\n");
ladner 2:3a90b20958ff 853 for(char i = 0;i<Steine;i++)
ladner 0:e97a6a69fe4b 854 {
ladner 13:cb068deacb6c 855 if(PlayPos[(Drann<<2)|i]>=Spieler) //Drausen
ladner 1:0eaa7682f7e1 856 {
ladner 13:cb068deacb6c 857 if((PlayPos[(Drann<<2)|i]+diceNum) < (Steine+Feldgrose*Spieler))//Zeil noch am Feld
ladner 1:0eaa7682f7e1 858 {
ladner 2:3a90b20958ff 859 char temp = Field[(PlayPos[(Drann<<2)|i]- Steine + Feldgrose * Drann+diceNum) % (Feldgrose*Steine)]; //zielfeld
ladner 1:0eaa7682f7e1 860 if(temp>0)
ladner 1:0eaa7682f7e1 861 {
ladner 1:0eaa7682f7e1 862 //myled = myled|temp<<8;
ladner 1:0eaa7682f7e1 863 temp--; //(Spieler<<2)|Stein
ladner 1:0eaa7682f7e1 864 temp = (temp&0xC)>>2;//Spieler
ladner 2:3a90b20958ff 865 if(temp!=Drann) //zielfeld ist nicht ich
ladner 1:0eaa7682f7e1 866 moglich[i]=1;
ladner 1:0eaa7682f7e1 867 }
ladner 2:3a90b20958ff 868 else//Feld ist leer
ladner 1:0eaa7682f7e1 869 moglich[i]=1;
ladner 1:0eaa7682f7e1 870 }
ladner 2:3a90b20958ff 871 else
ladner 2:3a90b20958ff 872 {//Kollisionsberechnung ins Ziel...
ladner 4:2acb70f9cd22 873 if((PlayPos[(Drann<<2)|i]+diceNum)<(Steine*2+ Feldgrose*Spieler))//Schiest nicht über das Ziel hinaus...
ladner 13:cb068deacb6c 874 if(Ziel[(PlayPos[(Drann<<2)|i]-(Steine+Feldgrose*Spieler)+diceNum)|(Drann<<2)]==0)//Zielfeld ist leer (enthält ja nur mich)
ladner 4:2acb70f9cd22 875 moglich[i]=1;
ladner 2:3a90b20958ff 876 }
ladner 1:0eaa7682f7e1 877 }
ladner 1:0eaa7682f7e1 878 }
ladner 1:0eaa7682f7e1 879 }
ladner 2:3a90b20958ff 880
ladner 13:cb068deacb6c 881
ladner 13:cb068deacb6c 882 //Anzeigen der Möglichkeiten & überhaupt möglich?
ladner 2:3a90b20958ff 883 moglichAny=0;
ladner 1:0eaa7682f7e1 884 myled = myled&0xF0F;
ladner 1:0eaa7682f7e1 885 for(char i = 0;i<Steine;i++)
ladner 2:3a90b20958ff 886 {
ladner 1:0eaa7682f7e1 887 myled = myled|(moglich[i]<<i+4);
ladner 1:0eaa7682f7e1 888 moglichAny = moglichAny | moglich[i];
ladner 2:3a90b20958ff 889 }
ladner 13:cb068deacb6c 890
ladner 13:cb068deacb6c 891 if(moglichAny) //Fahren möglich
ladner 1:0eaa7682f7e1 892 {
ladner 1:0eaa7682f7e1 893 selected = (last[Drann]+Steine-1)%Steine;
ladner 1:0eaa7682f7e1 894 moveNext();
ladner 1:0eaa7682f7e1 895 MoveAnim.attach(&MoveRun,0.3);
ladner 1:0eaa7682f7e1 896 }
ladner 13:cb068deacb6c 897 else //Fahren nicht möglich
ladner 1:0eaa7682f7e1 898 {
ladner 13:cb068deacb6c 899 if(feld<=0) //keine am Feld
ladner 1:0eaa7682f7e1 900 {
ladner 13:cb068deacb6c 901 if(count<2)
ladner 4:2acb70f9cd22 902 {
ladner 4:2acb70f9cd22 903 diceEn=0;
ladner 4:2acb70f9cd22 904 count++;
ladner 4:2acb70f9cd22 905 port.printf("LCount: %d\n",count);
ladner 4:2acb70f9cd22 906 }
ladner 0:e97a6a69fe4b 907 }
ladner 13:cb068deacb6c 908 else //Fahren nicht möglich,spieler am Feld & 6 gewürfelt
ladner 13:cb068deacb6c 909 {
ladner 13:cb068deacb6c 910 if(diceNum==6)
ladner 13:cb068deacb6c 911 diceEn=0;
ladner 13:cb068deacb6c 912 }
ladner 1:0eaa7682f7e1 913 }
ladner 1:0eaa7682f7e1 914 }
ladner 1:0eaa7682f7e1 915
ladner 1:0eaa7682f7e1 916 void MoveDo()
ladner 1:0eaa7682f7e1 917 {
ladner 13:cb068deacb6c 918 if((diceEn>1)&&(diceEn<4))
ladner 1:0eaa7682f7e1 919 {
ladner 13:cb068deacb6c 920 if(moglich[selected]==1)
ladner 1:0eaa7682f7e1 921 {
ladner 13:cb068deacb6c 922 if(PlayPos[(Drann<<2)|selected]<Steine) //nicht Draußsen
ladner 1:0eaa7682f7e1 923 {
ladner 13:cb068deacb6c 924 PlayPos[(Drann<<2)|selected] = Steine; //Ausfahren
ladner 13:cb068deacb6c 925 char temp = Field[Drann*Feldgrose]; //Ansetzfeld wird analysiert
ladner 1:0eaa7682f7e1 926 if(temp>0)
ladner 1:0eaa7682f7e1 927 {
ladner 1:0eaa7682f7e1 928 //myled = myled|temp<<8;
ladner 1:0eaa7682f7e1 929 temp--; //(Spieler<<2)|Stein
ladner 1:0eaa7682f7e1 930 PlayPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 1:0eaa7682f7e1 931 }
ladner 1:0eaa7682f7e1 932 }
ladner 13:cb068deacb6c 933 else //Draußen
ladner 13:cb068deacb6c 934 {
ladner 13:cb068deacb6c 935 PlayPos[(Drann<<2)|selected] += diceNum; //Weitersetzen
ladner 13:cb068deacb6c 936 //PlayPos[(Drann<<2)|selected]
ladner 13:cb068deacb6c 937 if(PlayPos[(Drann<<2)|selected]<Steine+Spieler*Feldgrose) //noch nicht drinnen
ladner 13:cb068deacb6c 938 {
ladner 13:cb068deacb6c 939 //Field>0
ladner 13:cb068deacb6c 940 char temp = Field[ ( PlayPos[(Drann<<2)|selected] - Steine + (Feldgrose * Drann) ) % (Feldgrose*Steine) ];
ladner 13:cb068deacb6c 941 if(temp>0)
ladner 13:cb068deacb6c 942 {
ladner 13:cb068deacb6c 943 //myled = myled|temp<<8;
ladner 13:cb068deacb6c 944 temp--; //(Spieler<<2)|Stein
ladner 13:cb068deacb6c 945 PlayPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 13:cb068deacb6c 946 }
ladner 13:cb068deacb6c 947 }
ladner 13:cb068deacb6c 948 }
ladner 13:cb068deacb6c 949 //else //nicht möglich
ladner 13:cb068deacb6c 950
ladner 0:e97a6a69fe4b 951 }
ladner 1:0eaa7682f7e1 952 MoveAnim.detach();
ladner 1:0eaa7682f7e1 953 last[Drann]=selected;
ladner 13:cb068deacb6c 954 myled = myled&0xF0F;
ladner 13:cb068deacb6c 955 count = 0;
ladner 13:cb068deacb6c 956 FieldGenerate();
ladner 13:cb068deacb6c 957 //Check for Win!
ladner 13:cb068deacb6c 958 char temp = 0;
ladner 13:cb068deacb6c 959 char j = 0;
ladner 13:cb068deacb6c 960 char running = 1;
ladner 13:cb068deacb6c 961 do
ladner 1:0eaa7682f7e1 962 {
ladner 13:cb068deacb6c 963 temp = 0;
ladner 13:cb068deacb6c 964 for (char i = 0; i < Steine; i++)
ladner 13:cb068deacb6c 965 if (Ziel[(Drann<<2)|i]>0)
ladner 13:cb068deacb6c 966 temp++;
ladner 13:cb068deacb6c 967 if((temp>=4)&&(diceEn>1))
ladner 13:cb068deacb6c 968 port.printf("LSpieler %d hat das Spiel beendet!\n",Drann);
ladner 13:cb068deacb6c 969 if(temp==4)
ladner 13:cb068deacb6c 970 Drann = (Drann+1)%Spieler;
ladner 13:cb068deacb6c 971 else
ladner 13:cb068deacb6c 972 {
ladner 13:cb068deacb6c 973 if(j==0)
ladner 13:cb068deacb6c 974 {
ladner 13:cb068deacb6c 975 if(diceNum<6)
ladner 13:cb068deacb6c 976 Drann = (Drann+1)%Spieler;
ladner 13:cb068deacb6c 977 else
ladner 13:cb068deacb6c 978 running = 0;
ladner 13:cb068deacb6c 979 }
ladner 13:cb068deacb6c 980 else
ladner 13:cb068deacb6c 981 running = 0;
ladner 13:cb068deacb6c 982
ladner 13:cb068deacb6c 983 }
ladner 13:cb068deacb6c 984 diceEn = 0;
ladner 13:cb068deacb6c 985 j++;
ladner 13:cb068deacb6c 986 }while((j<=Spieler)&(running>0));
ladner 13:cb068deacb6c 987 if(running==1)
ladner 13:cb068deacb6c 988 {
ladner 13:cb068deacb6c 989 port.printf("LSpiel beendet!\n");
ladner 13:cb068deacb6c 990 diceEn = 4;
ladner 1:0eaa7682f7e1 991 }
ladner 1:0eaa7682f7e1 992 DicePrint();
ladner 1:0eaa7682f7e1 993 FieldPrint();
ladner 1:0eaa7682f7e1 994 FeldPrint();
ladner 13:cb068deacb6c 995 port.printf("LDrann:%d\n",Drann);
ladner 1:0eaa7682f7e1 996 }
ladner 4:2acb70f9cd22 997 }
ladner 13:cb068deacb6c 998
ladner 4:2acb70f9cd22 999 void ColorPrint(uint32_t color)
ladner 4:2acb70f9cd22 1000 {
ladner 4:2acb70f9cd22 1001 port.printf("%c%c%c%c\n",27+((color&0xFC0000)>>18),27+((color&0x03f000)>>12),27+((color&0x000FC0)>>6),27+(color&0x00003F));
ladner 13:cb068deacb6c 1002 }
ladner 13:cb068deacb6c 1003
ladner 13:cb068deacb6c 1004 //http://www.repairfaq.org/REPAIR/F_SNES.html
ladner 13:cb068deacb6c 1005
ladner 13:cb068deacb6c 1006 void dreh()
ladner 13:cb068deacb6c 1007 {
ladner 13:cb068deacb6c 1008 char temp = DD;
ladner 13:cb068deacb6c 1009 if(DD_last == 3)
ladner 13:cb068deacb6c 1010 {
ladner 13:cb068deacb6c 1011 if(temp == 0)
ladner 13:cb068deacb6c 1012 DD_last = 0;
ladner 13:cb068deacb6c 1013 }
ladner 13:cb068deacb6c 1014 else
ladner 13:cb068deacb6c 1015 {
ladner 13:cb068deacb6c 1016 if(temp == 3)
ladner 13:cb068deacb6c 1017 {
ladner 13:cb068deacb6c 1018 if(DD_last == 1)
ladner 13:cb068deacb6c 1019 up();
ladner 13:cb068deacb6c 1020 if(DD_last == 2)
ladner 13:cb068deacb6c 1021 down();
ladner 13:cb068deacb6c 1022 }
ladner 13:cb068deacb6c 1023 DD_last = temp;
ladner 13:cb068deacb6c 1024 }
ladner 13:cb068deacb6c 1025 }
ladner 13:cb068deacb6c 1026
ladner 13:cb068deacb6c 1027 void druck()
ladner 13:cb068deacb6c 1028 {
ladner 13:cb068deacb6c 1029 if(DD_D==DD_d)
ladner 13:cb068deacb6c 1030 return;
ladner 13:cb068deacb6c 1031 else if(DD_D)
ladner 13:cb068deacb6c 1032 accept();
ladner 13:cb068deacb6c 1033 DD_d=DD_D;
ladner 13:cb068deacb6c 1034 }
ladner 13:cb068deacb6c 1035
ladner 13:cb068deacb6c 1036 char ausfuehren(uint32_t postion)
ladner 13:cb068deacb6c 1037 {
ogris 14:8f3619df12f1 1038 char out = 1;//0 ende der postion
ogris 14:8f3619df12f1 1039 VHS = 0;
ladner 13:cb068deacb6c 1040 switch (postion)
ladner 13:cb068deacb6c 1041 {
ogris 14:8f3619df12f1 1042 case 0x15:
ogris 14:8f3619df12f1 1043 out = 0;
ogris 14:8f3619df12f1 1044 //zustand 7 aendern
ogris 14:8f3619df12f1 1045 break;
ogris 14:8f3619df12f1 1046 case 0x25:
ogris 14:8f3619df12f1 1047 out = 0;
ogris 14:8f3619df12f1 1048 //zustand kleinstmöglicher zustand
ogris 14:8f3619df12f1 1049 break;
ogris 14:8f3619df12f1 1050 case 0x35:
ogris 14:8f3619df12f1 1051 out = 0;
ogris 14:8f3619df12f1 1052 //zustand groestmoeglich
ogris 14:8f3619df12f1 1053 break;
ogris 14:8f3619df12f1 1054 case 0x19:
ogris 14:8f3619df12f1 1055 out = 0;
ogris 14:8f3619df12f1 1056 //schmeisszwang
ogris 14:8f3619df12f1 1057 break;
ogris 14:8f3619df12f1 1058 case 0x29:
ogris 14:8f3619df12f1 1059 out = 0;
ogris 14:8f3619df12f1 1060 //go home first
ogris 14:8f3619df12f1 1061 break;
ogris 14:8f3619df12f1 1062 case 0x39:
ogris 14:8f3619df12f1 1063 out = 0;
ogris 14:8f3619df12f1 1064 //ausfahrzwang
ogris 14:8f3619df12f1 1065 break;
ogris 14:8f3619df12f1 1066 case 0x17:
ogris 14:8f3619df12f1 1067 out = 0;
ogris 14:8f3619df12f1 1068 //Spiel-Menü:laden
ogris 14:8f3619df12f1 1069 break;
ogris 14:8f3619df12f1 1070 case 0x27:
ogris 14:8f3619df12f1 1071 out = 0;
ogris 14:8f3619df12f1 1072 //Spiel-Menü:speichern
ogris 14:8f3619df12f1 1073 break;
ogris 14:8f3619df12f1 1074 case 0x37:
ogris 14:8f3619df12f1 1075 out = 0;
ogris 14:8f3619df12f1 1076 //Spiel-Menü:reset
ogris 14:8f3619df12f1 1077 break;
ogris 14:8f3619df12f1 1078 case 0x1b:
ogris 14:8f3619df12f1 1079 out = 0;
ogris 14:8f3619df12f1 1080 //Config:laden
ogris 14:8f3619df12f1 1081 break;
ogris 14:8f3619df12f1 1082 case 0x2b:
ogris 14:8f3619df12f1 1083 out = 0;
ogris 14:8f3619df12f1 1084 //Config:speichern
ogris 14:8f3619df12f1 1085 break;
ogris 14:8f3619df12f1 1086 case 0x3b:
ogris 14:8f3619df12f1 1087 out = 0;
ogris 14:8f3619df12f1 1088 //Config:reset
ogris 14:8f3619df12f1 1089 break;
ogris 14:8f3619df12f1 1090 case 0x1f:
ogris 14:8f3619df12f1 1091 out = 0;
ogris 14:8f3619df12f1 1092 //Offline:new
ogris 14:8f3619df12f1 1093 break;
ogris 14:8f3619df12f1 1094 case 0x2f:
ogris 14:8f3619df12f1 1095 out = 0;
ogris 14:8f3619df12f1 1096 //Offline:reset
ogris 14:8f3619df12f1 1097 break;
ogris 14:8f3619df12f1 1098 case 0x3f:
ogris 14:8f3619df12f1 1099 out = 0;
ogris 14:8f3619df12f1 1100 //Offline:com
ogris 14:8f3619df12f1 1101 break;
ogris 14:8f3619df12f1 1102 case 0x6:
ogris 14:8f3619df12f1 1103 VHS = 1;
ogris 14:8f3619df12f1 1104 break;
ogris 19:b07fa9e47577 1105 case 0x5d:
ogris 19:b07fa9e47577 1106 out = 0;
ogris 19:b07fa9e47577 1107 //Autoplay->zeit normal
ogris 19:b07fa9e47577 1108 break;
ogris 19:b07fa9e47577 1109 case 0x9d:
ogris 19:b07fa9e47577 1110 out = 0;
ogris 19:b07fa9e47577 1111 //Autoplay->zeit 2x
ogris 19:b07fa9e47577 1112 break;
ogris 19:b07fa9e47577 1113 case 0xdd:
ogris 19:b07fa9e47577 1114 out = 0;
ogris 19:b07fa9e47577 1115 //Autoplay->zeit 4x
ogris 19:b07fa9e47577 1116 break;
ogris 19:b07fa9e47577 1117
ogris 14:8f3619df12f1 1118
ladner 13:cb068deacb6c 1119 default:
ladner 13:cb068deacb6c 1120 break;
ladner 13:cb068deacb6c 1121 }
ladner 13:cb068deacb6c 1122 return out;
ladner 13:cb068deacb6c 1123 }
ladner 13:cb068deacb6c 1124
ladner 13:cb068deacb6c 1125 void posUpdate()
ladner 13:cb068deacb6c 1126 {
ladner 13:cb068deacb6c 1127 postion = 0;
ladner 13:cb068deacb6c 1128 for(char i = 0;i<depth-1;i++)
ladner 13:cb068deacb6c 1129 postion = postion|(mSelected[i]<<(i*2));
ladner 13:cb068deacb6c 1130 }
ladner 13:cb068deacb6c 1131
ladner 13:cb068deacb6c 1132 void up()
ladner 13:cb068deacb6c 1133 {
ladner 13:cb068deacb6c 1134 if(depth>0)
ladner 13:cb068deacb6c 1135 {
ladner 13:cb068deacb6c 1136 if(mSelected[depth-1]<1)
ladner 13:cb068deacb6c 1137 {
ladner 13:cb068deacb6c 1138 if(VHS==0)
ladner 13:cb068deacb6c 1139 mSelected[depth-1]=3;
ladner 13:cb068deacb6c 1140 else if(VHS==1)
ladner 13:cb068deacb6c 1141 mSelected[depth-1]=4;
ladner 13:cb068deacb6c 1142 else
ladner 13:cb068deacb6c 1143 mSelected[depth-1]=VHS;
ladner 13:cb068deacb6c 1144 }
ladner 13:cb068deacb6c 1145 else
ladner 13:cb068deacb6c 1146 mSelected[depth-1]--;
ladner 13:cb068deacb6c 1147 print_pos();
ladner 13:cb068deacb6c 1148 }
ladner 13:cb068deacb6c 1149 }
ladner 13:cb068deacb6c 1150
ladner 13:cb068deacb6c 1151 void down()
ladner 13:cb068deacb6c 1152 {
ladner 13:cb068deacb6c 1153 if(depth>0)
ladner 13:cb068deacb6c 1154 {
ladner 13:cb068deacb6c 1155 char temp=3;
ladner 13:cb068deacb6c 1156 if(VHS==0)
ladner 13:cb068deacb6c 1157 temp=3;
ladner 13:cb068deacb6c 1158 else if(VHS==1)
ladner 13:cb068deacb6c 1159 temp=4;
ladner 13:cb068deacb6c 1160 else
ladner 13:cb068deacb6c 1161 temp=VHS;
ladner 13:cb068deacb6c 1162 if(mSelected[depth-1]>(temp-1))
ladner 13:cb068deacb6c 1163 mSelected[depth-1]=0;
ladner 13:cb068deacb6c 1164 else
ladner 13:cb068deacb6c 1165 mSelected[depth-1]++;
ladner 13:cb068deacb6c 1166 print_pos();
ladner 13:cb068deacb6c 1167 }
ladner 13:cb068deacb6c 1168 }
ladner 13:cb068deacb6c 1169
ladner 13:cb068deacb6c 1170 void accept()
ladner 13:cb068deacb6c 1171 {
ladner 13:cb068deacb6c 1172 if(depth>0)
ladner 13:cb068deacb6c 1173 {
ladner 13:cb068deacb6c 1174 postion = 0;
ladner 13:cb068deacb6c 1175 for(char i = 0;i<depth;i++)
ladner 13:cb068deacb6c 1176 postion = postion|(mSelected[i]<<(i*2));
ladner 13:cb068deacb6c 1177 char temp = ausfuehren(postion);
ladner 13:cb068deacb6c 1178 if(temp>0)
ladner 13:cb068deacb6c 1179 {
ladner 13:cb068deacb6c 1180 if(mSelected[depth-1]==0)
ladner 13:cb068deacb6c 1181 {
ladner 13:cb068deacb6c 1182 exit();
ladner 13:cb068deacb6c 1183 return;
ladner 13:cb068deacb6c 1184 }
ladner 13:cb068deacb6c 1185 else
ladner 13:cb068deacb6c 1186 {
ladner 13:cb068deacb6c 1187 mSelected[depth]=1;
ladner 13:cb068deacb6c 1188 depth++;
ladner 13:cb068deacb6c 1189 }
ladner 13:cb068deacb6c 1190 }
ladner 13:cb068deacb6c 1191 }
ladner 13:cb068deacb6c 1192 else
ladner 13:cb068deacb6c 1193 {
ladner 13:cb068deacb6c 1194 depth=1;
ladner 13:cb068deacb6c 1195 mDiceEn = diceEn;
ladner 13:cb068deacb6c 1196 if(mDiceEn==1)
ladner 13:cb068deacb6c 1197 {
ladner 13:cb068deacb6c 1198 DiceAnim.detach();
ladner 13:cb068deacb6c 1199 diceTick = 0;
ladner 13:cb068deacb6c 1200 RandomDice.stop();
ladner 13:cb068deacb6c 1201 mDiceEn=0;
ladner 13:cb068deacb6c 1202 }
ladner 13:cb068deacb6c 1203 if((mDiceEn==2)||(mDiceEn==3))
ladner 13:cb068deacb6c 1204 {
ladner 13:cb068deacb6c 1205 MoveAnim.detach();
ladner 13:cb068deacb6c 1206 MoveShow = 1;
ladner 13:cb068deacb6c 1207 MoveRun();
ladner 13:cb068deacb6c 1208 }
ladner 13:cb068deacb6c 1209 diceEn=5;
ladner 13:cb068deacb6c 1210 DicePrint();
ladner 13:cb068deacb6c 1211 //StartMenu-Anim
ladner 13:cb068deacb6c 1212 }
ladner 13:cb068deacb6c 1213 posUpdate();
ogris 14:8f3619df12f1 1214 port.printf("Lpostion:0x%x\n",postion);
ladner 13:cb068deacb6c 1215 if(depth>0)
ladner 13:cb068deacb6c 1216 {
ladner 13:cb068deacb6c 1217 print_menu();
ladner 13:cb068deacb6c 1218 print_pos();
ladner 13:cb068deacb6c 1219 }
ladner 13:cb068deacb6c 1220 else
ladner 13:cb068deacb6c 1221 print_default();
ladner 13:cb068deacb6c 1222 }
ladner 13:cb068deacb6c 1223
ladner 13:cb068deacb6c 1224 void exit()
ladner 13:cb068deacb6c 1225 {
ladner 13:cb068deacb6c 1226 if(depth>0)
ladner 13:cb068deacb6c 1227 {
ladner 13:cb068deacb6c 1228 depth--;
ladner 13:cb068deacb6c 1229 mSelected[depth]=0;
ladner 13:cb068deacb6c 1230 }
ladner 13:cb068deacb6c 1231 if(depth==0)
ladner 13:cb068deacb6c 1232 {
ladner 13:cb068deacb6c 1233 if(mDiceEn<5)
ladner 13:cb068deacb6c 1234 {
ladner 13:cb068deacb6c 1235 diceEn=mDiceEn;
ladner 13:cb068deacb6c 1236 if((mDiceEn==2)||(mDiceEn==3))
ladner 13:cb068deacb6c 1237 MoveAnim.attach(&MoveRun,0.3);
ladner 13:cb068deacb6c 1238 mDiceEn=5;
ladner 13:cb068deacb6c 1239 }
ladner 13:cb068deacb6c 1240 }
ladner 13:cb068deacb6c 1241 posUpdate();
ogris 14:8f3619df12f1 1242 ausfuehren(postion);
ladner 13:cb068deacb6c 1243 if(depth>0)
ladner 13:cb068deacb6c 1244 {
ladner 13:cb068deacb6c 1245 print_menu();
ladner 13:cb068deacb6c 1246 print_pos();
ladner 13:cb068deacb6c 1247 }
ladner 13:cb068deacb6c 1248 else
ladner 13:cb068deacb6c 1249 print_default();
ladner 13:cb068deacb6c 1250 }
ladner 13:cb068deacb6c 1251
ladner 13:cb068deacb6c 1252 void print_menu()
ladner 13:cb068deacb6c 1253 {
ladner 13:cb068deacb6c 1254 port.printf("DR\n");
ladner 13:cb068deacb6c 1255 lcd.cls();
ladner 13:cb068deacb6c 1256 lcd.locate(1,0);
ladner 13:cb068deacb6c 1257 lcd.printf(text_ln0[textPos[postion]]);
ladner 13:cb068deacb6c 1258 port.printf("D%c%c%s\n",28,27,text_ln0[textPos[postion]]);
ladner 13:cb068deacb6c 1259 lcd.locate(1,1);
ladner 13:cb068deacb6c 1260 lcd.printf(text_ln1[textPos[postion]]);
ladner 13:cb068deacb6c 1261 port.printf("D%c%c%s\n",28,28,text_ln1[textPos[postion]]);
ladner 13:cb068deacb6c 1262 lcd.locate(1,2);
ladner 13:cb068deacb6c 1263 lcd.printf(text_ln2[textPos[postion]]);
ladner 13:cb068deacb6c 1264 port.printf("D%c%c%s\n",28,29,text_ln2[textPos[postion]]);
ladner 13:cb068deacb6c 1265 lcd.locate(1,3);
ladner 13:cb068deacb6c 1266 lcd.printf(text_ln3[textPos[postion]]);
ladner 13:cb068deacb6c 1267 port.printf("D%c%c%s\n",28,30,text_ln3[textPos[postion]]);
ladner 13:cb068deacb6c 1268 }
ladner 13:cb068deacb6c 1269
ladner 13:cb068deacb6c 1270 void print_pos()
ladner 13:cb068deacb6c 1271 {
ladner 13:cb068deacb6c 1272 if (VHS==1)
ladner 13:cb068deacb6c 1273 {
ladner 13:cb068deacb6c 1274 lcd.locate(0,3);
ladner 13:cb068deacb6c 1275 // "--------------------"
ladner 13:cb068deacb6c 1276 lcd.printf(" ");
ladner 13:cb068deacb6c 1277 port.printf("D%c%c \n",27,27+3);
ladner 13:cb068deacb6c 1278
ladner 13:cb068deacb6c 1279 lcd.locate(0,0);
ladner 13:cb068deacb6c 1280 if(mSelected[depth-1]==0)
ladner 13:cb068deacb6c 1281 {
ladner 13:cb068deacb6c 1282 port.printf("D%c%c<\n",27,27);
ladner 13:cb068deacb6c 1283 lcd.putc('<');
ladner 13:cb068deacb6c 1284 }
ladner 13:cb068deacb6c 1285 else
ladner 13:cb068deacb6c 1286 {
ladner 13:cb068deacb6c 1287 port.printf("D%c%c \n",27,27);
ladner 13:cb068deacb6c 1288 lcd.putc(' ');
ladner 13:cb068deacb6c 1289
ladner 13:cb068deacb6c 1290 lcd.locate(4*mSelected[depth-1],3);
ladner 13:cb068deacb6c 1291 lcd.putc('^');
ladner 13:cb068deacb6c 1292 port.printf("D%c%c^\n",27+4*mSelected[depth-1],27+3);
ladner 13:cb068deacb6c 1293 }
ladner 13:cb068deacb6c 1294 }
ladner 13:cb068deacb6c 1295 else
ladner 13:cb068deacb6c 1296 {
ladner 13:cb068deacb6c 1297 for(char i=0;i<4;i++)
ladner 13:cb068deacb6c 1298 {
ladner 13:cb068deacb6c 1299 lcd.locate(0,i);
ladner 13:cb068deacb6c 1300 if((mSelected[depth-1]+0)==i)
ladner 13:cb068deacb6c 1301 {
ladner 13:cb068deacb6c 1302 if(i==0)
ladner 13:cb068deacb6c 1303 {
ladner 13:cb068deacb6c 1304 port.printf("D%c%c<\n",27,i+27);
ladner 13:cb068deacb6c 1305 lcd.putc('<');
ladner 13:cb068deacb6c 1306 }
ladner 13:cb068deacb6c 1307 else
ladner 13:cb068deacb6c 1308 {
ladner 13:cb068deacb6c 1309 port.printf("D%c%c>\n",27,i+27);
ladner 13:cb068deacb6c 1310 lcd.putc('>');
ladner 13:cb068deacb6c 1311 }
ladner 13:cb068deacb6c 1312 }
ladner 13:cb068deacb6c 1313 else
ladner 13:cb068deacb6c 1314 {
ladner 13:cb068deacb6c 1315 port.printf("D%c%c \n",27,i+27);
ladner 13:cb068deacb6c 1316 lcd.putc(' ');
ladner 13:cb068deacb6c 1317 }
ladner 13:cb068deacb6c 1318 }
ladner 13:cb068deacb6c 1319 }
ladner 13:cb068deacb6c 1320 }
ladner 13:cb068deacb6c 1321
ladner 13:cb068deacb6c 1322 void print_default()
ladner 13:cb068deacb6c 1323 {
ladner 13:cb068deacb6c 1324 lcd.cls();
ladner 13:cb068deacb6c 1325 lcd.printf(" Spiel lauft...");
ladner 13:cb068deacb6c 1326 lcd.locate(0,3);
ladner 13:cb068deacb6c 1327 lcd.printf("12345678901234567890");
ladner 13:cb068deacb6c 1328 port.printf("D%c%c Spiel lauft... \n",27,27);
ladner 13:cb068deacb6c 1329 port.printf("D%c%c \n",27,28);
ladner 13:cb068deacb6c 1330 port.printf("D%c%c \n",27,29);
ladner 13:cb068deacb6c 1331 port.printf("D%c%c12345678901234567890\n",27,30);
ladner 0:e97a6a69fe4b 1332 }