a

Dependencies:   Led-libary TextLCD mbed

Fork of Mbed-Mensch-8 by Projekte_werkstatt

Committer:
ogris
Date:
Fri Apr 01 15:49:43 2016 +0000
Revision:
20:9908c31eb2f7
Parent:
19:b07fa9e47577
Child:
21:374e9aed07d9
test;

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