yakisikli123
Grünschnabel
hallo
ich soll einen spielautomaten (mit LED s , bzw 4 felder) erweitern
mit mehrere spielvarianten
mehrere schwierigkeitsstufen
hier habe den quellcode
ich habe vor das man auswählen kann welche stufe man spielen will dazu muss derjenige
den feld drücken
am anfang soll es nur die felder erhöhen nicht die schnelligkeit ab 9 richtige soll schnelligkeit erhöht werden
es sollen andere spielvarianten wie statt leuchtende den nicht leuchtenden betätigen
oder das ganze rückwärts machen usw
habt ihr vielleicht paar vorschläge bezüglich des codes
vielen dank im voraus
ich soll einen spielautomaten (mit LED s , bzw 4 felder) erweitern
mit mehrere spielvarianten
mehrere schwierigkeitsstufen
hier habe den quellcode
Code:
#include <msp430x16x.h>
void delay_value(unsigned int wert){ //Pause-Funktion
for (unsigned int j=1; j<wert; j++);
}
void ton_laenge(unsigned int laenge){ //Funktion für Tonlänge
for (unsigned int i=0; i<laenge; i++);
}
int buffer =0,t,a=0;
static int A[10];
void zufall(unsigned int *D,int stufe){
unsigned int y=1234; //Wert beliebig!
double w=TAR; //Timerwert auslesen
double wb=w/3;
for(int i=0;i<=stufe+3;i++){
y=(unsigned int)(w+wb*0.732+3.14159*y); //erstellen mehrerer "Zufallszahlen"
*D=(unsigned int)(y%4)+1; //mithilfe der Umwandlung von "double"
*D++; //in "integer" und Modulo 4
}
}
void PWM (long int lange, int weite){ //Puls-Weiten-Modulation zur Tonausgabe
P5OUT &= (1<<7);
P5DIR |= (1<<7);
TBCCR0 = lange; //Periodenlänge
TBCCR1 = weite; //länge des "dutycycle" (Tastgrad)
TBCCTL1 |= (1<<4);
TBCTL |= (1<<5) | (1<<4) | (1<<9);
_BIS_SR(GIE);
}
void ton(int x){ //Funktion zum erstellen mehrerer Töne
switch(x){
case 1: //Fehler-Ton
PWM(1300, 300);
ton_laenge(30000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
PWM(2100, 300);
ton_laenge(35000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
PWM(3000, 300);
ton_laenge(65000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
break;
case 2: //Sieg-Ton
PWM(1000, 300);
ton_laenge(20000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
PWM(300, 300);
ton_laenge(25000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
PWM(300, 300);
ton_laenge(25000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
PWM(1000, 300);
ton_laenge(20000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
PWM(300, 300);
ton_laenge(65000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
break;
case 3: //Ton Feld
PWM(1000, 300);
ton_laenge(10000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
break;
case 4: //Ton Feld
PWM(900, 300);
ton_laenge(10000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
break;
case 5: //Ton Feld
PWM(800, 300);
ton_laenge(10000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
break;
case 6: //Ton Feld
PWM(700, 300);
ton_laenge(10000);
TBCCTL1 &= ~(1<<4);
P5OUT &= ~(1<<7);
break;
default:
break;
}
}
void tim(int stufe){ //Funktion für die Schnelligkeit der abgespielten Kombination
for (int k=1;k<(10-stufe);k++) //mit steigender Stufe werden die Pausen
delay_value(50000); //zwischen den aufleuchtenden Feldern kürzer
}
void ausg(int x, int stufe){ //Ausgabe-Funktion die mithilfe der "Zufallszahlen"
switch (x){ //eine Kombination erstellt
case 1:
P2OUT |= (1<<1);
ton(3);
tim(stufe);
P2OUT &= ~(1<<1);
break;
case 2:
P2OUT |= (1<<2);
ton(4);
tim(stufe);
P2OUT &= ~(1<<2);
break;
case 3:
P2OUT |= (1<<3);
ton(5);
tim(stufe);
P2OUT &= ~(1<<3);
break;
case 4:
P2OUT |= (1<<4);
ton(6);
tim(stufe);
P2OUT &= ~(1<<4);
break;
default:
ton(2);
P2OUT = 0x00;
}
delay_value(50000); //Verzögerung ziwschen den Felder der Kombination
}
int abfr(){ //Funktion zur Abfrage der gespielten Kombination
for(int i=0;i<10;i++){
for(unsigned int j=0;j<50000;j++){
if( P1IN & (1<<1) ){
while( P1IN & (1<<1) ){
delay_value(2000);
P2OUT |=(1<<1);
}
P2OUT &= ~(1<<1);
buffer = 1;
delay_value(2000);
return 1;
}
if( P1IN & (1<<2) ){
while( P1IN & (1<<2) ){
delay_value(2000);
P2OUT |=(1<<2);
}
P2OUT &=~(1<<2);
buffer = 2;
delay_value(2000);
return 2;
}
if( P1IN & (1<<3) ){
while( P1IN & (1<<3) ){
delay_value(2000);
P2OUT |=(1<<3);
}
P2OUT &= ~(1<<3);
buffer = 3;
delay_value(2000);
return 3;
}
if( P1IN & (1<<4) ){
while( P1IN & (1<<4) ){
delay_value(2000);
P2OUT |=(1<<4);
}
P2OUT &=~(1<<4);
buffer = 4;
delay_value(2000);
return 4;
}
}
}
return 0;
}
int spiel() //Hauptfunktion des Spiels
{
int stufe=0,fehler=0;
do
{
zufall(A, stufe); //Aufruf der Funktion "Zufall" abhängig von der Höhe der Stufe
ausg(A[0], stufe); //Ausgabe der ersten Kombination
ausg(A[1], stufe);
ausg(A[2], stufe);
ausg(A[3], stufe);
if (stufe>3) //Solange Stufe 4 noch nicht erreicht wurde, besteht
{ //die Kombination aus 4 Felder, danach
for (int z=4; z<=stufe; z++) //steigt es pro Stufe um ein Feld
ausg(A[z], stufe);
}
abfr(); //die ausgegebene Kombination wird Feld
if (A[0]==buffer) //für Feld abgefragt
{
abfr();
if (A[1]==buffer)
{
abfr();
if (A[2]==buffer)
{
abfr();
if (A[3]==buffer)
{
if (stufe<=3) //bis Stufe 4 wird bei richtiger
stufe++; //Eingabe nur die Stufe erhöht
else //ab Stufe 4 kommt pro Stufe ein
{ //Feld mehr dazu
if (fehler < 3){
for (t=4; t<=stufe; t++)
{
abfr();
if( A[t]!=buffer ) //bei falscher Eingabe wird die Fehler-Variable
{ //um 1 erhöht und es ertönt der Fehler-Ton
fehler ++;
P2OUT |= (1<<1);
P2OUT |= (1<<2);
delay_value(50000);
P2OUT = 0x00;
P2OUT |= (1<<3);
P2OUT |= (1<<4);
delay_value(50000);
P2OUT = 0x00;
ton(1);
delay_value(50000);
}
}
}
if (fehler<3)
stufe++;
}
}
else
{
fehler ++;
P2OUT |= (1<<1);
P2OUT |= (1<<2);
delay_value(50000);
P2OUT = 0x00;
P2OUT |= (1<<3);
P2OUT |= (1<<4);
delay_value(50000);
P2OUT = 0x00;
ton(1);
delay_value(50000);
}
}
else
{
fehler ++;
P2OUT |= (1<<1);
P2OUT |= (1<<2);
delay_value(50000);
P2OUT = 0x00;
P2OUT |= (1<<3);
P2OUT |= (1<<4);
delay_value(50000);
P2OUT = 0x00;
ton(1);
delay_value(50000);
}
}
else
{
fehler ++;
P2OUT |= (1<<1);
P2OUT |= (1<<2);
delay_value(50000);
P2OUT = 0x00;
P2OUT |= (1<<3);
P2OUT |= (1<<4);
delay_value(50000);
P2OUT = 0x00;
ton(1);
delay_value(50000);
}
}
else
{
fehler ++;
P2OUT |= (1<<1);
P2OUT |= (1<<2);
delay_value(50000);
P2OUT = 0x00;
P2OUT |= (1<<3);
P2OUT |= (1<<4);
delay_value(50000);
P2OUT = 0x00;
ton(1);
delay_value(50000);
}
for (int i=1; i<10; i++){
delay_value(50000);
}
} //sobald der Spieler 3 Fehler macht oder
while( fehler !=3 && stufe !=9 ) //die 9.Stufe erreicht ist das Spiel beendet
;
if (stufe==9) //bei erreichen der 9.Stufe wird der Sieg-Ton abgespielt
{ //und alle Felder leuchten nacheinander auf
ausg(1,stufe);
ton(2);
ausg(2,stufe);
ton(2);
ausg(3,stufe);
ton(2);
ausg(4,stufe);
ton(2);
}
if (fehler == 3){ //nach 3 Fehlern wird das Spiel beendet und man hat verloren
for(int f=0;f<=2;f++){
P2OUT |= (1<<1);
delay_value(30000);
P2OUT = 0x00;
P2OUT |= (1<<4);
delay_value(30000);
P2OUT = 0x00;
P2OUT |= (1<<2);
delay_value(30000);
P2OUT = 0x00;
P2OUT |= (1<<3);
delay_value(30000);
P2OUT = 0x00;
}
ton(1);
delay_value(25000);
ton(1);
delay_value(25000);
}
return 0;
}
#pragma vector = PORT1_VECTOR //Interrupt zum Starten des Spiels bei betätigen des Schalters
__interrupt void Port1_Interrupt(void)
{
if( P1IFG & (1<<0) ){ //Wenn Flag von P1.0 gesetzt ist wird ein Interrupt ausgelöst
P1IFG=0x00; //Flag wird wieder 0 gesetzt um Interruptfähigkeit wiederherzustellen
P2OUT=0x00;
spiel(); //Spiel wird gestartet
}
}
#pragma vector=TIMERB1_VECTOR //Interrupt Funktion für PWM-Generierung
__interrupt void Timerbx_ISR (void){
if(a){
P5OUT |= (1<<7);
a--;
}
else{
P5OUT &= ~(1<<7);
a++;
}
TBCCTL1 &= ~(1<<0);
}
int main( void ){
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
P1OUT=0x00; //Setzen der Ports auf Startwerte
P2OUT=0x00; //um zufällige Werte zu verhindern
P3OUT=0x00;
P4OUT=0x00;
P5OUT=0x00;
P6OUT=0x00;
P1IFG=0x00;
P2IFG=0x00;
P1IFG=0x00;
P2IES=0x00;
P1IE=0x00;
P2IE=0x00;
P1SEL=0x00;
P2SEL=0x00;
P3SEL=0x00;
P4SEL=0x00;
P5SEL=0x00;
P6SEL=0x00;
P1DIR=0x00;
P2DIR=0x00;
P3DIR=0x00;
P4DIR=0x00;
P5DIR=0x00;
P6DIR=0x00;
P1IE |=0x01;
P1DIR &= ~(1<<1) & ~(1<<2) & ~(1<<3) & ~(1<<4); //?
P2DIR |= (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4);
TACTL = 0x00;
TACTL = TASSEL_2 + TACLR; //SMCLK, clear TAR
TACTL |= MC1;
_BIS_SR(GIE); //interrupt enable
while(1){ //Endlosschleife
}
return 0;
}
ich habe vor das man auswählen kann welche stufe man spielen will dazu muss derjenige
den feld drücken
am anfang soll es nur die felder erhöhen nicht die schnelligkeit ab 9 richtige soll schnelligkeit erhöht werden
es sollen andere spielvarianten wie statt leuchtende den nicht leuchtenden betätigen
oder das ganze rückwärts machen usw
habt ihr vielleicht paar vorschläge bezüglich des codes
vielen dank im voraus