a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ogris
Date:
Fri Apr 01 16:04:34 2016 +0000
Revision:
21:374e9aed07d9
Parent:
20:9908c31eb2f7
Child:
22:2d75e7ec402f
neu;

Who changed what in which revision?

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