Dependencies:   Led-libary TextLCD mbed

Committer:
ladner
Date:
Fri Apr 08 06:59:10 2016 +0000
Revision:
22:2d75e7ec402f
Parent:
21:374e9aed07d9
Child:
23:fd15b2f8cf08

        

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