a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ladner
Date:
Fri Apr 08 10:16:45 2016 +0000
Revision:
26:de10b06e7d4d
Parent:
25:b31b49d277fd
Child:
27:15a37d3fb5c5

        

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