a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ogris
Date:
Fri Apr 01 13:23:50 2016 +0000
Revision:
18:d747cf2de3bf
Parent:
17:0e7af2d4cd63
Child:
19:b07fa9e47577
men? + todolist aktualisiert;

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