a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ladner
Date:
Fri Apr 15 12:58:59 2016 +0000
Revision:
28:94a949b0f03a
Parent:
27:15a37d3fb5c5
Child:
29:42646ca2f941

        

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