2017-02-07 2 views
0

Ich arbeite an einer wirklich vereinfachten Version von Space Invaders. Ich erzeuge einige Außerirdische, dann entferne ich sie mit der Zeit näher an den unteren Bildschirmrand, für den ich gerade Arrays verwende. Ich habe es erzeugt und die Eindringlinge gesenkt, aber als ich versuchte, die Tastatur zu drücken, um ein Alien zu löschen, wurde es ignoriert. Ich glaube daran, weil ich nicht ständig nach der Eingabe des Keypads suche, damit meine checkInput() Funktion nicht tut, was sie tun soll. Ich wollte danach fragen, aber ich bin mir nicht sicher, wie oder wo ich es tun soll. Jede Hilfe wäre willkommen.Versucht, nach einem MSP430-Keypad-Eingang zu suchen

#include <msp430.h> 
#include "peripherals.h" 
#include <stdlib.h> 

// Function Prototypes 
void swDelay(char numLoops); 
void countDown(); 
//void speedCheck(); 
void generateAliens(); 
void inputCheck(); 
void displayAliens(); 
void initLeds(void); 


// Declare globals here 
int game; 
//int win; 
//int turn; 
//int levelSpeed; 
char arrAliens0[5] = {' ', ' ', ' ', ' ', ' '}; 
char arrAliens1[5] = {' ', ' ', ' ', ' ', ' '}; 
char arrAliens2[5] = {' ', ' ', ' ', ' ', ' '}; 
char arrAliens3[5] = {' ', ' ', ' ', ' ', ' '}; 
char arrAliens4[5] = {' ', ' ', ' ', ' ', ' '}; 
char arrAliens5[5] = {' ', ' ', ' ', ' ', ' '}; 
char arrTempAliens1[5]; 
char arrTempAliens2[5]; 
char arrTempAliens3[5]; 
char arrTempAliens4[5]; 
char arrTempAliens5[5]; 

void main(void) 
{ 
//unsigned char ret_val = 0x0F; 
unsigned char currKey=0; 

// Define some local variables 

WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer 

// Useful code starts here 
initLeds(); 
configDisplay(); 
configKeypad(); 

while (1) // Forever loop 
{ 
    GrClearDisplay(&g_sContext); // Clear the display 
    while (getKey() != '*') 
    { 
     // *** Intro Screen *** 
     GrStringDrawCentered(&g_sContext, "Space Invaders!", AUTO_STRING_LENGTH, 48, 30, TRANSPARENT_TEXT); 
     GrStringDrawCentered(&g_sContext, "Press '*' to", AUTO_STRING_LENGTH, 48, 50, TRANSPARENT_TEXT); 
     GrStringDrawCentered(&g_sContext, "Start the Game", AUTO_STRING_LENGTH, 48, 65, TRANSPARENT_TEXT); 
     GrFlush(&g_sContext); 
    } 

    currKey = getKey(); 

    if (currKey == '*') 
    { 
     game = 1; 
     //turn = 0; 
     countDown(); 

     while (game == 1) 
     { 
      //speedCheck(); 
      generateAliens(); 
      inputCheck(); 
      //displayAliens(); 
      //turn++; 
     } 

     GrClearDisplay(&g_sContext); 
     GrStringDrawCentered(&g_sContext, "You Lose!", AUTO_STRING_LENGTH, 48, 45, TRANSPARENT_TEXT); 
     GrFlush(&g_sContext); 
     swDelay(3); 
    } 

} // end while (1) 

} //end main 

void countDown() 
{ 
    //3 Count 
    GrClearDisplay(&g_sContext); 
    GrStringDrawCentered(&g_sContext, "3", AUTO_STRING_LENGTH, 48, 45, TRANSPARENT_TEXT); 
    GrFlush(&g_sContext); 
    swDelay(3); 
    GrClearDisplay(&g_sContext); 

//2 Count 
GrStringDrawCentered(&g_sContext, "2", AUTO_STRING_LENGTH, 48, 45, TRANSPARENT_TEXT); 
GrFlush(&g_sContext); 
swDelay(3); 
GrClearDisplay(&g_sContext); 

//1 Count 
GrStringDrawCentered(&g_sContext, "1", AUTO_STRING_LENGTH, 48, 45, TRANSPARENT_TEXT); 
GrFlush(&g_sContext); 
swDelay(3); 
GrClearDisplay(&g_sContext); 
} 

/*void speedCheck() 
{ 
if (turn <= 3) 
{ 
    levelSpeed = 10; 
} 

else if ((turn > 3) && (turn <= 6)) 
{ 
    levelSpeed = 8; 
} 

else if ((turn > 6) && (turn <= 9)) 
{ 
    levelSpeed = 4; 
} 

else if ((turn > 9) && (turn <= 12)) 
{ 
    levelSpeed = 2; 
} 

else 
{ 
    levelSpeed = 1; 
} 
}*/ 

void generateAliens() 
{ 
memcpy(arrTempAliens1, arrAliens1, 5); 
memcpy(arrTempAliens2, arrAliens2, 5); 
memcpy(arrTempAliens3, arrAliens3, 5); 
memcpy(arrTempAliens4, arrAliens4, 5); 
memcpy(arrTempAliens5, arrAliens5, 5); 

memcpy(arrAliens1, arrAliens0, 5); 
memcpy(arrAliens2, arrTempAliens1, 5); 
memcpy(arrAliens3, arrTempAliens2, 5); 
memcpy(arrAliens4, arrTempAliens3, 5); 
memcpy(arrAliens5, arrTempAliens4, 5); 

/*arrTempAliens1 = arrAliens1; 
arrTempAliens2 = arrAliens2; 
arrTempAliens3 = arrAliens3; 
arrTempAliens4 = arrAliens4; 
arrTempAliens5 = arrAliens5; 

arrAliens1 = arrAliens0; 
arrAliens2 = arrTempAliens1; 
arrAliens3 = arrTempAliens2; 
arrAliens4 = arrTempAliens3; 
arrAliens5 = arrTempAliens4;*/ 

int a = rand() % 4; 

if (a == 0) 
{ 
    arrAliens0[0] = '0'; 
    arrAliens0[1] = ' '; 
    arrAliens0[2] = ' '; 
    arrAliens0[3] = ' '; 
    arrAliens0[4] = ' '; 
} 

else if (a == 1) 
{ 
    arrAliens0[0] = '0'; 
    arrAliens0[1] = '1'; 
    arrAliens0[2] = ' '; 
    arrAliens0[3] = ' '; 
    arrAliens0[4] = ' '; 
} 

else if (a == 2) 
{ 
    arrAliens0[0] = '0'; 
    arrAliens0[1] = '1'; 
    arrAliens0[2] = '2'; 
    arrAliens0[3] = ' '; 
    arrAliens0[4] = ' '; 
} 

else if (a == 3) 
{ 
    arrAliens0[0] = '0'; 
    arrAliens0[1] = '1'; 
    arrAliens0[2] = '2'; 
    arrAliens0[3] = '3'; 
    arrAliens0[4] = ' '; 
} 

else if (a == 4) 
{ 
    arrAliens0[0] = '0'; 
    arrAliens0[1] = '1'; 
    arrAliens0[2] = '2'; 
    arrAliens0[3] = '3'; 
    arrAliens0[4] = '4'; 
} 

displayAliens(); 
} 

void inputCheck() 
{ 
unsigned char currKey = getKey(); 

if ((arrAliens5[0] && arrAliens5[1] && arrAliens5[2] && arrAliens5[3] && arrAliens5[4]) == ' ') 
{ 

    if (currKey == '0') 
    { 

     if ((currKey == '0') && (arrAliens4[0] == '0')) 
     { 
      arrAliens4[0] = ' '; 
      setLeds(0x30); 
     } 

     else if ((currKey == '0') && (arrAliens4[0] != '0') && (arrAliens3[0] == '0')) 
     { 
      arrAliens3[0]= ' '; 
     } 

     else if ((currKey == '0') && (arrAliens4[0] != '0') && (arrAliens3[0] != '0') && (arrAliens2[0] == '0')) 
     { 
      arrAliens2[0] = ' '; 
     } 

     else if ((currKey == '0') && (arrAliens4[0] != '0') && (arrAliens3[0] != '0') && (arrAliens2[0] != '0') && (arrAliens1[0] == '0')) 
     { 
      arrAliens1[0] = ' '; 
     } 

     else if ((currKey == '0') && (arrAliens4[0] != '0') && (arrAliens3[0] != '0') && (arrAliens2[0] != '0') && (arrAliens1[0] != '0') && (arrAliens0[0] == '0')) 
     { 
      arrAliens0[0] = ' '; 
     } 
    } 

    if (currKey == '1') 
    { 

     if ((currKey == '1') && (arrAliens4[1] == '1')) 
     { 
      arrAliens4[1] = ' '; 
     } 

     else if ((currKey == '1') && (arrAliens4[1] != '1') && (arrAliens3[1] == '1')) 
     { 
      arrAliens3[1]= ' '; 
     } 

     else if ((currKey == '1') && (arrAliens4[1] != '1') && (arrAliens3[1] != '1') && (arrAliens2[1] == '1')) 
     { 
      arrAliens2[1] = ' '; 
     } 

     else if ((currKey == '1') && (arrAliens4[1] != '1') && (arrAliens3[1] != '1') && (arrAliens2[1] != '1') && (arrAliens1[1] == '1')) 
     { 
      arrAliens1[1] = ' '; 
     } 

     else if ((currKey == '1') && (arrAliens4[1] != '1') && (arrAliens3[1] != '1') && (arrAliens2[1] != '1') && (arrAliens1[1] != '1') && (arrAliens0[1] == '1')) 
     { 
      arrAliens0[1] = ' '; 
     } 
    } 

    if (currKey == '2') 
    { 

     if ((currKey == '2') && (arrAliens4[2] == '2')) 
     { 
      arrAliens4[2] = ' '; 
     } 

     else if ((currKey == '2') && (arrAliens4[2] != '2') && (arrAliens3[2] == '2')) 
     { 
      arrAliens3[2]= ' '; 
     } 

     else if ((currKey == '2') && (arrAliens4[2] != '2') && (arrAliens3[2] != '2') && (arrAliens2[2] == '2')) 
     { 
      arrAliens2[2] = ' '; 
     } 

     else if ((currKey == '2') && (arrAliens4[2] != '2') && (arrAliens3[2] != '2') && (arrAliens2[2] != '2') && (arrAliens1[2] == '2')) 
     { 
      arrAliens1[2] = ' '; 
     } 

     else if ((currKey == '2') && (arrAliens4[2] != '2') && (arrAliens3[2] != '2') && (arrAliens2[2] != '2') && (arrAliens1[2] != '2') && (arrAliens0[2] == '2')) 
     { 
      arrAliens0[2] = ' '; 
     } 
    } 

    if (currKey == '3') 
    { 

     if ((currKey == '3') && (arrAliens4[3] == '3')) 
     { 
      arrAliens4[3] = ' '; 
     } 

     else if ((currKey == '3') && (arrAliens4[3] != '3') && (arrAliens3[3] == '3')) 
     { 
      arrAliens3[3]= ' '; 
     } 

     else if ((currKey == '3') && (arrAliens4[3] != '3') && (arrAliens3[3] != '3') && (arrAliens2[3] == '3')) 
     { 
      arrAliens2[3] = ' '; 
     } 

     else if ((currKey == '3') && (arrAliens4[3] != '3') && (arrAliens3[3] != '3') && (arrAliens2[3] != '3') && (arrAliens1[3] == '3')) 
     { 
      arrAliens1[3] = ' '; 
     } 

     else if ((currKey == '3') && (arrAliens4[3] != '3') && (arrAliens3[3] != '3') && (arrAliens2[3] != '3') && (arrAliens1[3] != '3') && (arrAliens0[3] == '3')) 
     { 
      arrAliens0[3] = ' '; 
     } 
    } 

    if (currKey == '4') 
    { 

     if ((currKey == '4') && (arrAliens4[4] == '4')) 
     { 
      arrAliens4[4] = ' '; 
     } 

     else if ((currKey == '4') && (arrAliens4[4] != '4') && (arrAliens3[4] == '4')) 
     { 
      arrAliens3[4]= ' '; 
     } 

     else if ((currKey == '4') && (arrAliens4[4] != '4') && (arrAliens3[4] != '4') && (arrAliens2[4] == '4')) 
     { 
      arrAliens2[4] = ' '; 
     } 

     else if ((currKey == '4') && (arrAliens4[4] != '4') && (arrAliens3[4] != '4') && (arrAliens2[4] != '4') && (arrAliens1[4] == '4')) 
     { 
      arrAliens1[4] = ' '; 
     } 

     else if ((currKey == '4') && (arrAliens4[4] != '4') && (arrAliens3[4] != '4') && (arrAliens2[4] != '4') && (arrAliens1[4] != '4') && (arrAliens0[4] == '4')) 
     { 
      arrAliens0[4] = ' '; 
     } 
    } 
} 

else if ((arrAliens5[0] | arrAliens5[1] | arrAliens5[2] | arrAliens5[3] | arrAliens5[4]) != ' ') 
{ 
    game = 0; 
} 
} 

void displayAliens() 
{ 
     GrClearDisplay(&g_sContext); 
     GrStringDrawCentered(&g_sContext, arrAliens0, 5, 48, 5, TRANSPARENT_TEXT); 
     GrStringDrawCentered(&g_sContext, arrAliens1, 5, 48, 25, TRANSPARENT_TEXT); 
     GrStringDrawCentered(&g_sContext, arrAliens2, 5, 48, 45, TRANSPARENT_TEXT); 
     GrStringDrawCentered(&g_sContext, arrAliens3, 5, 48, 65, TRANSPARENT_TEXT); 
     GrStringDrawCentered(&g_sContext, arrAliens4, 5, 48, 85, TRANSPARENT_TEXT); 
     GrFlush(&g_sContext); 
     swDelay(3); 
} 

void swDelay(char numLoops) 
{ 
volatile unsigned int i,j; // volatile to prevent optimization 
            // by compiler 
for (j=0; j<numLoops; j++) 
{ 
    i = 50000 ;     // SW Delay 
    while (i > 0)    // could also have used while (i) 
     i--; 
} 
} 
+0

Niemand weiß, welche CPU, Tastenfeld und Bibliothek Sie verwenden, oder was das richtige Verhalten wäre oder was Sie tatsächlich beobachten. –

+0

@ CL. Ich benutze das MSP430F5529 Launch Pad. Ich bin nicht wirklich sicher, was die Tastatur ist, obwohl es nur eine einfache Ergänzung mit den Zahlen 0 - 9 zusammen mit einem Stern und Pfundzeichen ist. Als ich mein Programm ausführte, sah ich, dass die Aliens generiert wurden und nach einiger Zeit eine neue Linie von Aliens auftauchen würde, während die vorherigen Aliens eine Stufe weiter nach unten schritten. Das war es, was ich wollte, aber als ich auf die Tastatur drückte, um einen Alien zu zerstören, passierte nichts und das Spiel würde einfach weitergehen, bis die Aliens den Boden erreicht hatten und das Spiel endete. Ich legte ein Licht an, um zu sehen, ob die Eingabe jemals überprüft wurde, aber das Licht kam nie an. –

+0

So funktioniert sie unbekannte Tastatur überhaupt nicht. Könnte Hardware sein, könnte der unbekannte 'getKey()' sein. –

Antwort

1
if ((arrAliens5[0] && arrAliens5[1] && arrAliens5[2] && arrAliens5[3] && arrAliens5[4]) == ' ') 

ist diese Bedingung nicht wahr, weil && einen Booleschen Operator und die Ergebnisse in entweder 0 oder 1, die nie auf den Wert des Leerzeichens gleich sein kann.

+0

Sie haben Recht, sie zu Single zu ändern und wie ich es mit den oder Operatoren in der Spielendsituation gemacht habe, hat es funktioniert. Die Verlustbedingung wird ebenfalls nicht mehr ausgeführt. Auch ist es langsam, so dass es nur einen Alien pro Generation löscht. Es gibt einen Weg, um Eingaben schneller zu machen, weil es keine Möglichkeit gibt, "vorwärts zu kommen". –

+0

Ich reparierte den Verlustbedingungsteil. Jetzt konzentriere ich mich darauf, Aliens schneller zu löschen oder die Generation langsamer laufen zu lassen. –

+0

Ich habe es funktioniert, danke für die Hilfe. –

Verwandte Themen