a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ogris
Date:
Mon Apr 18 07:43:26 2016 +0000
Revision:
31:657fc7673cde
Parent:
30:3482779d97af
f

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 /*Todo list
ogris 18:d747cf2de3bf 6 switch case aktualisieren
ogris 18:d747cf2de3bf 7 Autoplay
ogris 18:d747cf2de3bf 8 Switchcase alle Funktionen einfügen
ogris 18:d747cf2de3bf 9 Menü prüfen, erweitern
ogris 18:d747cf2de3bf 10 (
ogris 18:d747cf2de3bf 11 Farben Menü für alle Spieler fehlt //rgb einstellen -> spieler 2-4 fehlt
ogris 18:d747cf2de3bf 12 Würfel-> Farbe vll bereits ein älteres Menü zu benutzen
ogris 18:d747cf2de3bf 13 Würfel -> Farbverhalten gleich wie oben
ogris 19:b07fa9e47577 14 Autoplay generell ?
ogris 20:9908c31eb2f7 15 Farben Screen welcher spieler würfel ?
ogris 21:374e9aed07d9 16 wüfel farbverahlten in switch auf bildschrim farben umschreiben
ogris 31:657fc7673cde 17 s
ogris 18:d747cf2de3bf 18 )
ogris 18:d747cf2de3bf 19
ogris 18:d747cf2de3bf 20 */
ogris 18:d747cf2de3bf 21
ogris 23:fd15b2f8cf08 22 I2C i2c(P0_5, P0_4);
ogris 23:fd15b2f8cf08 23 Serial port(P0_19, P0_18);
ogris 23:fd15b2f8cf08 24 BusOut myled(P1_8, P1_9, P1_10, P1_11, P1_0, P1_1, P1_3, P1_4, P1_6, P1_7, P1_12, P1_13);
ladner 0:e97a6a69fe4b 25 AnalogIn ldr(P0_12);
ladner 0:e97a6a69fe4b 26 AnalogIn poti(P0_11);
ladner 1:0eaa7682f7e1 27 //BusOut rgb(P0_9,P1_15,P0_21);
ladner 1:0eaa7682f7e1 28
ogris 23:fd15b2f8cf08 29 RGBOut rgb(P0_21, P0_9, P1_15);
ladner 1:0eaa7682f7e1 30
ladner 1:0eaa7682f7e1 31 InterruptIn Button0(P0_1);
ladner 0:e97a6a69fe4b 32 InterruptIn Button1(P1_16);
ladner 0:e97a6a69fe4b 33 InterruptIn Button2(P0_23);
ladner 1:0eaa7682f7e1 34 InterruptIn Button3(P0_10);
ladner 1:0eaa7682f7e1 35 InterruptIn Button4(P0_15);
ogris 23:fd15b2f8cf08 36 BusIn btn(P1_16, P0_23, P0_10, P0_15, P0_1);
ladner 0:e97a6a69fe4b 37
ogris 23:fd15b2f8cf08 38 LedOut Feld(p6);//P6
ogris 23:fd15b2f8cf08 39 LedOut Home(p7);//P7
ogris 23:fd15b2f8cf08 40 LedOut Dice(p8);//P8
ladner 13:cb068deacb6c 41 //-> Würfel (ersten 3 LED in Binär-4. LED für 7. Zustand), Spieler, Referenz(auch RGB am board)
ladner 13:cb068deacb6c 42
ogris 23:fd15b2f8cf08 43 TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD20x4);
ladner 13:cb068deacb6c 44
ladner 28:94a949b0f03a 45 DigitalOut lcdLight(p9);
ladner 28:94a949b0f03a 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 char whichcolor;
ogris 23:fd15b2f8cf08 76 uint32_t changecolor[3];
ladner 28:94a949b0f03a 77 char selctecolor = 0;//2..R ,1...G,3...B
ogris 27:15a37d3fb5c5 78 char KI[4] = {0,0,0,0};
ogris 23:fd15b2f8cf08 79
ogris 23:fd15b2f8cf08 80 //until here
ogris 23:fd15b2f8cf08 81
ogris 23:fd15b2f8cf08 82 char PlayPos[Spieler * Steine]; //Zahl zwischen 0 & 47 ((0xC0 -> Spieler)>>2 / 0x03 -> Stein)
ogris 23:fd15b2f8cf08 83 char Start[Spieler * Steine]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
ogris 23:fd15b2f8cf08 84 char Ziel[Spieler * Steine]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
ladner 1:0eaa7682f7e1 85 char Drann; //Spieler, der drann ist
ladner 1:0eaa7682f7e1 86 char count; //Für 6er & mehrfaches Würfeln beim Ansetzen
ladner 1:0eaa7682f7e1 87 char last[Spieler]; //zuletzt benutzte Spielstein, der zuletzt benutzt wurde
ladner 1:0eaa7682f7e1 88 char moglich[Steine];
ladner 1:0eaa7682f7e1 89 char selected; //der aktuell ausgewählte Zug
ogris 23:fd15b2f8cf08 90 char Field[Spieler * Feldgrose]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
ladner 1:0eaa7682f7e1 91 void FieldPrint(); //Ausgabe auf Com-Port
ladner 1:0eaa7682f7e1 92 void FieldGenerate(); //Berechnung von PlayPos auf Start, Ziel, Field
ladner 1:0eaa7682f7e1 93 void FeldPrint(); //Ausgabe von Field auf den Led-Streifen (Feld) der Farben
ladner 1:0eaa7682f7e1 94 void GameCal();
ladner 1:0eaa7682f7e1 95 Ticker MoveAnim;
ladner 1:0eaa7682f7e1 96 void MoveRun();
ladner 1:0eaa7682f7e1 97 char MoveShow;
ladner 13:cb068deacb6c 98 void ColorPrint(uint32_t color);
ladner 13:cb068deacb6c 99 //Animations
ogris 23:fd15b2f8cf08 100 char AnimField[Spieler * Feldgrose];
ogris 23:fd15b2f8cf08 101 char AnimStart[Spieler * Steine];
ogris 23:fd15b2f8cf08 102 char AnimZiel[Spieler * Steine];
ogris 23:fd15b2f8cf08 103 char AnimPos[Spieler * Steine];
ladner 13:cb068deacb6c 104 char AnimDo; //Feld_Animieren,Start Animieren, Ziel Animierenw
ladner 13:cb068deacb6c 105 void AnimCal();
ladner 13:cb068deacb6c 106 //Core Interactions
ladner 13:cb068deacb6c 107 void reset();
ladner 1:0eaa7682f7e1 108 void MoveDo();
ladner 13:cb068deacb6c 109 void moveNext();
ladner 13:cb068deacb6c 110 void moveLast();
ladner 13:cb068deacb6c 111 void DiceStart();
ladner 13:cb068deacb6c 112 void DiceStop();
ladner 13:cb068deacb6c 113 //Button entprellung (funktioniert nicht...)
ladner 13:cb068deacb6c 114 void btn0();
ladner 13:cb068deacb6c 115 void btn1();
ladner 13:cb068deacb6c 116 void btn2();
ladner 13:cb068deacb6c 117 void btn3();
ladner 13:cb068deacb6c 118 void btn4();
ladner 13:cb068deacb6c 119 char btnLast;
ladner 13:cb068deacb6c 120 //Farben
ladner 13:cb068deacb6c 121 uint32_t Farben[Spieler]; //Berechnete Hellichkeiten der Speiler fertig zur Ausgabe...
ladner 13:cb068deacb6c 122 uint32_t Background = 0; //Hintergrund (Leerfeld)
ladner 22:2d75e7ec402f 123 uint32_t DiceC = 0x00FF00; //Würfelfarbe
ladner 22:2d75e7ec402f 124 uint32_t TestC = 0xFFFFFF; //TestFarbe
ladner 13:cb068deacb6c 125 void ColorPrint(uint32_t color); //vorher den Header senden (manuell...)
ladner 13:cb068deacb6c 126
ladner 13:cb068deacb6c 127 char DD_last;
ladner 13:cb068deacb6c 128 char DD_d;
ladner 13:cb068deacb6c 129
ladner 13:cb068deacb6c 130 void dreh();
ladner 13:cb068deacb6c 131 void druck();
ladner 13:cb068deacb6c 132
ladner 13:cb068deacb6c 133 void up();
ladner 13:cb068deacb6c 134 void down();
ladner 13:cb068deacb6c 135 void accept();
ladner 13:cb068deacb6c 136 void exit();
ladner 13:cb068deacb6c 137 void print_menu();
ogris 27:15a37d3fb5c5 138 void print_zus();
ladner 13:cb068deacb6c 139 void print_pos();
ladner 28:94a949b0f03a 140 void print_color();
ladner 13:cb068deacb6c 141 void print_default();
ladner 29:42646ca2f941 142 void menuInit();
ladner 13:cb068deacb6c 143 void posUpdate();
ladner 13:cb068deacb6c 144 char ausfuehren(uint32_t postion);
ladner 13:cb068deacb6c 145
ogris 27:15a37d3fb5c5 146 //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 147 // "1234567890123456789","1234567890123456789","1234567890123456789","1234567890123456789", ,"1234567890123456789","1234567890123456789","1234567890123456789",
ogris 27:15a37d3fb5c5 148 const char* const text_ln0[] = { "MENU: ", "Spiel-Menu: ", "Anzeige-Menu: ", "Speicher-Menu: ", "ERROR ", "7.Zustand-Menu: ", "Farben-Menu: ", "Spiel-Menu: ", "Spielregeln-Menu: ", "Spielregeln-Menu: ", "Hell./Sp.Led-Menu: ", "Config-Menu: ", "Autplay-zeit ", "Autplay-Menu: ", "Wurfel-Menu: ", "Ofline/Com-Menu: ", "Enable/Manuell ", "Farben ", "Helligkeit Wert ", "Sp.Led-Verhalten ", "Farbverhalten ", "Farbverhalten def ", "Helligkeit Wert ","KI-Menu "};
ladner 29:42646ca2f941 149 const char* const text_ln1[] = { "Spiel ", "7.Zustand ", "Farben ", "Spiel ", "Postion: ", "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 150 const char* const text_ln2[] = { "Anzeige ", "Spielregeln ", "Hellichkeit/Sp.Led ", "Config. ", " ", "kleinstmoglich ", "SP: 1 2 3 4 ", "Speichern ", "Taktik 2 ", "Go Home first <I/0>", "Sp.Led-Verhalten ", "Speichern ", "x2 ", "Agro/Taktik ", "Farb def ", "Reset ", " ", "G: ", "75% ", "Verhalten 2 ", "Spieler Farbe ", "erlaubt ", "75% ","SP: 1 2 3 4 " };
ogris 27:15a37d3fb5c5 151 const char* const text_ln3[] = { "Speicher ", "Autoplay ", "Wurfel ", "Ofline/Com ", " ", "grostmoglich ", " ", "Reset ", "Taktik 3 ", "Ausfahrzwang <I/0> ", "Andert: <wert> fehl", "Reset ", "x4 ", "Enable/Manuell ", "Hellichkeit ", "Com ", " ", "B: ", "50% ", "Verhalten 3 ", "3 Farben ", "verboten ", "50% "," "};
ladner 29:42646ca2f941 152 //jetzt in menuInit() am Ende definiert!
ladner 29:42646ca2f941 153 //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 29:42646ca2f941 154 char textPos[255];
ladner 29:42646ca2f941 155
ladner 13:cb068deacb6c 156
ladner 13:cb068deacb6c 157 char VHS = 0;
ladner 28:94a949b0f03a 158 char mSelected[50];
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
ladner 29:42646ca2f941 323 int main()
ladner 0:e97a6a69fe4b 324 {
ladner 1:0eaa7682f7e1 325 Random.start();
ladner 29:42646ca2f941 326
ladner 29:42646ca2f941 327 for (char k = 0; k < 255; k++)
ogris 30:3482779d97af 328 textPos[k]=4;
ladner 29:42646ca2f941 329
ladner 29:42646ca2f941 330 menuInit();
ladner 1:0eaa7682f7e1 331 //Random.stop();
ladner 1:0eaa7682f7e1 332 //Random.read_us();
ogris 23:fd15b2f8cf08 333
ladner 1:0eaa7682f7e1 334 //Ticker:
ladner 1:0eaa7682f7e1 335 //.attach(&main,[sek]);
ladner 1:0eaa7682f7e1 336 //.attach_us(&main,[micro-sec]);
ladner 1:0eaa7682f7e1 337 //.detach();
ladner 13:cb068deacb6c 338 Button0.mode(PullDown);
ladner 13:cb068deacb6c 339 Button1.mode(PullDown);
ladner 13:cb068deacb6c 340 Button2.mode(PullDown);
ladner 13:cb068deacb6c 341 Button3.mode(PullDown);
ladner 13:cb068deacb6c 342 Button4.mode(PullDown);
ogris 23:fd15b2f8cf08 343
ladner 13:cb068deacb6c 344 DD_A.mode(PullDown);
ladner 13:cb068deacb6c 345 DD_B.mode(PullDown);
ladner 13:cb068deacb6c 346 DD_C.mode(PullDown);
ogris 23:fd15b2f8cf08 347
ladner 13:cb068deacb6c 348 wait(0.01);
ogris 23:fd15b2f8cf08 349
ladner 13:cb068deacb6c 350 DD_A.rise(&dreh);
ladner 13:cb068deacb6c 351 DD_A.fall(&dreh);
ladner 13:cb068deacb6c 352 DD_B.rise(&dreh);
ladner 13:cb068deacb6c 353 DD_B.fall(&dreh);
ladner 13:cb068deacb6c 354 DD_C.rise(&druck);
ladner 13:cb068deacb6c 355 DD_C.fall(&druck);
ladner 13:cb068deacb6c 356 DD_last = DD;
ogris 23:fd15b2f8cf08 357 DD_d = DD_D;
ladner 13:cb068deacb6c 358
ladner 1:0eaa7682f7e1 359 Button0.rise(&reset);
ladner 13:cb068deacb6c 360 Button1.rise(&btn1);
ladner 13:cb068deacb6c 361 Button1.fall(&btn1);
ladner 1:0eaa7682f7e1 362 Button2.rise(&btn2);
ladner 13:cb068deacb6c 363 Button2.fall(&btn2);
ladner 1:0eaa7682f7e1 364 Button3.rise(&btn3);
ladner 13:cb068deacb6c 365 Button3.fall(&btn3);
ladner 1:0eaa7682f7e1 366 Button4.rise(&btn4);
ladner 13:cb068deacb6c 367 Button4.fall(&btn4);
ladner 13:cb068deacb6c 368
ladner 1:0eaa7682f7e1 369 //myled = 0xFFF;
ladner 1:0eaa7682f7e1 370 port.baud(76800);
ogris 23:fd15b2f8cf08 371 port.format(8, Serial::None, 1);
ladner 1:0eaa7682f7e1 372 port.attach(&Control);
ladner 4:2acb70f9cd22 373 /*
ladner 13:cb068deacb6c 374 Farben[0]=0x00FF00;//Rot
ladner 28:94a949b0f03a 375 Farben[1]=0x0000FF;//Blau
ladner 28:94a949b0f03a 376 Farben[2]=0xFF0000;//Grun
ladner 28:94a949b0f03a 377 Farben[3]=0xFFFF00;//Gelb
ladner 13:cb068deacb6c 378 Background = 0; //Schwarz
ladner 22:2d75e7ec402f 379 DiceC = 0x00FF00; //Rot
ladner 4:2acb70f9cd22 380 */
ogris 23:fd15b2f8cf08 381 Farben[0] = 0x000800;//Rot
ladner 28:94a949b0f03a 382 Farben[1] = 0x000008;//Blau
ladner 28:94a949b0f03a 383 Farben[2] = 0x080000;//Grun
ladner 28:94a949b0f03a 384 Farben[3] = 0x080800;//Gelb
ladner 13:cb068deacb6c 385 Background = 0; //Schwarz
ladner 22:2d75e7ec402f 386 DiceC = 0x000800; //Rot
ladner 13:cb068deacb6c 387 /*
ladner 13:cb068deacb6c 388 Farben[0]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 389 Farben[1]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 390 Farben[2]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 391 Farben[3]=0xFFFFFF;//Weiß
ladner 13:cb068deacb6c 392 Background = 0xFFFFFF;//Weiß
ladner 22:2d75e7ec402f 393 DiceC = 0xFFFFFF; //Weiß
ladner 13:cb068deacb6c 394 */
ladner 28:94a949b0f03a 395
ladner 28:94a949b0f03a 396 lcdLight=1;
ladner 28:94a949b0f03a 397 TestC = Background;
ladner 28:94a949b0f03a 398 reset();
ladner 1:0eaa7682f7e1 399 __disable_irq();
ogris 23:fd15b2f8cf08 400 for (char i = 0; i < Spieler; i++)
ladner 1:0eaa7682f7e1 401 {
ladner 1:0eaa7682f7e1 402 Feld.WriteLed(Farben[i]);
ogris 23:fd15b2f8cf08 403 for (char j = 0; j < Feldgrose - 1; j++)
ogris 23:fd15b2f8cf08 404 if ((j == (Feldgrose - 2)) & (i == (Spieler - 1)))
ladner 13:cb068deacb6c 405 Feld.WriteLed(0xFFFFFF);
ladner 13:cb068deacb6c 406 else
ladner 13:cb068deacb6c 407 Feld.WriteLed(Background);
ladner 1:0eaa7682f7e1 408 }
ladner 1:0eaa7682f7e1 409 __enable_irq();
ladner 13:cb068deacb6c 410 //reset();
ladner 13:cb068deacb6c 411 print_default();
ogris 23:fd15b2f8cf08 412 while (1) ;
ladner 0:e97a6a69fe4b 413 }
ladner 0:e97a6a69fe4b 414
ladner 1:0eaa7682f7e1 415 void DiceStart()
ladner 1:0eaa7682f7e1 416 {
ogris 23:fd15b2f8cf08 417 if (diceEn == 0)
ladner 1:0eaa7682f7e1 418 {
ogris 23:fd15b2f8cf08 419 RandomDice.start();
ogris 23:fd15b2f8cf08 420 DiceAnim.attach(&DiceRun, 0.1);
ogris 23:fd15b2f8cf08 421 diceEn = 1;
ogris 23:fd15b2f8cf08 422 diceTick = 1;
ogris 23:fd15b2f8cf08 423 DicePrint();
ladner 1:0eaa7682f7e1 424 }
ladner 1:0eaa7682f7e1 425 }
ladner 13:cb068deacb6c 426
ladner 1:0eaa7682f7e1 427 void DiceStop()
ladner 0:e97a6a69fe4b 428 {
ogris 23:fd15b2f8cf08 429 if (diceEn == 1)
ladner 1:0eaa7682f7e1 430 {
ogris 23:fd15b2f8cf08 431 if (RandomDice.read_us() > 200)
ladner 1:0eaa7682f7e1 432 {
ladner 1:0eaa7682f7e1 433 DiceAnim.detach();
ladner 1:0eaa7682f7e1 434 diceEn = 2;
ladner 1:0eaa7682f7e1 435 diceTick = 0;
ogris 23:fd15b2f8cf08 436 diceNum = Random.read_us() % 7;
ogris 23:fd15b2f8cf08 437 diceNum = (RandomDice.read_us() + diceNum) % 7 + 1;
ladner 13:cb068deacb6c 438 RandomDice.stop();
ladner 13:cb068deacb6c 439 RandomDice.reset();
ogris 23:fd15b2f8cf08 440 if (diceNum >= 7)
ladner 13:cb068deacb6c 441 DiceCal();
ladner 13:cb068deacb6c 442 //port.printf("LDiceNum:%d\n",diceNum);
ladner 1:0eaa7682f7e1 443 DicePrint();
ladner 1:0eaa7682f7e1 444 GameCal();
ladner 1:0eaa7682f7e1 445 }
ladner 1:0eaa7682f7e1 446 }
ladner 1:0eaa7682f7e1 447 }
ladner 13:cb068deacb6c 448
ladner 13:cb068deacb6c 449 void DiceCal()
ladner 13:cb068deacb6c 450 {
ogris 23:fd15b2f8cf08 451 if ((diceEn == 2) || (diceEn == 3))
ladner 13:cb068deacb6c 452 {
ogris 23:fd15b2f8cf08 453 if (diceNum > 7)
ogris 23:fd15b2f8cf08 454 diceNum = 7;
ogris 23:fd15b2f8cf08 455 if (diceNum == 7)
ladner 13:cb068deacb6c 456 {
ogris 23:fd15b2f8cf08 457 diceEn = 3;
ogris 23:fd15b2f8cf08 458 for (char i = 0; i < Steine; i++)
ogris 23:fd15b2f8cf08 459 if ((PlayPos[(Drann << 2) | i] > 3) && (PlayPos[(Drann << 2) | i] < 44))
ogris 23:fd15b2f8cf08 460 for (char j = 1; j <= 6; j++)
ladner 13:cb068deacb6c 461 {
ogris 23:fd15b2f8cf08 462 char temp = Field[(PlayPos[(Drann << 2) | i] - Steine + Feldgrose * Drann + j) % (Feldgrose * Steine)];
ogris 23:fd15b2f8cf08 463 if (temp > 0)
ladner 13:cb068deacb6c 464 {
ladner 13:cb068deacb6c 465 temp--; //(Spieler<<2)|Stein
ogris 23:fd15b2f8cf08 466 temp = (temp & 0xC) >> 2;//Spieler
ogris 23:fd15b2f8cf08 467 if (temp != Drann)
ogris 23:fd15b2f8cf08 468 if (j < diceNum)
ogris 23:fd15b2f8cf08 469 diceNum = j;
ladner 13:cb068deacb6c 470 }
ladner 13:cb068deacb6c 471 }
ladner 13:cb068deacb6c 472 //PlayPos[(Drann<<2)|i] im Feld suchen, weiter setzen, wenn treffer, der kleiner als diceNum ->setzen von diceNum
ladner 13:cb068deacb6c 473 }//DiceNum == 7
ogris 23:fd15b2f8cf08 474 if (diceNum == 7)
ogris 23:fd15b2f8cf08 475 diceNum = 6;
ladner 13:cb068deacb6c 476 //port.printf("LdiceNum:%d\n",diceNum);
ladner 13:cb068deacb6c 477 }
ladner 13:cb068deacb6c 478 }
ladner 13:cb068deacb6c 479
ladner 1:0eaa7682f7e1 480 void setDice(char number)
ladner 1:0eaa7682f7e1 481 {
ogris 23:fd15b2f8cf08 482 if (diceEn == 4)
ladner 1:0eaa7682f7e1 483 {
ogris 23:fd15b2f8cf08 484 port.printf("LWarning: diceEn:%d -> Game over\n", diceEn);
ladner 1:0eaa7682f7e1 485 }
ogris 23:fd15b2f8cf08 486 else if (diceEn < 4)
ladner 1:0eaa7682f7e1 487 {
ogris 23:fd15b2f8cf08 488 port.printf("LdiceEn:%d\n", diceEn);
ogris 23:fd15b2f8cf08 489 if (diceEn == 1)
ladner 13:cb068deacb6c 490 {
ladner 13:cb068deacb6c 491 DiceAnim.detach();
ladner 13:cb068deacb6c 492 diceTick = 0;
ladner 13:cb068deacb6c 493 RandomDice.stop();
ladner 13:cb068deacb6c 494 RandomDice.reset();
ladner 13:cb068deacb6c 495 }
ladner 13:cb068deacb6c 496 diceEn = 2;
ladner 13:cb068deacb6c 497 diceNum = number;
ogris 23:fd15b2f8cf08 498 if (diceNum >= 7)
ladner 13:cb068deacb6c 499 DiceCal();
ladner 13:cb068deacb6c 500 //port.printf("LForceDice:%d\n",diceNum);
ladner 13:cb068deacb6c 501 DicePrint();
ladner 13:cb068deacb6c 502 GameCal();
ladner 13:cb068deacb6c 503 }
ladner 1:0eaa7682f7e1 504 }
ladner 13:cb068deacb6c 505
ladner 1:0eaa7682f7e1 506 void DiceRun()
ladner 1:0eaa7682f7e1 507 {
ogris 23:fd15b2f8cf08 508 if (diceTick)
ladner 1:0eaa7682f7e1 509 {
ogris 23:fd15b2f8cf08 510 diceTick = 0;
ogris 23:fd15b2f8cf08 511 if (dicePos < 7)
ladner 1:0eaa7682f7e1 512 dicePos++;
ladner 1:0eaa7682f7e1 513 else
ogris 23:fd15b2f8cf08 514 dicePos = 0;
ogris 23:fd15b2f8cf08 515 }
ladner 1:0eaa7682f7e1 516 else
ogris 23:fd15b2f8cf08 517 diceTick = 1;
ladner 1:0eaa7682f7e1 518 DicePrint();
ladner 0:e97a6a69fe4b 519 }
ladner 0:e97a6a69fe4b 520
ladner 1:0eaa7682f7e1 521 void DicePrint()
ladner 0:e97a6a69fe4b 522 {
ogris 23:fd15b2f8cf08 523 switch (diceEn)
ladner 1:0eaa7682f7e1 524 {
ladner 13:cb068deacb6c 525 case 0: //Schwarz & Drann überschreiben...
ogris 23:fd15b2f8cf08 526 myled = (myled & 0xFF0);
ogris 23:fd15b2f8cf08 527 myled = (myled & 0x0FF) | (0x100 << Drann);
ogris 23:fd15b2f8cf08 528 port.printf("W%c%c\n", 27, 27);
ogris 23:fd15b2f8cf08 529 __disable_irq();
ogris 23:fd15b2f8cf08 530 for (char i = 0; i < 9; i++)
ladner 22:2d75e7ec402f 531 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 532 for (char i = 0; i < 4; i++)
ogris 23:fd15b2f8cf08 533 if (Drann == i)
ogris 23:fd15b2f8cf08 534 Dice.WriteLed(Farben[i]);
ogris 23:fd15b2f8cf08 535 else
ogris 23:fd15b2f8cf08 536 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 537 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 538 __enable_irq();
ogris 23:fd15b2f8cf08 539 break;
ladner 13:cb068deacb6c 540 case 1: //Animation
ogris 23:fd15b2f8cf08 541 char dice_help = 0xFF - (1 << dicePos);
ogris 23:fd15b2f8cf08 542 myled = (myled & 0xFF0) | (5) | (diceTick << 1);
ogris 23:fd15b2f8cf08 543 //myled = (myled&0xF)|(dice_help<<4);
ogris 23:fd15b2f8cf08 544
ogris 23:fd15b2f8cf08 545 port.printf("W%c%c\n", 27 + diceTick + ((dice_help & 0x1F) << 1), 27 + ((dice_help & 0xE0) >> 5));
ogris 23:fd15b2f8cf08 546 __disable_irq();
ogris 23:fd15b2f8cf08 547 if (diceTick)
ladner 22:2d75e7ec402f 548 Dice.WriteLed(DiceC);
ladner 22:2d75e7ec402f 549 else
ladner 22:2d75e7ec402f 550 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 551 for (char i = 0; i < 8; i++)
ogris 23:fd15b2f8cf08 552 if (dice_help & (1 << i))
ogris 23:fd15b2f8cf08 553 Dice.WriteLed(DiceC);
ogris 23:fd15b2f8cf08 554 else
ogris 23:fd15b2f8cf08 555 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 556 __enable_irq();
ogris 23:fd15b2f8cf08 557 break;
ladner 13:cb068deacb6c 558 case 2://Case 3 = Case 2 ->Anzeigen
ogris 23:fd15b2f8cf08 559 myled = (myled & 0xFF0) | (diceNum);
ogris 23:fd15b2f8cf08 560 //myled=myled|0xFF0;
ogris 23:fd15b2f8cf08 561
ogris 23:fd15b2f8cf08 562 port.printf("W%c%c\n", 27 + (diceDecode[diceNum - 1] & 0x3F), 27 + ((diceDecode[diceNum - 1] & 0x1C0) >> 6));
ogris 23:fd15b2f8cf08 563 __disable_irq();
ogris 23:fd15b2f8cf08 564 for (char i = 0; i < 9; i++)
ogris 23:fd15b2f8cf08 565 if (diceDecode[diceNum - 1] & (1 << i))
ogris 23:fd15b2f8cf08 566 Dice.WriteLed(DiceC);
ogris 23:fd15b2f8cf08 567 else
ogris 23:fd15b2f8cf08 568 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 569 __enable_irq();
ogris 23:fd15b2f8cf08 570 break;
ladner 1:0eaa7682f7e1 571 case 3:
ogris 23:fd15b2f8cf08 572 myled = (myled & 0xFF0) | (diceNum) | 8;
ogris 23:fd15b2f8cf08 573 //myled=myled|0xFF0;
ogris 23:fd15b2f8cf08 574
ogris 23:fd15b2f8cf08 575 port.printf("W%c%c\n", 27 + (diceDecode[diceNum - 1] & 0x3F), 27 + ((diceDecode[diceNum - 1] & 0x1C0) >> 6));
ogris 23:fd15b2f8cf08 576 __disable_irq();
ladner 22:2d75e7ec402f 577 for (char i = 0; i < 9; i++)
ogris 23:fd15b2f8cf08 578 if (diceDecode[diceNum - 1] & (1 << i))
ladner 22:2d75e7ec402f 579 Dice.WriteLed(DiceC);
ladner 22:2d75e7ec402f 580 else
ladner 22:2d75e7ec402f 581 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 582 __enable_irq();
ogris 23:fd15b2f8cf08 583 break;
ogris 23:fd15b2f8cf08 584 case 4://Spiel beendet!
ogris 23:fd15b2f8cf08 585 myled = (myled & 0xFF0);
ogris 23:fd15b2f8cf08 586 port.printf("W%c%c\n", 27, 27);
ogris 23:fd15b2f8cf08 587 __disable_irq();
ogris 23:fd15b2f8cf08 588 for (char i = 0; i < 14; i++)
ladner 22:2d75e7ec402f 589 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 590 __enable_irq();
ogris 23:fd15b2f8cf08 591 break;
ogris 23:fd15b2f8cf08 592 case 5://Menu
ogris 23:fd15b2f8cf08 593 if (diceTick)
ogris 23:fd15b2f8cf08 594 port.printf("W%c%c\n", 27 + (diceDecode[6] & 0x3F), 27 + ((diceDecode[6] & 0x1C0) >> 6));
ogris 23:fd15b2f8cf08 595 else
ogris 23:fd15b2f8cf08 596 port.printf("W%c%c\n", 27, 27);
ogris 23:fd15b2f8cf08 597 __disable_irq();
ogris 23:fd15b2f8cf08 598 if (diceTick)
ogris 23:fd15b2f8cf08 599 for (char i = 0; i < 9; i++)
ogris 23:fd15b2f8cf08 600 if (diceDecode[6] & (1 << i))
ogris 23:fd15b2f8cf08 601 Dice.WriteLed(DiceC);
ogris 23:fd15b2f8cf08 602 else
ogris 23:fd15b2f8cf08 603 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 604 else
ogris 23:fd15b2f8cf08 605 for (char i = 0; i < 9; i++)
ogris 23:fd15b2f8cf08 606 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 607 for (char i = 0; i < 4; i++)
ogris 23:fd15b2f8cf08 608 Dice.WriteLed(Background);
ogris 23:fd15b2f8cf08 609 Dice.WriteLed(TestC);
ogris 23:fd15b2f8cf08 610 __enable_irq();
ogris 23:fd15b2f8cf08 611 break;
ladner 29:42646ca2f941 612 default:
ladner 29:42646ca2f941 613 break;
ladner 1:0eaa7682f7e1 614 }
ladner 0:e97a6a69fe4b 615 }
ladner 1:0eaa7682f7e1 616
ladner 1:0eaa7682f7e1 617 void FieldGenerate()
ladner 1:0eaa7682f7e1 618 {
ogris 23:fd15b2f8cf08 619 for (char i = 0; i < Spieler * Feldgrose; i++)
ogris 23:fd15b2f8cf08 620 Field[i] = 0; //Feld zurücksetzen
ogris 23:fd15b2f8cf08 621 for (char i = 0; i < Spieler * Steine; i++)
ladner 13:cb068deacb6c 622 {
ogris 23:fd15b2f8cf08 623 Ziel[i] = 0;
ogris 23:fd15b2f8cf08 624 Start[i] = 0;
ladner 13:cb068deacb6c 625 }
ogris 23:fd15b2f8cf08 626
ogris 23:fd15b2f8cf08 627 for (char i = 0; i < Spieler; i++)
ogris 23:fd15b2f8cf08 628 for (char j = 0; j < Steine; j++)
ladner 1:0eaa7682f7e1 629 {
ogris 23:fd15b2f8cf08 630 if (PlayPos[(i << 2) | j] >= Steine)
ladner 1:0eaa7682f7e1 631 {
ogris 23:fd15b2f8cf08 632 if (PlayPos[(i << 2) | j] >= (Spieler * Feldgrose + Steine))
ladner 1:0eaa7682f7e1 633 {
ladner 13:cb068deacb6c 634 //if (PlayPos[(i<<2)|j] < Steine * Feldgrose+Steine*2)
ogris 23:fd15b2f8cf08 635 Ziel[(PlayPos[(i << 2) | j] - (Spieler * Feldgrose + Steine)) | (i << 2)] = ((i << 2) | j) + 1;
ogris 23:fd15b2f8cf08 636 //Ziel PlayPos[(i<<2)|j] - 44
ladner 1:0eaa7682f7e1 637 }
ladner 1:0eaa7682f7e1 638 else
ogris 23:fd15b2f8cf08 639 Field[(PlayPos[(i << 2) | j] - Steine + Feldgrose * i) % (Steine * Feldgrose)] = ((i << 2) | j) + 1;
ogris 23:fd15b2f8cf08 640 //Feld (PlayPos[(i<<2)|j]- 4 + 10 * i) % 40
ladner 1:0eaa7682f7e1 641 }
ladner 1:0eaa7682f7e1 642 else
ogris 23:fd15b2f8cf08 643 Start[PlayPos[(i << 2) | j] | (i << 2)] = ((i << 2) | j) + 1;
ogris 23:fd15b2f8cf08 644 //start PlayPos[(i<<2)|j]
ladner 1:0eaa7682f7e1 645 }
ladner 1:0eaa7682f7e1 646 }
ladner 1:0eaa7682f7e1 647
ladner 1:0eaa7682f7e1 648 void FieldPrint()
ladner 1:0eaa7682f7e1 649 {
ladner 1:0eaa7682f7e1 650 port.printf("F");
ogris 23:fd15b2f8cf08 651 for (char i = 0; i < Spieler * Steine; i++)
ladner 1:0eaa7682f7e1 652 {
ogris 23:fd15b2f8cf08 653 port.printf("%c", 27 + PlayPos[i]);
ladner 1:0eaa7682f7e1 654 }
ladner 1:0eaa7682f7e1 655 port.printf("\n");
ladner 1:0eaa7682f7e1 656 }
ladner 1:0eaa7682f7e1 657
ladner 1:0eaa7682f7e1 658 void FeldPrint()
ladner 1:0eaa7682f7e1 659 {
ladner 1:0eaa7682f7e1 660 __disable_irq();
ogris 23:fd15b2f8cf08 661 for (char i = 0; i < Spieler * Feldgrose; i++)
ogris 23:fd15b2f8cf08 662 if (Field[i] > 0)
ogris 23:fd15b2f8cf08 663 Feld.WriteLed(Farben[((Field[i] - 1) & 0x0C) >> 2]);
ladner 1:0eaa7682f7e1 664 else
ladner 13:cb068deacb6c 665 Feld.WriteLed(Background);
ladner 13:cb068deacb6c 666 //char Start[Spieler];
ladner 13:cb068deacb6c 667 //char Ziel[Spieler];
ladner 13:cb068deacb6c 668 char i = 0;
ladner 13:cb068deacb6c 669 char j = 0;
ogris 23:fd15b2f8cf08 670 while (i < Steine * Spieler)
ladner 13:cb068deacb6c 671 {
ogris 23:fd15b2f8cf08 672 if (Start[i] > 0)
ogris 23:fd15b2f8cf08 673 Home.WriteLed(Farben[((Start[i] - 1) & 0x0C) >> 2]);
ladner 13:cb068deacb6c 674 else
ladner 13:cb068deacb6c 675 Home.WriteLed(Background);
ladner 13:cb068deacb6c 676 i++;
ladner 13:cb068deacb6c 677 }
ladner 13:cb068deacb6c 678 do
ladner 13:cb068deacb6c 679 {
ogris 23:fd15b2f8cf08 680 if (Ziel[j] > 0)
ogris 23:fd15b2f8cf08 681 Home.WriteLed(Farben[((Ziel[j] - 1) & 0x0C) >> 2]);
ladner 13:cb068deacb6c 682 else
ladner 13:cb068deacb6c 683 Home.WriteLed(Background);
ladner 13:cb068deacb6c 684 j++;
ogris 23:fd15b2f8cf08 685 } while (j < Steine * Spieler);
ladner 1:0eaa7682f7e1 686 __enable_irq();
ladner 0:e97a6a69fe4b 687 }
ladner 1:0eaa7682f7e1 688
ladner 13:cb068deacb6c 689 void AnimCal()
ladner 13:cb068deacb6c 690 {
ogris 23:fd15b2f8cf08 691 for (char i = 0; i < Spieler * Feldgrose; i++)
ogris 23:fd15b2f8cf08 692 AnimField[i] = 0; //Feld zurücksetzen
ogris 23:fd15b2f8cf08 693 for (char i = 0; i < Spieler * Steine; i++)
ladner 13:cb068deacb6c 694 {
ogris 23:fd15b2f8cf08 695 AnimZiel[i] = 0;
ogris 23:fd15b2f8cf08 696 AnimStart[i] = 0;
ladner 13:cb068deacb6c 697 }
ogris 23:fd15b2f8cf08 698 AnimDo = 0;//Feld_Animieren,Start Animieren, Ziel Animieren
ladner 13:cb068deacb6c 699
ladner 13:cb068deacb6c 700 //char AnimDo; //Feld_Animieren,Start Animieren, Ziel Animierenw
ladner 1:0eaa7682f7e1 701
ogris 23:fd15b2f8cf08 702 for (char i = 0; i < Spieler * Steine; i++) //Hauptschleife
ogris 23:fd15b2f8cf08 703 if (i == ((Drann << 2) | selected))
ladner 13:cb068deacb6c 704 {
ogris 23:fd15b2f8cf08 705 if (moglich[selected] == 1)
ladner 13:cb068deacb6c 706 {
ogris 23:fd15b2f8cf08 707 if (PlayPos[i] < Steine) //nicht Draußsen
ladner 13:cb068deacb6c 708 {
ogris 23:fd15b2f8cf08 709 AnimDo = AnimDo | 3;//Feld&Start
ladner 13:cb068deacb6c 710 AnimPos[i] = Steine; //Ausfahren
ogris 23:fd15b2f8cf08 711 char temp = Field[Drann * Feldgrose]; //Ansetzfeld wird analysiert
ogris 23:fd15b2f8cf08 712 if (temp > 0)
ladner 13:cb068deacb6c 713 {
ladner 13:cb068deacb6c 714 //myled = myled|temp<<8;
ladner 13:cb068deacb6c 715 temp--; //(Spieler<<2)|Stein
ladner 13:cb068deacb6c 716 AnimPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 13:cb068deacb6c 717 }
ladner 13:cb068deacb6c 718 }
ladner 13:cb068deacb6c 719 else //Draußen
ladner 13:cb068deacb6c 720 {
ogris 23:fd15b2f8cf08 721 AnimDo = AnimDo | 1; //Feld
ogris 23:fd15b2f8cf08 722 AnimPos[i] = PlayPos[i] + diceNum; ; //Weitersetzen
ladner 13:cb068deacb6c 723 //PlayPos[(Drann<<2)|selected]
ogris 23:fd15b2f8cf08 724 if (AnimPos[i] < Steine + Spieler * Feldgrose) //noch nicht drinnen
ladner 13:cb068deacb6c 725 {
ladner 13:cb068deacb6c 726 //Field>0
ogris 23:fd15b2f8cf08 727 char temp = Field[(AnimPos[i] - Steine + Feldgrose * Drann) % (Feldgrose * Steine)];
ogris 23:fd15b2f8cf08 728 if (temp > 0)
ladner 13:cb068deacb6c 729 {
ogris 23:fd15b2f8cf08 730 AnimDo = AnimDo | 3;//Feld&Start
ladner 13:cb068deacb6c 731 //myled = myled|temp<<8;
ladner 13:cb068deacb6c 732 temp--; //(Spieler<<2)|Stein
ladner 13:cb068deacb6c 733 AnimPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 13:cb068deacb6c 734 }
ladner 13:cb068deacb6c 735 }
ladner 13:cb068deacb6c 736 else
ogris 23:fd15b2f8cf08 737 AnimDo = AnimDo | 7;//Feld&Ziel (Start auch wegen Hardware)
ladner 13:cb068deacb6c 738 }
ladner 13:cb068deacb6c 739 }
ladner 13:cb068deacb6c 740 else
ladner 13:cb068deacb6c 741 AnimPos[i] = PlayPos[i]; //Spieler-pos Kopieren, weil es nicht möglich ist...
ladner 13:cb068deacb6c 742 }
ladner 13:cb068deacb6c 743 else
ladner 13:cb068deacb6c 744 AnimPos[i] = PlayPos[i]; //Spieler-pos Kopieren
ladner 13:cb068deacb6c 745 //FieldGenerate -> Anim...
ogris 23:fd15b2f8cf08 746 for (char i = 0; i < Spieler; i++)
ogris 23:fd15b2f8cf08 747 for (char j = 0; j < Steine; j++)
ladner 13:cb068deacb6c 748 {
ogris 23:fd15b2f8cf08 749 if (AnimPos[(i << 2) | j] >= Steine)
ladner 13:cb068deacb6c 750 {
ogris 23:fd15b2f8cf08 751 if (AnimPos[(i << 2) | j] >= (Spieler * Feldgrose + Steine))
ladner 13:cb068deacb6c 752 {
ladner 13:cb068deacb6c 753 //if (AnimPos[(i<<2)|j] < Steine * Feldgrose+Steine*2)
ogris 23:fd15b2f8cf08 754 AnimZiel[(AnimPos[(i << 2) | j] - (Spieler * Feldgrose + Steine)) | (i << 2)] = ((i << 2) | j) + 1;
ogris 23:fd15b2f8cf08 755 //AnimZiel AnimPos[(i<<2)|j] - 44
ladner 13:cb068deacb6c 756 }
ladner 13:cb068deacb6c 757 else
ogris 23:fd15b2f8cf08 758 AnimField[(AnimPos[(i << 2) | j] - Steine + Feldgrose * i) % (Steine * Feldgrose)] = ((i << 2) | j) + 1;
ogris 23:fd15b2f8cf08 759 //Feld (AnimPos[(i<<2)|j]- 4 + 10 * i) % 40
ladner 13:cb068deacb6c 760 }
ladner 13:cb068deacb6c 761 else
ogris 23:fd15b2f8cf08 762 AnimStart[AnimPos[(i << 2) | j] | (i << 2)] = ((i << 2) | j) + 1;
ogris 23:fd15b2f8cf08 763 //start AnimPos[(i<<2)|j]
ladner 13:cb068deacb6c 764 }
ladner 13:cb068deacb6c 765 }
ladner 13:cb068deacb6c 766
ladner 13:cb068deacb6c 767 void MoveRun() //Animation (zyklisch)
ladner 0:e97a6a69fe4b 768 {
ogris 23:fd15b2f8cf08 769 if (MoveShow)
ladner 13:cb068deacb6c 770 MoveShow = 0;
ladner 1:0eaa7682f7e1 771 else
ladner 1:0eaa7682f7e1 772 MoveShow = 1;
ladner 13:cb068deacb6c 773
ogris 23:fd15b2f8cf08 774 if (MoveShow > 0)
ladner 0:e97a6a69fe4b 775 {
ladner 1:0eaa7682f7e1 776 port.printf("F");
ogris 23:fd15b2f8cf08 777 for (char i = 0; i < Spieler * Steine; i++)
ladner 13:cb068deacb6c 778 {
ogris 23:fd15b2f8cf08 779 port.printf("%c", 27 + AnimPos[i]);
ladner 13:cb068deacb6c 780 }
ladner 13:cb068deacb6c 781 port.printf("\n");
ogris 23:fd15b2f8cf08 782
ladner 13:cb068deacb6c 783 __disable_irq();
ogris 23:fd15b2f8cf08 784 if ((AnimDo & 1) > 0)
ladner 13:cb068deacb6c 785 {
ogris 23:fd15b2f8cf08 786 for (char i = 0; i < Spieler * Feldgrose; i++)
ogris 23:fd15b2f8cf08 787 if (AnimField[i] > 0)
ogris 23:fd15b2f8cf08 788 Feld.WriteLed(Farben[((AnimField[i] - 1) & 0x0C) >> 2]);
ladner 13:cb068deacb6c 789 else
ladner 13:cb068deacb6c 790 Feld.WriteLed(Background);
ladner 13:cb068deacb6c 791 }
ladner 13:cb068deacb6c 792 //char Start[Spieler];
ladner 13:cb068deacb6c 793 //char Ziel[Spieler];
ladner 13:cb068deacb6c 794 char i = 0;
ladner 13:cb068deacb6c 795 char j = 0;
ogris 23:fd15b2f8cf08 796 if ((AnimDo & 2) > 0)
ladner 13:cb068deacb6c 797 {
ogris 23:fd15b2f8cf08 798 while (i < Steine * Spieler)
ladner 1:0eaa7682f7e1 799 {
ogris 23:fd15b2f8cf08 800 if (AnimStart[i] > 0)
ogris 23:fd15b2f8cf08 801 Home.WriteLed(Farben[((AnimStart[i] - 1) & 0x0C) >> 2]);
ladner 1:0eaa7682f7e1 802 else
ladner 13:cb068deacb6c 803 Home.WriteLed(Background);
ladner 13:cb068deacb6c 804 i++;
ladner 1:0eaa7682f7e1 805 }
ladner 13:cb068deacb6c 806 }
ogris 23:fd15b2f8cf08 807 if ((AnimDo & 4) > 0)
ladner 13:cb068deacb6c 808 {
ladner 13:cb068deacb6c 809 do
ladner 13:cb068deacb6c 810 {
ogris 23:fd15b2f8cf08 811 if (AnimZiel[j] > 0)
ogris 23:fd15b2f8cf08 812 Home.WriteLed(Farben[((AnimZiel[j] - 1) & 0x0C) >> 2]);
ladner 13:cb068deacb6c 813 else
ladner 13:cb068deacb6c 814 Home.WriteLed(Background);
ladner 13:cb068deacb6c 815 j++;
ogris 23:fd15b2f8cf08 816 } while (j < Steine * Spieler);
ladner 13:cb068deacb6c 817 }
ladner 1:0eaa7682f7e1 818 __enable_irq();
ladner 1:0eaa7682f7e1 819 }
ladner 1:0eaa7682f7e1 820 else
ladner 13:cb068deacb6c 821 {
ladner 1:0eaa7682f7e1 822 FieldPrint();
ladner 13:cb068deacb6c 823 __disable_irq();
ogris 23:fd15b2f8cf08 824 if ((AnimDo & 1) > 0)
ladner 13:cb068deacb6c 825 {
ogris 23:fd15b2f8cf08 826 for (char i = 0; i < Spieler * Feldgrose; i++)
ogris 23:fd15b2f8cf08 827 if (Field[i] > 0)
ogris 23:fd15b2f8cf08 828 Feld.WriteLed(Farben[((Field[i] - 1) & 0x0C) >> 2]);
ladner 13:cb068deacb6c 829 else
ladner 13:cb068deacb6c 830 Feld.WriteLed(Background);
ladner 13:cb068deacb6c 831 }
ladner 13:cb068deacb6c 832 //char Start[Spieler];
ladner 13:cb068deacb6c 833 //char Ziel[Spieler];
ladner 13:cb068deacb6c 834 char i = 0;
ladner 13:cb068deacb6c 835 char j = 0;
ogris 23:fd15b2f8cf08 836 if ((AnimDo & 2) > 0)
ladner 13:cb068deacb6c 837 {
ogris 23:fd15b2f8cf08 838 while (i < Steine * Spieler)
ladner 13:cb068deacb6c 839 {
ogris 23:fd15b2f8cf08 840 if (Start[i] > 0)
ogris 23:fd15b2f8cf08 841 Home.WriteLed(Farben[((Start[i] - 1) & 0x0C) >> 2]);
ladner 13:cb068deacb6c 842 else
ladner 13:cb068deacb6c 843 Home.WriteLed(Background);
ladner 13:cb068deacb6c 844 i++;
ladner 13:cb068deacb6c 845 }
ladner 13:cb068deacb6c 846 }
ogris 23:fd15b2f8cf08 847 if ((AnimDo & 4) > 0)
ladner 13:cb068deacb6c 848 {
ladner 13:cb068deacb6c 849 do
ladner 13:cb068deacb6c 850 {
ogris 23:fd15b2f8cf08 851 if (Ziel[j] > 0)
ogris 23:fd15b2f8cf08 852 Home.WriteLed(Farben[((Ziel[j] - 1) & 0x0C) >> 2]);
ladner 13:cb068deacb6c 853 else
ladner 13:cb068deacb6c 854 Home.WriteLed(Background);
ladner 13:cb068deacb6c 855 j++;
ogris 23:fd15b2f8cf08 856 } while (j < Steine * Spieler);
ladner 13:cb068deacb6c 857 }
ladner 13:cb068deacb6c 858 __enable_irq();
ladner 13:cb068deacb6c 859 }
ladner 1:0eaa7682f7e1 860 }
ladner 1:0eaa7682f7e1 861
ladner 1:0eaa7682f7e1 862 void moveNext()
ladner 1:0eaa7682f7e1 863 {
ogris 23:fd15b2f8cf08 864 selected = (selected + 1) % Steine;
ogris 23:fd15b2f8cf08 865 for (char i = 0; i < Steine; i++)
ogris 23:fd15b2f8cf08 866 if (moglich[selected] > 0)
ladner 1:0eaa7682f7e1 867 break;
ladner 1:0eaa7682f7e1 868 else
ogris 23:fd15b2f8cf08 869 selected = (selected + 1) % Steine;
ladner 13:cb068deacb6c 870 AnimCal();
ladner 1:0eaa7682f7e1 871 }
ladner 1:0eaa7682f7e1 872
ladner 1:0eaa7682f7e1 873 void moveLast()
ladner 1:0eaa7682f7e1 874 {
ogris 23:fd15b2f8cf08 875 selected = (selected + 3) % Steine;
ogris 23:fd15b2f8cf08 876 for (char i = 0; i < Steine; i++)
ogris 23:fd15b2f8cf08 877 if (moglich[selected] > 0)
ladner 1:0eaa7682f7e1 878 break;
ladner 1:0eaa7682f7e1 879 else
ogris 23:fd15b2f8cf08 880 selected = (selected + 3) % Steine;
ladner 13:cb068deacb6c 881 AnimCal();
ladner 1:0eaa7682f7e1 882 }
ladner 1:0eaa7682f7e1 883
ladner 1:0eaa7682f7e1 884 void GameCal()
ladner 1:0eaa7682f7e1 885 {
ladner 1:0eaa7682f7e1 886 char drausen = 0; //Ziel
ladner 1:0eaa7682f7e1 887 char feld = 0;
ladner 1:0eaa7682f7e1 888 char drinnen = 0; //start
ladner 2:3a90b20958ff 889 char moglichAny = 1;
ogris 23:fd15b2f8cf08 890 for (char i = 0; i < Steine; i++)
ladner 1:0eaa7682f7e1 891 {
ogris 23:fd15b2f8cf08 892 if (PlayPos[(Drann << 2) | i] >= Steine)
ladner 0:e97a6a69fe4b 893 {
ogris 23:fd15b2f8cf08 894 if (PlayPos[(Drann << 2) | i] >= (Steine + Spieler * Feldgrose))
ladner 1:0eaa7682f7e1 895 drausen++;
ladner 1:0eaa7682f7e1 896 else
ladner 1:0eaa7682f7e1 897 feld++;
ladner 0:e97a6a69fe4b 898 }
ladner 1:0eaa7682f7e1 899 else
ladner 1:0eaa7682f7e1 900 drinnen++;
ogris 23:fd15b2f8cf08 901 moglich[i] = 0;
ladner 1:0eaa7682f7e1 902 }
ladner 1:0eaa7682f7e1 903 //Berechnung
ladner 2:3a90b20958ff 904 //Ausfahren:
ladner 2:3a90b20958ff 905 //drinnen >0 (Noch Spieler drinnen?)
ladner 2:3a90b20958ff 906 //Startfeld ist von Spieler belegt
ladner 2:3a90b20958ff 907 //Ziel ist frei
ogris 23:fd15b2f8cf08 908 if ((drinnen > 0) && (moglichAny))
ladner 2:3a90b20958ff 909 {
ladner 4:2acb70f9cd22 910 //port.printf("LDrinnen\n");
ogris 23:fd15b2f8cf08 911 if (((((Field[Feldgrose * Drann] - 1) & 0x0C) >> 2) == Drann) && (Field[Feldgrose * Drann] > 0))
ladner 2:3a90b20958ff 912 {
ladner 4:2acb70f9cd22 913 //port.printf("LAusfahrt Belegt\n");
ogris 23:fd15b2f8cf08 914 if (((((Field[(Feldgrose * Drann + diceNum) % (Feldgrose * Spieler)] - 1) & 0x0C) >> 2) != Drann) || (Field[(Feldgrose * Drann + diceNum) % (Feldgrose * Spieler)] == 0))
ladner 2:3a90b20958ff 915 {
ladner 4:2acb70f9cd22 916 //port.printf("LZiel frei (Done)\n");
ogris 23:fd15b2f8cf08 917 moglich[(Field[Feldgrose * Drann] - 1) & 0x03] = 1;
ogris 23:fd15b2f8cf08 918 moglichAny = 0;
ladner 2:3a90b20958ff 919 }
ladner 2:3a90b20958ff 920 }
ladner 0:e97a6a69fe4b 921 }
ogris 23:fd15b2f8cf08 922
ladner 2:3a90b20958ff 923 //Ansetzen
ladner 2:3a90b20958ff 924 // 6 gewürfelt
ladner 2:3a90b20958ff 925 //drinnen>0
ladner 2:3a90b20958ff 926 //Start-feld ist nicht von Spieler belegt
ogris 23:fd15b2f8cf08 927 if ((drinnen > 0) && (moglichAny) && (diceNum == 6))
ladner 0:e97a6a69fe4b 928 {
ladner 4:2acb70f9cd22 929 //port.printf("LDrinnen & 6 \n");
ogris 23:fd15b2f8cf08 930 if (((((Field[Feldgrose * Drann] - 1) & 0x0C) >> 2) != Drann) || (Field[Feldgrose * Drann] == 0))
ladner 1:0eaa7682f7e1 931 {
ladner 4:2acb70f9cd22 932 //port.printf("LAusfahrt frei (Done...Schleife)\n");
ogris 23:fd15b2f8cf08 933 moglichAny = 0;
ogris 23:fd15b2f8cf08 934 for (char i = 0; i < Steine; i++)
ogris 23:fd15b2f8cf08 935 if (PlayPos[(Drann << 2) | i] < Steine)
ogris 23:fd15b2f8cf08 936 moglich[i] = 1;
ladner 1:0eaa7682f7e1 937 }
ladner 2:3a90b20958ff 938 }
ogris 23:fd15b2f8cf08 939
ladner 2:3a90b20958ff 940 //Fahren
ogris 23:fd15b2f8cf08 941 if (moglichAny)
ladner 2:3a90b20958ff 942 {
ladner 4:2acb70f9cd22 943 //port.printf("LNormal...\n");
ogris 23:fd15b2f8cf08 944 for (char i = 0; i < Steine; i++)
ladner 0:e97a6a69fe4b 945 {
ogris 23:fd15b2f8cf08 946 if (PlayPos[(Drann << 2) | i] >= Spieler) //Drausen
ladner 1:0eaa7682f7e1 947 {
ogris 23:fd15b2f8cf08 948 if ((PlayPos[(Drann << 2) | i] + diceNum) < (Steine + Feldgrose * Spieler))//Zeil noch am Feld
ladner 1:0eaa7682f7e1 949 {
ogris 23:fd15b2f8cf08 950 char temp = Field[(PlayPos[(Drann << 2) | i] - Steine + Feldgrose * Drann + diceNum) % (Feldgrose * Steine)]; //zielfeld
ogris 23:fd15b2f8cf08 951 if (temp > 0)
ladner 1:0eaa7682f7e1 952 {
ladner 1:0eaa7682f7e1 953 //myled = myled|temp<<8;
ladner 1:0eaa7682f7e1 954 temp--; //(Spieler<<2)|Stein
ogris 23:fd15b2f8cf08 955 temp = (temp & 0xC) >> 2;//Spieler
ogris 23:fd15b2f8cf08 956 if (temp != Drann) //zielfeld ist nicht ich
ogris 23:fd15b2f8cf08 957 moglich[i] = 1;
ladner 1:0eaa7682f7e1 958 }
ladner 2:3a90b20958ff 959 else//Feld ist leer
ogris 23:fd15b2f8cf08 960 moglich[i] = 1;
ladner 1:0eaa7682f7e1 961 }
ladner 2:3a90b20958ff 962 else
ladner 2:3a90b20958ff 963 {//Kollisionsberechnung ins Ziel...
ogris 23:fd15b2f8cf08 964 if ((PlayPos[(Drann << 2) | i] + diceNum) < (Steine * 2 + Feldgrose * Spieler))//Schiest nicht über das Ziel hinaus...
ogris 23:fd15b2f8cf08 965 if (Ziel[(PlayPos[(Drann << 2) | i] - (Steine + Feldgrose * Spieler) + diceNum) | (Drann << 2)] == 0)//Zielfeld ist leer (enthält ja nur mich)
ogris 23:fd15b2f8cf08 966 moglich[i] = 1;
ladner 2:3a90b20958ff 967 }
ladner 1:0eaa7682f7e1 968 }
ladner 1:0eaa7682f7e1 969 }
ladner 1:0eaa7682f7e1 970 }
ogris 23:fd15b2f8cf08 971
ladner 13:cb068deacb6c 972
ladner 13:cb068deacb6c 973 //Anzeigen der Möglichkeiten & überhaupt möglich?
ogris 23:fd15b2f8cf08 974 moglichAny = 0;
ogris 23:fd15b2f8cf08 975 myled = myled & 0xF0F;
ogris 23:fd15b2f8cf08 976 for (char i = 0; i < Steine; i++)
ladner 2:3a90b20958ff 977 {
ogris 23:fd15b2f8cf08 978 myled = myled | (moglich[i] << i + 4);
ladner 1:0eaa7682f7e1 979 moglichAny = moglichAny | moglich[i];
ladner 2:3a90b20958ff 980 }
ladner 13:cb068deacb6c 981
ogris 23:fd15b2f8cf08 982 if (moglichAny) //Fahren möglich
ladner 1:0eaa7682f7e1 983 {
ogris 23:fd15b2f8cf08 984 selected = (last[Drann] + Steine - 1) % Steine;
ladner 1:0eaa7682f7e1 985 moveNext();
ogris 23:fd15b2f8cf08 986 MoveAnim.attach(&MoveRun, 0.3);
ladner 1:0eaa7682f7e1 987 }
ladner 13:cb068deacb6c 988 else //Fahren nicht möglich
ladner 1:0eaa7682f7e1 989 {
ogris 23:fd15b2f8cf08 990 if (feld <= 0) //keine am Feld
ladner 1:0eaa7682f7e1 991 {
ogris 23:fd15b2f8cf08 992 if (count < 2)
ladner 4:2acb70f9cd22 993 {
ogris 23:fd15b2f8cf08 994 diceEn = 0;
ladner 4:2acb70f9cd22 995 count++;
ogris 23:fd15b2f8cf08 996 port.printf("LCount: %d\n", count);
ladner 4:2acb70f9cd22 997 }
ladner 0:e97a6a69fe4b 998 }
ladner 13:cb068deacb6c 999 else //Fahren nicht möglich,spieler am Feld & 6 gewürfelt
ladner 13:cb068deacb6c 1000 {
ogris 23:fd15b2f8cf08 1001 if (diceNum == 6)
ogris 23:fd15b2f8cf08 1002 diceEn = 0;
ladner 13:cb068deacb6c 1003 }
ladner 1:0eaa7682f7e1 1004 }
ladner 1:0eaa7682f7e1 1005 }
ladner 1:0eaa7682f7e1 1006
ladner 1:0eaa7682f7e1 1007 void MoveDo()
ladner 1:0eaa7682f7e1 1008 {
ogris 23:fd15b2f8cf08 1009 if ((diceEn > 1) && (diceEn < 4))
ladner 1:0eaa7682f7e1 1010 {
ogris 23:fd15b2f8cf08 1011 if (moglich[selected] == 1)
ladner 1:0eaa7682f7e1 1012 {
ogris 23:fd15b2f8cf08 1013 if (PlayPos[(Drann << 2) | selected] < Steine) //nicht Draußsen
ladner 1:0eaa7682f7e1 1014 {
ogris 23:fd15b2f8cf08 1015 PlayPos[(Drann << 2) | selected] = Steine; //Ausfahren
ogris 23:fd15b2f8cf08 1016 char temp = Field[Drann * Feldgrose]; //Ansetzfeld wird analysiert
ogris 23:fd15b2f8cf08 1017 if (temp > 0)
ladner 1:0eaa7682f7e1 1018 {
ladner 1:0eaa7682f7e1 1019 //myled = myled|temp<<8;
ladner 1:0eaa7682f7e1 1020 temp--; //(Spieler<<2)|Stein
ladner 1:0eaa7682f7e1 1021 PlayPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 1:0eaa7682f7e1 1022 }
ladner 1:0eaa7682f7e1 1023 }
ladner 13:cb068deacb6c 1024 else //Draußen
ladner 13:cb068deacb6c 1025 {
ogris 23:fd15b2f8cf08 1026 PlayPos[(Drann << 2) | selected] += diceNum; //Weitersetzen
ladner 13:cb068deacb6c 1027 //PlayPos[(Drann<<2)|selected]
ogris 23:fd15b2f8cf08 1028 if (PlayPos[(Drann << 2) | selected] < Steine + Spieler * Feldgrose) //noch nicht drinnen
ladner 13:cb068deacb6c 1029 {
ladner 13:cb068deacb6c 1030 //Field>0
ogris 23:fd15b2f8cf08 1031 char temp = Field[(PlayPos[(Drann << 2) | selected] - Steine + (Feldgrose * Drann)) % (Feldgrose * Steine)];
ogris 23:fd15b2f8cf08 1032 if (temp > 0)
ladner 13:cb068deacb6c 1033 {
ladner 13:cb068deacb6c 1034 //myled = myled|temp<<8;
ladner 13:cb068deacb6c 1035 temp--; //(Spieler<<2)|Stein
ladner 13:cb068deacb6c 1036 PlayPos[temp] = (temp & 0x03); //rücksetzung des Feldes...
ladner 13:cb068deacb6c 1037 }
ladner 13:cb068deacb6c 1038 }
ladner 13:cb068deacb6c 1039 }
ladner 13:cb068deacb6c 1040 //else //nicht möglich
ogris 23:fd15b2f8cf08 1041
ladner 0:e97a6a69fe4b 1042 }
ladner 1:0eaa7682f7e1 1043 MoveAnim.detach();
ogris 23:fd15b2f8cf08 1044 last[Drann] = selected;
ogris 23:fd15b2f8cf08 1045 myled = myled & 0xF0F;
ladner 13:cb068deacb6c 1046 count = 0;
ladner 13:cb068deacb6c 1047 FieldGenerate();
ladner 13:cb068deacb6c 1048 //Check for Win!
ladner 13:cb068deacb6c 1049 char temp = 0;
ladner 13:cb068deacb6c 1050 char j = 0;
ladner 13:cb068deacb6c 1051 char running = 1;
ladner 13:cb068deacb6c 1052 do
ladner 1:0eaa7682f7e1 1053 {
ladner 13:cb068deacb6c 1054 temp = 0;
ladner 13:cb068deacb6c 1055 for (char i = 0; i < Steine; i++)
ogris 23:fd15b2f8cf08 1056 if (Ziel[(Drann << 2) | i] > 0)
ladner 13:cb068deacb6c 1057 temp++;
ogris 23:fd15b2f8cf08 1058 if ((temp >= 4) && (diceEn > 1))
ogris 23:fd15b2f8cf08 1059 port.printf("LSpieler %d hat das Spiel beendet!\n", Drann);
ogris 23:fd15b2f8cf08 1060 if (temp == 4)
ogris 23:fd15b2f8cf08 1061 Drann = (Drann + 1) % Spieler;
ladner 13:cb068deacb6c 1062 else
ladner 13:cb068deacb6c 1063 {
ogris 23:fd15b2f8cf08 1064 if (j == 0)
ladner 13:cb068deacb6c 1065 {
ogris 23:fd15b2f8cf08 1066 if (diceNum < 6)
ogris 23:fd15b2f8cf08 1067 Drann = (Drann + 1) % Spieler;
ladner 13:cb068deacb6c 1068 else
ladner 13:cb068deacb6c 1069 running = 0;
ladner 13:cb068deacb6c 1070 }
ladner 13:cb068deacb6c 1071 else
ladner 13:cb068deacb6c 1072 running = 0;
ogris 23:fd15b2f8cf08 1073
ladner 13:cb068deacb6c 1074 }
ladner 13:cb068deacb6c 1075 diceEn = 0;
ladner 13:cb068deacb6c 1076 j++;
ogris 23:fd15b2f8cf08 1077 } while ((j <= Spieler) & (running > 0));
ogris 23:fd15b2f8cf08 1078 if (running == 1)
ladner 13:cb068deacb6c 1079 {
ladner 13:cb068deacb6c 1080 port.printf("LSpiel beendet!\n");
ladner 13:cb068deacb6c 1081 diceEn = 4;
ladner 1:0eaa7682f7e1 1082 }
ladner 1:0eaa7682f7e1 1083 DicePrint();
ladner 1:0eaa7682f7e1 1084 FieldPrint();
ladner 1:0eaa7682f7e1 1085 FeldPrint();
ogris 23:fd15b2f8cf08 1086 port.printf("LDrann:%d\n", Drann);
ladner 1:0eaa7682f7e1 1087 }
ladner 4:2acb70f9cd22 1088 }
ladner 13:cb068deacb6c 1089
ladner 4:2acb70f9cd22 1090 void ColorPrint(uint32_t color)
ladner 4:2acb70f9cd22 1091 {
ogris 23:fd15b2f8cf08 1092 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 1093 }
ladner 13:cb068deacb6c 1094
ladner 28:94a949b0f03a 1095 //--------------------------------------------------------------------------------------------------
ladner 28:94a949b0f03a 1096
ladner 13:cb068deacb6c 1097 void dreh()
ladner 13:cb068deacb6c 1098 {
ladner 13:cb068deacb6c 1099 char temp = DD;
ogris 23:fd15b2f8cf08 1100 if (DD_last == 3)
ogris 23:fd15b2f8cf08 1101 {
ogris 23:fd15b2f8cf08 1102 if (temp == 0)
ladner 13:cb068deacb6c 1103 DD_last = 0;
ladner 13:cb068deacb6c 1104 }
ladner 13:cb068deacb6c 1105 else
ladner 13:cb068deacb6c 1106 {
ogris 23:fd15b2f8cf08 1107 if (temp == 3)
ladner 13:cb068deacb6c 1108 {
ogris 23:fd15b2f8cf08 1109 if (DD_last == 1)
ladner 13:cb068deacb6c 1110 up();
ogris 23:fd15b2f8cf08 1111 if (DD_last == 2)
ladner 13:cb068deacb6c 1112 down();
ladner 13:cb068deacb6c 1113 }
ladner 13:cb068deacb6c 1114 DD_last = temp;
ladner 13:cb068deacb6c 1115 }
ladner 13:cb068deacb6c 1116 }
ladner 13:cb068deacb6c 1117
ladner 13:cb068deacb6c 1118 void druck()
ladner 13:cb068deacb6c 1119 {
ogris 23:fd15b2f8cf08 1120 if (DD_D == DD_d)
ladner 13:cb068deacb6c 1121 return;
ladner 24:e6620af29329 1122 else
ladner 24:e6620af29329 1123 {
ladner 24:e6620af29329 1124 if (DD_D&&DprellEn)
ladner 24:e6620af29329 1125 {
ladner 24:e6620af29329 1126 accept();
ladner 26:de10b06e7d4d 1127 DprellEn=0;
ladner 24:e6620af29329 1128 }
ladner 24:e6620af29329 1129 if(DD_D==0)
ladner 24:e6620af29329 1130 {
ladner 26:de10b06e7d4d 1131 Dprell.attach_us(&DprellRun,350);
ladner 24:e6620af29329 1132 }
ladner 24:e6620af29329 1133 }
ogris 23:fd15b2f8cf08 1134 DD_d = DD_D;
ladner 13:cb068deacb6c 1135 }
ladner 13:cb068deacb6c 1136
ladner 24:e6620af29329 1137 void DprellRun()
ladner 24:e6620af29329 1138 {
ladner 24:e6620af29329 1139 DprellEn=1;
ladner 24:e6620af29329 1140 }
ladner 24:e6620af29329 1141
ladner 13:cb068deacb6c 1142 char ausfuehren(uint32_t postion)
ladner 13:cb068deacb6c 1143 {
ogris 14:8f3619df12f1 1144 char out = 1;//0 ende der postion
ogris 14:8f3619df12f1 1145 VHS = 0;
ladner 13:cb068deacb6c 1146 switch (postion)
ladner 13:cb068deacb6c 1147 {
ogris 30:3482779d97af 1148 case 0x49:
ogris 14:8f3619df12f1 1149 out = 0;
ogris 30:3482779d97af 1150 //zustand 7 disable
ogris 14:8f3619df12f1 1151 break;
ogris 30:3482779d97af 1152 case 0x89:
ogris 14:8f3619df12f1 1153 out = 0;
ogris 14:8f3619df12f1 1154 //zustand kleinstmöglicher zustand
ogris 14:8f3619df12f1 1155 break;
ogris 30:3482779d97af 1156 case 0xc9:
ogris 14:8f3619df12f1 1157 out = 0;
ogris 14:8f3619df12f1 1158 //zustand groestmoeglich
ogris 14:8f3619df12f1 1159 break;
ogris 30:3482779d97af 1160 case 0x51:
ogris 14:8f3619df12f1 1161 out = 0;
ogris 14:8f3619df12f1 1162 //schmeisszwang
ogris 14:8f3619df12f1 1163 break;
ogris 30:3482779d97af 1164 case 0x91:
ogris 14:8f3619df12f1 1165 out = 0;
ogris 14:8f3619df12f1 1166 //go home first
ogris 14:8f3619df12f1 1167 break;
ogris 30:3482779d97af 1168 case 0xd1:
ogris 14:8f3619df12f1 1169 out = 0;
ogris 14:8f3619df12f1 1170 //ausfahrzwang
ogris 14:8f3619df12f1 1171 break;
ogris 30:3482779d97af 1172 case 0x4b:
ogris 14:8f3619df12f1 1173 out = 0;
ogris 14:8f3619df12f1 1174 //Spiel-Menü:laden
ogris 14:8f3619df12f1 1175 break;
ogris 30:3482779d97af 1176 case 0x8b:
ogris 14:8f3619df12f1 1177 out = 0;
ogris 14:8f3619df12f1 1178 //Spiel-Menü:speichern
ogris 14:8f3619df12f1 1179 break;
ogris 30:3482779d97af 1180 case 0xcb:
ogris 14:8f3619df12f1 1181 out = 0;
ogris 14:8f3619df12f1 1182 //Spiel-Menü:reset
ogris 14:8f3619df12f1 1183 break;
ogris 30:3482779d97af 1184 case 0x53:
ogris 14:8f3619df12f1 1185 out = 0;
ogris 14:8f3619df12f1 1186 //Config:laden
ogris 14:8f3619df12f1 1187 break;
ogris 30:3482779d97af 1188 case 0x93:
ogris 14:8f3619df12f1 1189 out = 0;
ogris 14:8f3619df12f1 1190 //Config:speichern
ogris 14:8f3619df12f1 1191 break;
ogris 30:3482779d97af 1192 case 0xd3:
ogris 14:8f3619df12f1 1193 out = 0;
ogris 14:8f3619df12f1 1194 //Config:reset
ogris 14:8f3619df12f1 1195 break;
ogris 14:8f3619df12f1 1196 case 0x1f:
ogris 14:8f3619df12f1 1197 out = 0;
ogris 14:8f3619df12f1 1198 //Offline:new
ogris 14:8f3619df12f1 1199 break;
ogris 14:8f3619df12f1 1200 case 0x2f:
ogris 14:8f3619df12f1 1201 out = 0;
ogris 14:8f3619df12f1 1202 //Offline:reset
ogris 14:8f3619df12f1 1203 break;
ogris 14:8f3619df12f1 1204 case 0x3f:
ogris 14:8f3619df12f1 1205 out = 0;
ogris 14:8f3619df12f1 1206 //Offline:com
ogris 14:8f3619df12f1 1207 break;
ogris 14:8f3619df12f1 1208 case 0x6:
ogris 14:8f3619df12f1 1209 VHS = 1;
ogris 14:8f3619df12f1 1210 break;
ogris 19:b07fa9e47577 1211 case 0x5d:
ogris 19:b07fa9e47577 1212 out = 0;
ogris 19:b07fa9e47577 1213 //Autoplay->zeit normal
ogris 19:b07fa9e47577 1214 break;
ogris 19:b07fa9e47577 1215 case 0x9d:
ogris 19:b07fa9e47577 1216 out = 0;
ogris 19:b07fa9e47577 1217 //Autoplay->zeit 2x
ogris 19:b07fa9e47577 1218 break;
ogris 19:b07fa9e47577 1219 case 0xdd:
ogris 19:b07fa9e47577 1220 out = 0;
ogris 19:b07fa9e47577 1221 //Autoplay->zeit 4x
ogris 19:b07fa9e47577 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;
ladner 28:94a949b0f03a 1283 case 0x3d:
ladner 28:94a949b0f03a 1284 VHS = 1;
ogris 25:b31b49d277fd 1285 break;
ladner 28:94a949b0f03a 1286
ladner 28:94a949b0f03a 1287 case 0x16:
ladner 28:94a949b0f03a 1288 //Farbe -> 0
ladner 28:94a949b0f03a 1289 if(selctecolor == 0)
ladner 28:94a949b0f03a 1290 TestC = Farben[0];
ladner 28:94a949b0f03a 1291 else
ladner 28:94a949b0f03a 1292 Farben[0] = TestC;
ladner 28:94a949b0f03a 1293 selctecolor = 4;
ogris 27:15a37d3fb5c5 1294 break;
ogris 25:b31b49d277fd 1295 case 0x56:
ogris 25:b31b49d277fd 1296 out = 0;
ogris 25:b31b49d277fd 1297 //Farbe -> R
ladner 28:94a949b0f03a 1298 if(selctecolor == 4)
ladner 28:94a949b0f03a 1299 selctecolor = 2;
ladner 28:94a949b0f03a 1300 else
ladner 28:94a949b0f03a 1301 selctecolor = 4;
ladner 28:94a949b0f03a 1302 break;
ladner 28:94a949b0f03a 1303 case 0x96:
ladner 28:94a949b0f03a 1304 out = 0;
ladner 28:94a949b0f03a 1305 //Farbe -> G
ladner 28:94a949b0f03a 1306 if(selctecolor == 4)
ladner 28:94a949b0f03a 1307 selctecolor = 3;
ladner 28:94a949b0f03a 1308 else
ladner 28:94a949b0f03a 1309 selctecolor = 4;
ladner 28:94a949b0f03a 1310 break;
ladner 28:94a949b0f03a 1311 case 0xd6:
ladner 28:94a949b0f03a 1312 out = 0;
ladner 28:94a949b0f03a 1313 //Farbe -> B
ladner 28:94a949b0f03a 1314 if(selctecolor == 4)
ladner 28:94a949b0f03a 1315 selctecolor = 1;
ladner 28:94a949b0f03a 1316 else
ladner 28:94a949b0f03a 1317 selctecolor = 4;
ladner 28:94a949b0f03a 1318 break;
ladner 28:94a949b0f03a 1319
ladner 28:94a949b0f03a 1320 case 0x26:
ladner 28:94a949b0f03a 1321 //Farbe -> 1
ladner 28:94a949b0f03a 1322 if(selctecolor == 0)
ladner 28:94a949b0f03a 1323 TestC = Farben[1];
ladner 28:94a949b0f03a 1324 else
ladner 28:94a949b0f03a 1325 Farben[1] = TestC;
ladner 28:94a949b0f03a 1326 selctecolor = 4;
ladner 28:94a949b0f03a 1327 break;
ogris 30:3482779d97af 1328 case 0x4a:
ladner 28:94a949b0f03a 1329 out = 0;
ladner 28:94a949b0f03a 1330 //Farbe -> R
ladner 28:94a949b0f03a 1331 if(selctecolor == 4)
ladner 28:94a949b0f03a 1332 selctecolor = 2;
ladner 28:94a949b0f03a 1333 else
ladner 28:94a949b0f03a 1334 selctecolor = 4;
ladner 28:94a949b0f03a 1335 break;
ogris 30:3482779d97af 1336 case 0x8a:
ladner 28:94a949b0f03a 1337 out = 0;
ladner 28:94a949b0f03a 1338 //Farbe -> G
ladner 28:94a949b0f03a 1339 if(selctecolor == 4)
ladner 28:94a949b0f03a 1340 selctecolor = 3;
ladner 28:94a949b0f03a 1341 else
ladner 28:94a949b0f03a 1342 selctecolor = 4;
ladner 28:94a949b0f03a 1343 break;
ogris 30:3482779d97af 1344 case 0xeca:
ladner 28:94a949b0f03a 1345 out = 0;
ladner 28:94a949b0f03a 1346 //Farbe -> B
ladner 28:94a949b0f03a 1347 if(selctecolor == 4)
ladner 28:94a949b0f03a 1348 selctecolor = 1;
ogris 25:b31b49d277fd 1349 else
ladner 28:94a949b0f03a 1350 selctecolor = 4;
ladner 28:94a949b0f03a 1351 break;
ladner 28:94a949b0f03a 1352
ladner 28:94a949b0f03a 1353 case 0x36:
ladner 28:94a949b0f03a 1354 //Farbe -> 2
ladner 28:94a949b0f03a 1355 if(selctecolor == 0)
ladner 28:94a949b0f03a 1356 TestC = Farben[2];
ladner 28:94a949b0f03a 1357 else
ladner 28:94a949b0f03a 1358 Farben[2] = TestC;
ladner 28:94a949b0f03a 1359 selctecolor = 4;
ladner 28:94a949b0f03a 1360 break;
ladner 28:94a949b0f03a 1361 case 0x76:
ladner 28:94a949b0f03a 1362 out = 0;
ladner 28:94a949b0f03a 1363 //Farbe -> R
ladner 28:94a949b0f03a 1364 if(selctecolor == 4)
ladner 28:94a949b0f03a 1365 selctecolor = 2;
ladner 28:94a949b0f03a 1366 else
ladner 28:94a949b0f03a 1367 selctecolor = 4;
ladner 28:94a949b0f03a 1368 break;
ladner 28:94a949b0f03a 1369 case 0xb6:
ladner 28:94a949b0f03a 1370 out = 0;
ladner 28:94a949b0f03a 1371 //Farbe -> G
ladner 28:94a949b0f03a 1372 if(selctecolor == 4)
ladner 28:94a949b0f03a 1373 selctecolor = 3;
ladner 28:94a949b0f03a 1374 else
ladner 28:94a949b0f03a 1375 selctecolor = 4;
ogris 25:b31b49d277fd 1376 break;
ladner 28:94a949b0f03a 1377 case 0xf6:
ladner 28:94a949b0f03a 1378 out = 0;
ladner 28:94a949b0f03a 1379 //Farbe -> B
ladner 28:94a949b0f03a 1380 if(selctecolor == 4)
ladner 28:94a949b0f03a 1381 selctecolor = 1;
ladner 28:94a949b0f03a 1382 else
ladner 28:94a949b0f03a 1383 selctecolor = 4;
ladner 28:94a949b0f03a 1384 break;
ladner 28:94a949b0f03a 1385
ladner 28:94a949b0f03a 1386 case 0x46:
ladner 28:94a949b0f03a 1387 //Farbe -> R
ladner 28:94a949b0f03a 1388 selctecolor = 2;
ladner 28:94a949b0f03a 1389 TestC = Farben[3];
ladner 28:94a949b0f03a 1390 break;
ladner 28:94a949b0f03a 1391 case 0x86:
ladner 28:94a949b0f03a 1392 out = 0;
ladner 28:94a949b0f03a 1393 //Farbe -> R
ladner 28:94a949b0f03a 1394 selctecolor = 3;
ladner 28:94a949b0f03a 1395 mSelected[depth-1]++;
ladner 28:94a949b0f03a 1396 break;
ladner 28:94a949b0f03a 1397 case 0xc6:
ladner 28:94a949b0f03a 1398 out = 0;
ladner 28:94a949b0f03a 1399 //Farbe -> G
ladner 28:94a949b0f03a 1400 selctecolor = 1;
ladner 28:94a949b0f03a 1401 mSelected[depth-1]++;
ladner 28:94a949b0f03a 1402 break;
ladner 28:94a949b0f03a 1403 case 0x106:
ladner 28:94a949b0f03a 1404 //Farbe -> B
ladner 28:94a949b0f03a 1405 selctecolor=0;
ladner 28:94a949b0f03a 1406 mSelected[depth-1]=0;
ladner 28:94a949b0f03a 1407 Farben[3] = TestC;
ladner 28:94a949b0f03a 1408 TestC = Background;
ladner 28:94a949b0f03a 1409 FieldPrint();
ladner 28:94a949b0f03a 1410 FeldPrint();
ladner 28:94a949b0f03a 1411 break;
ladner 28:94a949b0f03a 1412
ogris 27:15a37d3fb5c5 1413 case 0x7d: //Ki enable p1
ogris 27:15a37d3fb5c5 1414 out = 0;
ogris 27:15a37d3fb5c5 1415 VHS = 1;
ogris 27:15a37d3fb5c5 1416 if(KI[0])
ogris 27:15a37d3fb5c5 1417 {
ogris 27:15a37d3fb5c5 1418 KI[0]=0;
ogris 27:15a37d3fb5c5 1419 }else{
ogris 27:15a37d3fb5c5 1420 KI[0]=1;
ogris 27:15a37d3fb5c5 1421 }
ogris 27:15a37d3fb5c5 1422 break;
ogris 27:15a37d3fb5c5 1423 case 0xbd:
ogris 27:15a37d3fb5c5 1424 out = 0;
ogris 27:15a37d3fb5c5 1425 VHS = 1;
ogris 27:15a37d3fb5c5 1426 if(KI[1])
ogris 27:15a37d3fb5c5 1427 {
ogris 27:15a37d3fb5c5 1428 KI[1]=0;
ogris 27:15a37d3fb5c5 1429 }else{
ogris 27:15a37d3fb5c5 1430 KI[1]=1;
ogris 27:15a37d3fb5c5 1431 }
ogris 27:15a37d3fb5c5 1432 break;
ogris 27:15a37d3fb5c5 1433
ogris 27:15a37d3fb5c5 1434 case 0xfd:
ogris 27:15a37d3fb5c5 1435 out = 0;
ogris 27:15a37d3fb5c5 1436 VHS = 1;
ogris 27:15a37d3fb5c5 1437 if(KI[2])
ogris 27:15a37d3fb5c5 1438 {
ogris 27:15a37d3fb5c5 1439 KI[2]=0;
ogris 27:15a37d3fb5c5 1440 }else{
ogris 27:15a37d3fb5c5 1441 KI[2]=1;
ogris 27:15a37d3fb5c5 1442 }
ogris 27:15a37d3fb5c5 1443 break;
ogris 27:15a37d3fb5c5 1444 case 0x13d:
ogris 27:15a37d3fb5c5 1445 out = 0;
ogris 27:15a37d3fb5c5 1446 VHS = 1;
ogris 27:15a37d3fb5c5 1447 if(KI[3])
ogris 27:15a37d3fb5c5 1448 {
ogris 27:15a37d3fb5c5 1449 KI[3]=0;
ogris 27:15a37d3fb5c5 1450 }else{
ogris 27:15a37d3fb5c5 1451 KI[3]=1;
ogris 27:15a37d3fb5c5 1452 }
ogris 27:15a37d3fb5c5 1453 break;
ogris 27:15a37d3fb5c5 1454
ogris 23:fd15b2f8cf08 1455 default:
ogris 23:fd15b2f8cf08 1456 break;
ladner 13:cb068deacb6c 1457 }
ladner 13:cb068deacb6c 1458 return out;
ladner 13:cb068deacb6c 1459 }
ladner 13:cb068deacb6c 1460
ladner 13:cb068deacb6c 1461 void posUpdate()
ladner 13:cb068deacb6c 1462 {
ladner 13:cb068deacb6c 1463 postion = 0;
ogris 23:fd15b2f8cf08 1464 for (char i = 0; i < depth - 1; i++)
ladner 29:42646ca2f941 1465 postion = postion | (mSelected[i] << (i * 3));
ladner 13:cb068deacb6c 1466 }
ladner 13:cb068deacb6c 1467
ladner 13:cb068deacb6c 1468 void up()
ladner 13:cb068deacb6c 1469 {
ladner 28:94a949b0f03a 1470 if ((selctecolor>0)&&(selctecolor<4))
ogris 25:b31b49d277fd 1471 {
ladner 28:94a949b0f03a 1472 char temp = 0xFF & (TestC >> (selctecolor * 8 - 8));
ladner 28:94a949b0f03a 1473 TestC = TestC&(0xFFFFFF-(0xFF<<(selctecolor * 8 - 8)));
ogris 25:b31b49d277fd 1474 if(temp<0xFF)
ogris 25:b31b49d277fd 1475 temp++;
ladner 28:94a949b0f03a 1476 TestC=TestC|(temp<<(selctecolor * 8 - 8));
ladner 28:94a949b0f03a 1477 DicePrint();
ladner 28:94a949b0f03a 1478 print_color();
ogris 25:b31b49d277fd 1479 }
ogris 25:b31b49d277fd 1480 else
ogris 23:fd15b2f8cf08 1481 if (depth > 0)
ladner 13:cb068deacb6c 1482 {
ogris 23:fd15b2f8cf08 1483 if (mSelected[depth - 1] < 1)
ogris 23:fd15b2f8cf08 1484 {
ogris 23:fd15b2f8cf08 1485 if (VHS == 0)
ogris 23:fd15b2f8cf08 1486 mSelected[depth - 1] = 3;
ogris 23:fd15b2f8cf08 1487 else if (VHS == 1)
ogris 23:fd15b2f8cf08 1488 mSelected[depth - 1] = 4;
ogris 23:fd15b2f8cf08 1489 else
ogris 23:fd15b2f8cf08 1490 mSelected[depth - 1] = VHS;
ogris 23:fd15b2f8cf08 1491 }
ladner 13:cb068deacb6c 1492 else
ogris 23:fd15b2f8cf08 1493 mSelected[depth - 1]--;
ogris 23:fd15b2f8cf08 1494 print_pos();
ladner 13:cb068deacb6c 1495 }
ladner 13:cb068deacb6c 1496 }
ladner 13:cb068deacb6c 1497
ladner 13:cb068deacb6c 1498 void down()
ladner 13:cb068deacb6c 1499 {
ladner 28:94a949b0f03a 1500 if ((selctecolor>0)&&(selctecolor<4))
ogris 25:b31b49d277fd 1501 {
ladner 28:94a949b0f03a 1502 char temp = 0xFF & (TestC >> (selctecolor * 8 - 8));
ladner 28:94a949b0f03a 1503 TestC = TestC&(0xFFFFFF-(0xFF<<(selctecolor * 8 - 8)));
ogris 25:b31b49d277fd 1504 if(temp>0)
ogris 25:b31b49d277fd 1505 temp--;
ladner 28:94a949b0f03a 1506 TestC=TestC|(temp<<(selctecolor * 8 - 8));
ladner 28:94a949b0f03a 1507 DicePrint();
ladner 28:94a949b0f03a 1508 print_color();
ogris 25:b31b49d277fd 1509 }
ogris 25:b31b49d277fd 1510 else
ogris 23:fd15b2f8cf08 1511 if (depth > 0)
ogris 23:fd15b2f8cf08 1512 {
ogris 23:fd15b2f8cf08 1513 char temp = 3;
ogris 23:fd15b2f8cf08 1514 if (VHS == 0)
ogris 23:fd15b2f8cf08 1515 temp = 3;
ogris 23:fd15b2f8cf08 1516 else if (VHS == 1)
ogris 23:fd15b2f8cf08 1517 temp = 4;
ogris 23:fd15b2f8cf08 1518 else
ogris 23:fd15b2f8cf08 1519 temp = VHS;
ogris 23:fd15b2f8cf08 1520 if (mSelected[depth - 1] > (temp - 1))
ogris 23:fd15b2f8cf08 1521 mSelected[depth - 1] = 0;
ogris 23:fd15b2f8cf08 1522 else
ogris 23:fd15b2f8cf08 1523 mSelected[depth - 1]++;
ogris 23:fd15b2f8cf08 1524 print_pos();
ogris 23:fd15b2f8cf08 1525 }
ladner 13:cb068deacb6c 1526 }
ladner 13:cb068deacb6c 1527
ladner 13:cb068deacb6c 1528 void accept()
ladner 13:cb068deacb6c 1529 {
ogris 23:fd15b2f8cf08 1530 if (depth > 0)
ladner 13:cb068deacb6c 1531 {
ladner 13:cb068deacb6c 1532 postion = 0;
ogris 23:fd15b2f8cf08 1533 for (char i = 0; i < depth; i++)
ladner 29:42646ca2f941 1534 postion = postion | (mSelected[i] << (i * 3));
ladner 13:cb068deacb6c 1535 char temp = ausfuehren(postion);
ogris 23:fd15b2f8cf08 1536 if (temp > 0)
ladner 13:cb068deacb6c 1537 {
ogris 23:fd15b2f8cf08 1538 if (mSelected[depth - 1] == 0)
ladner 13:cb068deacb6c 1539 {
ladner 13:cb068deacb6c 1540 exit();
ladner 13:cb068deacb6c 1541 return;
ladner 13:cb068deacb6c 1542 }
ladner 13:cb068deacb6c 1543 else
ladner 13:cb068deacb6c 1544 {
ogris 23:fd15b2f8cf08 1545 mSelected[depth] = 1;
ladner 13:cb068deacb6c 1546 depth++;
ladner 13:cb068deacb6c 1547 }
ladner 13:cb068deacb6c 1548 }
ladner 13:cb068deacb6c 1549 }
ladner 13:cb068deacb6c 1550 else
ladner 13:cb068deacb6c 1551 {
ogris 23:fd15b2f8cf08 1552 depth = 1;
ladner 13:cb068deacb6c 1553 mDiceEn = diceEn;
ogris 23:fd15b2f8cf08 1554 if (mDiceEn == 1)
ladner 13:cb068deacb6c 1555 {
ladner 13:cb068deacb6c 1556 DiceAnim.detach();
ladner 13:cb068deacb6c 1557 diceTick = 0;
ladner 13:cb068deacb6c 1558 RandomDice.stop();
ogris 23:fd15b2f8cf08 1559 mDiceEn = 0;
ladner 13:cb068deacb6c 1560 }
ogris 23:fd15b2f8cf08 1561 if ((mDiceEn == 2) || (mDiceEn == 3))
ladner 13:cb068deacb6c 1562 {
ladner 13:cb068deacb6c 1563 MoveAnim.detach();
ladner 13:cb068deacb6c 1564 MoveShow = 1;
ladner 13:cb068deacb6c 1565 MoveRun();
ladner 13:cb068deacb6c 1566 }
ogris 23:fd15b2f8cf08 1567 diceEn = 5;
ladner 13:cb068deacb6c 1568 DicePrint();
ladner 13:cb068deacb6c 1569 //StartMenu-Anim
ogris 23:fd15b2f8cf08 1570 diceTick = 0;
ogris 23:fd15b2f8cf08 1571 DiceAnim.attach(&DiceRun, 0.3);
ladner 13:cb068deacb6c 1572 }
ladner 28:94a949b0f03a 1573 port.printf("Lpostion:(0x%x) ", postion);
ladner 13:cb068deacb6c 1574 posUpdate();
ladner 28:94a949b0f03a 1575 port.printf("0x%x(Depth:0x%x)\n", postion,depth);
ladner 28:94a949b0f03a 1576 if(selctecolor>0)
ladner 28:94a949b0f03a 1577 print_color();
ladner 28:94a949b0f03a 1578 else if (depth > 0)
ladner 13:cb068deacb6c 1579 {
ladner 13:cb068deacb6c 1580 print_menu();
ladner 13:cb068deacb6c 1581 print_pos();
ladner 13:cb068deacb6c 1582 }
ladner 13:cb068deacb6c 1583 else
ladner 13:cb068deacb6c 1584 print_default();
ladner 13:cb068deacb6c 1585 }
ladner 13:cb068deacb6c 1586
ladner 13:cb068deacb6c 1587 void exit()
ladner 13:cb068deacb6c 1588 {
ladner 26:de10b06e7d4d 1589 port.printf("LExit!\n");
ladner 28:94a949b0f03a 1590 posUpdate();
ladner 28:94a949b0f03a 1591 if (depth > 0&&(selctecolor==0||selctecolor==4))
ladner 13:cb068deacb6c 1592 {
ladner 13:cb068deacb6c 1593 depth--;
ogris 23:fd15b2f8cf08 1594 mSelected[depth] = 0;
ladner 13:cb068deacb6c 1595 }
ogris 23:fd15b2f8cf08 1596 if (depth == 0)
ladner 13:cb068deacb6c 1597 {
ladner 22:2d75e7ec402f 1598 DiceAnim.detach();
ogris 23:fd15b2f8cf08 1599 diceTick = 0;
ladner 22:2d75e7ec402f 1600 char temp = diceEn;
ogris 23:fd15b2f8cf08 1601 diceEn = 0;
ladner 22:2d75e7ec402f 1602 DicePrint();
ogris 23:fd15b2f8cf08 1603 diceEn = temp;
ogris 23:fd15b2f8cf08 1604 if (mDiceEn < 5)
ladner 13:cb068deacb6c 1605 {
ogris 23:fd15b2f8cf08 1606 diceEn = mDiceEn;
ogris 23:fd15b2f8cf08 1607 if ((mDiceEn == 2) || (mDiceEn == 3))
ogris 23:fd15b2f8cf08 1608 MoveAnim.attach(&MoveRun, 0.3);
ogris 23:fd15b2f8cf08 1609 mDiceEn = 5;
ladner 13:cb068deacb6c 1610 }
ladner 22:2d75e7ec402f 1611 DicePrint();
ladner 13:cb068deacb6c 1612 }
ladner 28:94a949b0f03a 1613 if(selctecolor>0)
ladner 28:94a949b0f03a 1614 print_color();
ladner 28:94a949b0f03a 1615
ladner 28:94a949b0f03a 1616 if(selctecolor==4)
ladner 13:cb068deacb6c 1617 {
ladner 28:94a949b0f03a 1618 selctecolor=0;
ladner 28:94a949b0f03a 1619 posUpdate();
ladner 28:94a949b0f03a 1620 ausfuehren(postion);
ladner 28:94a949b0f03a 1621 TestC = Background;
ladner 28:94a949b0f03a 1622 FieldPrint();
ladner 28:94a949b0f03a 1623 FeldPrint();
ladner 13:cb068deacb6c 1624 print_menu();
ladner 13:cb068deacb6c 1625 print_pos();
ladner 13:cb068deacb6c 1626 }
ladner 28:94a949b0f03a 1627 else if(selctecolor>0)
ladner 28:94a949b0f03a 1628 selctecolor=4;
ladner 13:cb068deacb6c 1629 else
ladner 28:94a949b0f03a 1630 {
ladner 28:94a949b0f03a 1631 posUpdate();
ladner 28:94a949b0f03a 1632 ausfuehren(postion);
ladner 28:94a949b0f03a 1633 if (depth > 0)
ladner 28:94a949b0f03a 1634 {
ladner 28:94a949b0f03a 1635 print_menu();
ladner 28:94a949b0f03a 1636 print_pos();
ladner 28:94a949b0f03a 1637 }
ladner 28:94a949b0f03a 1638 else
ladner 28:94a949b0f03a 1639 print_default();
ladner 28:94a949b0f03a 1640 }
ladner 13:cb068deacb6c 1641 }
ladner 13:cb068deacb6c 1642
ladner 13:cb068deacb6c 1643 void print_menu()
ladner 13:cb068deacb6c 1644 {
ladner 13:cb068deacb6c 1645 port.printf("DR\n");
ladner 13:cb068deacb6c 1646 lcd.cls();
ogris 23:fd15b2f8cf08 1647 lcd.locate(1, 0);
ladner 13:cb068deacb6c 1648 lcd.printf(text_ln0[textPos[postion]]);
ogris 23:fd15b2f8cf08 1649 port.printf("D%c%c%s\n", 28, 27, text_ln0[textPos[postion]]);
ogris 23:fd15b2f8cf08 1650 lcd.locate(1, 1);
ladner 13:cb068deacb6c 1651 lcd.printf(text_ln1[textPos[postion]]);
ogris 23:fd15b2f8cf08 1652 port.printf("D%c%c%s\n", 28, 28, text_ln1[textPos[postion]]);
ogris 23:fd15b2f8cf08 1653 lcd.locate(1, 2);
ladner 13:cb068deacb6c 1654 lcd.printf(text_ln2[textPos[postion]]);
ogris 23:fd15b2f8cf08 1655 port.printf("D%c%c%s\n", 28, 29, text_ln2[textPos[postion]]);
ogris 23:fd15b2f8cf08 1656 lcd.locate(1, 3);
ladner 13:cb068deacb6c 1657 lcd.printf(text_ln3[textPos[postion]]);
ogris 23:fd15b2f8cf08 1658 port.printf("D%c%c%s\n", 28, 30, text_ln3[textPos[postion]]);
ogris 30:3482779d97af 1659 if(textPos[postion]==5)
ladner 29:42646ca2f941 1660 {
ladner 29:42646ca2f941 1661 lcd.locate(9, 1);
ladner 29:42646ca2f941 1662 lcd.printf("%d",postion);
ladner 29:42646ca2f941 1663 port.printf("D%c%c%d\n",27+9, 28,postion);
ladner 29:42646ca2f941 1664 }
ladner 29:42646ca2f941 1665
ladner 13:cb068deacb6c 1666 }
ladner 13:cb068deacb6c 1667
ladner 13:cb068deacb6c 1668 void print_pos()
ladner 13:cb068deacb6c 1669 {
ogris 23:fd15b2f8cf08 1670 if (VHS == 1)
ladner 13:cb068deacb6c 1671 {
ogris 23:fd15b2f8cf08 1672 lcd.locate(0, 3);
ladner 13:cb068deacb6c 1673 // "--------------------"
ladner 13:cb068deacb6c 1674 lcd.printf(" ");
ogris 23:fd15b2f8cf08 1675 port.printf("D%c%c \n", 27, 27 + 3);
ladner 13:cb068deacb6c 1676
ogris 23:fd15b2f8cf08 1677 lcd.locate(0, 0);
ogris 23:fd15b2f8cf08 1678 if (mSelected[depth - 1] == 0)
ladner 13:cb068deacb6c 1679 {
ogris 23:fd15b2f8cf08 1680 port.printf("D%c%c<\n", 27, 27);
ladner 13:cb068deacb6c 1681 lcd.putc('<');
ladner 13:cb068deacb6c 1682 }
ladner 13:cb068deacb6c 1683 else
ladner 13:cb068deacb6c 1684 {
ogris 23:fd15b2f8cf08 1685 port.printf("D%c%c \n", 27, 27);
ladner 13:cb068deacb6c 1686 lcd.putc(' ');
ladner 13:cb068deacb6c 1687
ogris 27:15a37d3fb5c5 1688 lcd.locate(4 * mSelected[depth - 1]+1, 3);//erst x dann y
ladner 13:cb068deacb6c 1689 lcd.putc('^');
ogris 27:15a37d3fb5c5 1690 port.printf("D%c%c^\n", 27 + 4 * mSelected[depth - 1]+1, 27 + 3);
ladner 13:cb068deacb6c 1691 }
ladner 13:cb068deacb6c 1692 }
ladner 13:cb068deacb6c 1693 else
ladner 13:cb068deacb6c 1694 {
ogris 23:fd15b2f8cf08 1695 for (char i = 0; i < 4; i++)
ladner 13:cb068deacb6c 1696 {
ogris 23:fd15b2f8cf08 1697 lcd.locate(0, i);
ogris 23:fd15b2f8cf08 1698 if ((mSelected[depth - 1] + 0) == i)
ladner 13:cb068deacb6c 1699 {
ogris 23:fd15b2f8cf08 1700 if (i == 0)
ladner 13:cb068deacb6c 1701 {
ogris 23:fd15b2f8cf08 1702 port.printf("D%c%c<\n", 27, i + 27);
ladner 13:cb068deacb6c 1703 lcd.putc('<');
ladner 13:cb068deacb6c 1704 }
ladner 13:cb068deacb6c 1705 else
ladner 13:cb068deacb6c 1706 {
ogris 23:fd15b2f8cf08 1707 port.printf("D%c%c>\n", 27, i + 27);
ladner 13:cb068deacb6c 1708 lcd.putc('>');
ladner 13:cb068deacb6c 1709 }
ladner 13:cb068deacb6c 1710 }
ladner 13:cb068deacb6c 1711 else
ladner 13:cb068deacb6c 1712 {
ogris 23:fd15b2f8cf08 1713 port.printf("D%c%c \n", 27, i + 27);
ladner 13:cb068deacb6c 1714 lcd.putc(' ');
ladner 13:cb068deacb6c 1715 }
ladner 13:cb068deacb6c 1716 }
ladner 13:cb068deacb6c 1717 }
ladner 13:cb068deacb6c 1718 }
ladner 13:cb068deacb6c 1719
ladner 13:cb068deacb6c 1720 void print_default()
ladner 13:cb068deacb6c 1721 {
ladner 13:cb068deacb6c 1722 lcd.cls();
ogris 23:fd15b2f8cf08 1723 lcd.printf(" Spiel lauft...");
ogris 23:fd15b2f8cf08 1724 lcd.locate(0, 3);
ogris 23:fd15b2f8cf08 1725 lcd.printf("12345678901234567890");
ogris 23:fd15b2f8cf08 1726 port.printf("D%c%c Spiel lauft... \n", 27, 27);
ogris 23:fd15b2f8cf08 1727 port.printf("D%c%c \n", 27, 28);
ogris 23:fd15b2f8cf08 1728 port.printf("D%c%c \n", 27, 29);
ogris 23:fd15b2f8cf08 1729 port.printf("D%c%c12345678901234567890\n", 27, 30);
ogris 27:15a37d3fb5c5 1730 }
ladner 28:94a949b0f03a 1731
ogris 27:15a37d3fb5c5 1732 void print_zus()
ogris 27:15a37d3fb5c5 1733 {
ogris 27:15a37d3fb5c5 1734 switch(postion){
ogris 27:15a37d3fb5c5 1735 case 0x3d:
ogris 27:15a37d3fb5c5 1736 lcd.locate(5,1);//erst x dann y
ogris 27:15a37d3fb5c5 1737 if(KI[0])
ogris 27:15a37d3fb5c5 1738 {
ogris 27:15a37d3fb5c5 1739 lcd.putc('I');
ogris 27:15a37d3fb5c5 1740 }else{
ogris 27:15a37d3fb5c5 1741 lcd.putc('0');
ogris 27:15a37d3fb5c5 1742 }
ogris 27:15a37d3fb5c5 1743 lcd.locate(9,1);//erst x dann y
ogris 27:15a37d3fb5c5 1744 if(KI[1])
ogris 27:15a37d3fb5c5 1745 {
ogris 27:15a37d3fb5c5 1746 lcd.putc('I');
ogris 27:15a37d3fb5c5 1747 }else{
ogris 27:15a37d3fb5c5 1748 lcd.putc('0');
ogris 27:15a37d3fb5c5 1749 }
ogris 27:15a37d3fb5c5 1750 lcd.locate(13,1);//erst x dann y
ogris 27:15a37d3fb5c5 1751 if(KI[2])
ogris 27:15a37d3fb5c5 1752 {
ogris 27:15a37d3fb5c5 1753 lcd.putc('I');
ogris 27:15a37d3fb5c5 1754 }else{
ogris 27:15a37d3fb5c5 1755 lcd.putc('0');
ogris 27:15a37d3fb5c5 1756 }
ogris 27:15a37d3fb5c5 1757 lcd.locate(17,1);//erst x dann y
ogris 27:15a37d3fb5c5 1758 if(KI[3])
ogris 27:15a37d3fb5c5 1759 {
ogris 27:15a37d3fb5c5 1760 lcd.putc('I');
ogris 27:15a37d3fb5c5 1761 }else{
ogris 27:15a37d3fb5c5 1762 lcd.putc('0');
ogris 27:15a37d3fb5c5 1763 }
ogris 27:15a37d3fb5c5 1764 break;
ogris 27:15a37d3fb5c5 1765 default:
ogris 27:15a37d3fb5c5 1766 break;
ladner 28:94a949b0f03a 1767 }
ladner 28:94a949b0f03a 1768 }
ladner 28:94a949b0f03a 1769
ladner 28:94a949b0f03a 1770 void print_color()
ladner 28:94a949b0f03a 1771 {
ladner 28:94a949b0f03a 1772 char temp = 0xFF & (TestC >> (selctecolor * 8 - 8));
ladner 28:94a949b0f03a 1773 char pos = 0;
ladner 28:94a949b0f03a 1774 switch (selctecolor)
ladner 28:94a949b0f03a 1775 {
ladner 28:94a949b0f03a 1776 case 4:
ladner 28:94a949b0f03a 1777 print_menu();
ladner 28:94a949b0f03a 1778 print_pos();
ladner 28:94a949b0f03a 1779 port.printf("D%c%c%d\n",30,28,0xFF & (TestC >> (2 * 8 - 8)));//X,Y
ladner 28:94a949b0f03a 1780 lcd.locate(3, 1);
ladner 28:94a949b0f03a 1781 lcd.printf("%d",0xFF & (TestC >> (2 * 8 - 8)));
ladner 28:94a949b0f03a 1782 port.printf("D%c%c%d\n",30,29,0xFF & (TestC >> (3 * 8 - 8)));
ladner 28:94a949b0f03a 1783 lcd.locate(3, 2);
ladner 28:94a949b0f03a 1784 lcd.printf("%d",0xFF & (TestC >> (3 * 8 - 8)));
ladner 28:94a949b0f03a 1785 port.printf("D%c%c%d\n",30,30,0xFF & (TestC >> (1 * 8 - 8)));
ladner 28:94a949b0f03a 1786 lcd.locate(3, 3);
ladner 28:94a949b0f03a 1787 lcd.printf("%d",0xFF & (TestC >> (1 * 8 - 8)));
ladner 28:94a949b0f03a 1788 break;
ladner 28:94a949b0f03a 1789 case 2://B
ladner 28:94a949b0f03a 1790 port.printf("D%c%c \n",27,28);
ladner 28:94a949b0f03a 1791 lcd.locate(0, 1);
ladner 28:94a949b0f03a 1792 lcd.printf(" ");
ladner 28:94a949b0f03a 1793 if(temp<100)
ladner 28:94a949b0f03a 1794 {
ladner 28:94a949b0f03a 1795 pos++;
ladner 28:94a949b0f03a 1796 if(temp<10)
ladner 28:94a949b0f03a 1797 pos++;
ladner 28:94a949b0f03a 1798 }
ladner 28:94a949b0f03a 1799 port.printf("D%c%c%d\n",27+pos,28,temp);
ladner 28:94a949b0f03a 1800 lcd.locate(pos, 1);
ladner 28:94a949b0f03a 1801 lcd.printf("%d",temp);
ladner 28:94a949b0f03a 1802 pos = 0;
ladner 28:94a949b0f03a 1803 port.printf("D%c%c",30,28);
ladner 28:94a949b0f03a 1804 while(temp>pos&pos<250)
ladner 28:94a949b0f03a 1805 {
ladner 28:94a949b0f03a 1806 pos+=15;
ladner 28:94a949b0f03a 1807 if(temp+7>=pos)
ladner 28:94a949b0f03a 1808 {
ladner 28:94a949b0f03a 1809 lcd.printf("-");
ladner 28:94a949b0f03a 1810 port.printf("-");
ladner 28:94a949b0f03a 1811 }
ogris 27:15a37d3fb5c5 1812 }
ladner 28:94a949b0f03a 1813 if(pos<250)
ladner 28:94a949b0f03a 1814 lcd.printf(" ");
ladner 28:94a949b0f03a 1815 port.printf("\n");
ladner 28:94a949b0f03a 1816 break;
ladner 28:94a949b0f03a 1817 case 3://R
ladner 28:94a949b0f03a 1818 port.printf("D%c%c \n",27,29);
ladner 28:94a949b0f03a 1819 lcd.locate(0, 2);
ladner 28:94a949b0f03a 1820 lcd.printf(" ");
ladner 28:94a949b0f03a 1821 if(temp<100)
ladner 28:94a949b0f03a 1822 {
ladner 28:94a949b0f03a 1823 pos++;
ladner 28:94a949b0f03a 1824 if(temp<10)
ladner 28:94a949b0f03a 1825 pos++;
ladner 28:94a949b0f03a 1826 }
ladner 28:94a949b0f03a 1827 port.printf("D%c%c%d\n",27+pos,29,temp);
ladner 28:94a949b0f03a 1828 lcd.locate(pos, 2);
ladner 28:94a949b0f03a 1829 lcd.printf("%d",temp);
ladner 28:94a949b0f03a 1830 pos = 0;
ladner 28:94a949b0f03a 1831 port.printf("D%c%c",30,29);
ladner 28:94a949b0f03a 1832 while(temp>pos&pos<250)
ladner 28:94a949b0f03a 1833 {
ladner 28:94a949b0f03a 1834 pos+=15;
ladner 28:94a949b0f03a 1835 if(temp+7>=pos)
ladner 28:94a949b0f03a 1836 {
ladner 28:94a949b0f03a 1837 lcd.printf("-");
ladner 28:94a949b0f03a 1838 port.printf("-");
ladner 28:94a949b0f03a 1839 }
ladner 28:94a949b0f03a 1840 }
ladner 28:94a949b0f03a 1841 if(pos<250)
ladner 28:94a949b0f03a 1842 lcd.printf(" ");
ladner 28:94a949b0f03a 1843 port.printf("\n");
ladner 28:94a949b0f03a 1844 break;
ladner 28:94a949b0f03a 1845 case 1://G
ladner 28:94a949b0f03a 1846 port.printf("D%c%c \n",27,30);
ladner 28:94a949b0f03a 1847 lcd.locate(0, 3);
ladner 28:94a949b0f03a 1848 lcd.printf(" ");
ladner 28:94a949b0f03a 1849 if(temp<100)
ladner 28:94a949b0f03a 1850 {
ladner 28:94a949b0f03a 1851 pos++;
ladner 28:94a949b0f03a 1852 if(temp<10)
ladner 28:94a949b0f03a 1853 pos++;
ladner 28:94a949b0f03a 1854 }
ladner 28:94a949b0f03a 1855 port.printf("D%c%c%d\n",27+pos,30,temp);
ladner 28:94a949b0f03a 1856 lcd.locate(pos, 3);
ladner 28:94a949b0f03a 1857 lcd.printf("%d",temp);
ladner 28:94a949b0f03a 1858 pos = 0;
ladner 28:94a949b0f03a 1859 port.printf("D%c%c",30,30);
ladner 28:94a949b0f03a 1860 while(temp>pos&pos<250)
ladner 28:94a949b0f03a 1861 {
ladner 28:94a949b0f03a 1862 pos+=15;
ladner 28:94a949b0f03a 1863 if(temp+7>=pos)
ladner 28:94a949b0f03a 1864 {
ladner 28:94a949b0f03a 1865 lcd.printf("-");
ladner 28:94a949b0f03a 1866 port.printf("-");
ladner 28:94a949b0f03a 1867 }
ladner 28:94a949b0f03a 1868 }
ladner 28:94a949b0f03a 1869 if(pos<250)
ladner 28:94a949b0f03a 1870 lcd.printf(" ");
ladner 28:94a949b0f03a 1871 port.printf("\n");
ladner 28:94a949b0f03a 1872 break;
ladner 28:94a949b0f03a 1873 default:
ladner 28:94a949b0f03a 1874 break;
ladner 28:94a949b0f03a 1875 }
ladner 28:94a949b0f03a 1876 lcd.locate(19, 0);
ladner 29:42646ca2f941 1877 }
ladner 29:42646ca2f941 1878
ladner 29:42646ca2f941 1879 void menuInit()
ladner 29:42646ca2f941 1880 {
ladner 29:42646ca2f941 1881 textPos[0x00] = 0x0;
ladner 29:42646ca2f941 1882 textPos[0x01] = 0x1;
ladner 29:42646ca2f941 1883 textPos[0x02] = 0x2;
ladner 29:42646ca2f941 1884 textPos[0x03] = 0x3;
ladner 29:42646ca2f941 1885 textPos[0x04] = 0x4;
ladner 29:42646ca2f941 1886 textPos[0x05] = 0x5;
ladner 29:42646ca2f941 1887 textPos[0x06] = 0x6;
ladner 29:42646ca2f941 1888 textPos[0x07] = 0x7;
ladner 29:42646ca2f941 1889 textPos[0x08] = 0x4;
ogris 30:3482779d97af 1890 textPos[0x09] = 0x5;
ogris 30:3482779d97af 1891 textPos[0x0a] = 0x11;
ogris 30:3482779d97af 1892 textPos[0x0b] = 0x7;
ladner 29:42646ca2f941 1893 textPos[0x0c] = 0x4;
ladner 29:42646ca2f941 1894 textPos[0x0d] = 0xD;
ladner 29:42646ca2f941 1895 textPos[0x0e] = 0xE;
ladner 29:42646ca2f941 1896 textPos[0x0f] = 0xF;
ladner 29:42646ca2f941 1897 textPos[0x10] = 0x10;
ogris 30:3482779d97af 1898 textPos[0x11] = 0x9;
ogris 30:3482779d97af 1899 textPos[0x12] = 0xA;
ogris 30:3482779d97af 1900 textPos[0x13] = 0xb;
ladner 29:42646ca2f941 1901 textPos[0x14] = 0x14;
ladner 29:42646ca2f941 1902 textPos[0x15] = 0x15;
ladner 29:42646ca2f941 1903 textPos[0x16] = 0x11;
ladner 29:42646ca2f941 1904 textPos[0x17] = 0x17;
ladner 29:42646ca2f941 1905 textPos[0x18] = 0x18;
ogris 30:3482779d97af 1906 textPos[0x19] = 0xD;
ogris 30:3482779d97af 1907 textPos[0x1a] = 0xe;
ogris 30:3482779d97af 1908 textPos[0x1b] = 0xf;
ladner 29:42646ca2f941 1909 textPos[0x1c] = 0x1C;
ladner 29:42646ca2f941 1910 textPos[0x1d] = 0xC;
ladner 29:42646ca2f941 1911 textPos[0x1e] = 0x14;
ladner 29:42646ca2f941 1912 textPos[0x1f] = 0x1F;
ladner 29:42646ca2f941 1913 textPos[0x20] = 0x20;
ladner 29:42646ca2f941 1914 textPos[0x21] = 0x21;
ladner 29:42646ca2f941 1915 textPos[0x22] = 0x22;
ladner 29:42646ca2f941 1916 textPos[0x23] = 0x23;
ladner 29:42646ca2f941 1917 textPos[0x24] = 0x24;
ladner 29:42646ca2f941 1918 textPos[0x25] = 0x25;
ladner 29:42646ca2f941 1919 textPos[0x26] = 0x11;
ladner 29:42646ca2f941 1920 textPos[0x27] = 0x27;
ladner 29:42646ca2f941 1921 textPos[0x28] = 0x28;
ladner 29:42646ca2f941 1922 textPos[0x29] = 0x29;
ladner 29:42646ca2f941 1923 textPos[0x2a] = 0x13;
ladner 29:42646ca2f941 1924 textPos[0x2b] = 0x2B;
ladner 29:42646ca2f941 1925 textPos[0x2c] = 0x10;
ladner 29:42646ca2f941 1926 textPos[0x2d] = 0x2D;
ladner 29:42646ca2f941 1927 textPos[0x2e] = 0x15;
ladner 29:42646ca2f941 1928 textPos[0x2f] = 0x2F;
ladner 29:42646ca2f941 1929 textPos[0x30] = 0x30;
ladner 29:42646ca2f941 1930 textPos[0x31] = 0x31;
ladner 29:42646ca2f941 1931 textPos[0x32] = 0x32;
ladner 29:42646ca2f941 1932 textPos[0x33] = 0x33;
ladner 29:42646ca2f941 1933 textPos[0x34] = 0x34;
ladner 29:42646ca2f941 1934 textPos[0x35] = 0x35;
ladner 29:42646ca2f941 1935 textPos[0x36] = 0x11;
ladner 29:42646ca2f941 1936 textPos[0x37] = 0x37;
ladner 29:42646ca2f941 1937 textPos[0x38] = 0x38;
ladner 29:42646ca2f941 1938 textPos[0x39] = 0x39;
ladner 29:42646ca2f941 1939 textPos[0x3a] = 0x3A;
ladner 29:42646ca2f941 1940 textPos[0x3b] = 0x3B;
ladner 29:42646ca2f941 1941 textPos[0x3c] = 0x3C;
ladner 29:42646ca2f941 1942 textPos[0x3d] = 0x17;
ladner 29:42646ca2f941 1943 textPos[0x3e] = 0x16;
ladner 29:42646ca2f941 1944 textPos[0x3f] = 0x3F;
ladner 29:42646ca2f941 1945 textPos[0x40] = 0x40;
ladner 29:42646ca2f941 1946 textPos[0x41] = 0x41;
ladner 29:42646ca2f941 1947 textPos[0x42] = 0x42;
ladner 29:42646ca2f941 1948 textPos[0x43] = 0x43;
ladner 29:42646ca2f941 1949 textPos[0x44] = 0x44;
ladner 29:42646ca2f941 1950 textPos[0x45] = 0x45;
ladner 29:42646ca2f941 1951 textPos[0x46] = 0x11;
ladner 29:42646ca2f941 1952 textPos[0x47] = 0x47;
ladner 29:42646ca2f941 1953 textPos[0x48] = 0x48;
ladner 29:42646ca2f941 1954 textPos[0x49] = 0x49;
ladner 29:42646ca2f941 1955 textPos[0x4a] = 0x4A;
ladner 29:42646ca2f941 1956 textPos[0x4b] = 0x4B;
ladner 29:42646ca2f941 1957 textPos[0x4c] = 0x4C;
ladner 29:42646ca2f941 1958 textPos[0x4d] = 0x4D;
ladner 29:42646ca2f941 1959 textPos[0x4e] = 0x4E;
ladner 29:42646ca2f941 1960 textPos[0x4f] = 0x4F;
ladner 29:42646ca2f941 1961 textPos[0x50] = 0x50;
ladner 29:42646ca2f941 1962 textPos[0x51] = 0x51;
ladner 29:42646ca2f941 1963 textPos[0x52] = 0x52;
ladner 29:42646ca2f941 1964 textPos[0x53] = 0x53;
ladner 29:42646ca2f941 1965 textPos[0x54] = 0x54;
ladner 29:42646ca2f941 1966 textPos[0x55] = 0x55;
ladner 29:42646ca2f941 1967 textPos[0x56] = 0x11;
ladner 29:42646ca2f941 1968 textPos[0x57] = 0x57;
ladner 29:42646ca2f941 1969 textPos[0x58] = 0x58;
ladner 29:42646ca2f941 1970 textPos[0x59] = 0x59;
ladner 29:42646ca2f941 1971 textPos[0x5a] = 0x5A;
ladner 29:42646ca2f941 1972 textPos[0x5d] = 0x5B;
ladner 29:42646ca2f941 1973 textPos[0x5c] = 0x5C;
ladner 29:42646ca2f941 1974 textPos[0x5d] = 0x5D;
ladner 29:42646ca2f941 1975 textPos[0x5e] = 0x5E;
ladner 29:42646ca2f941 1976 textPos[0x5f] = 0x5F;
ladner 29:42646ca2f941 1977 }