a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ogris
Date:
Fri Apr 08 11:37:12 2016 +0000
Revision:
27:15a37d3fb5c5
Parent:
26:de10b06e7d4d
Child:
28:94a949b0f03a
mit KI-FELD!!!!!;

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