Dependencies:   Led-libary TextLCD mbed

Committer:
ogris
Date:
Fri Apr 15 18:06:00 2016 +0000
Revision:
30:3482779d97af
Parent:
29:42646ca2f941
jakob offline/com funkt net;

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