a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ogris
Date:
Fri Apr 08 08:43:54 2016 +0000
Revision:
23:fd15b2f8cf08
Parent:
22:2d75e7ec402f
Child:
24:e6620af29329
tey

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