[C/C++] Problem bei Solitaire Programmierung!

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Erdnuss, 26. Januar 2008 .

Schlagworte:
  1. 26. Januar 2008
    Problem bei Solitaire Programmierung!

    Huhu Leutz,
    also, ich soll für die "Schule" das Spiele Solitaire schreiben.
    (Nicht als Hausaufgabe oder so, sondern das is ein Langzeitprojekt und jetzt hänge ich)
    Ich hab nur ein Problem, nämlich kommt mein array net in die Funktion
    Vielleicht könnt ihr mir wieterhelfen bei dem Problem, oder nen Quelltext für peg solitarie (englisches spielfeld) geben.
    Hier mal mein Prog:
    Code:
    /*
    Projekt Solitaire
    */
    
    #include <stdio.h>
    #include <dos.h>
    #include <graphics.h>
    #include <stdlib.h>
    #include <conio.h>
    
    
    int load();
    int nummern();
    int ausgabe(int spielfeld[32]);
    
    void main()
    {
    int i, x, spielfeld[33];
    
     clrscr();
    
     //Fuellen des Arrays "spielfeld"
     for(i=0;i<=33;i++)
     {
     if(i==16)
     spielfeld[i]=0;
     else
     spielfeld[i]=1;
     }
    
     load();
     nummern();
     ausgabe(spielfeld[]);
    
    int startstein, endstein;
    
     do
     {
     gotoxy(27,20);
     printf("Stein auswählen (Startpunkt): ");
     scanf("%d", &startstein);
     
     
     }
    }
    
    
    int ausgabe(int feld[33])
    {
     int i;
    
     //TEXT AUSGABE SPIELFELD
    
     gotoxy(27,6);
     for(i=0;i<=2;i++)
     {
     printf("%2d ", feld[i]);
     }
    
     gotoxy(27,8);
     for(i=3;i<=5;i++)
     {
     printf("%2d ", feld[i]);
     }
    
     gotoxy(21,10);
     for(i=6;i<=12;i++)
     {
     printf("%2d ", feld[i]);
     }
    
     gotoxy(21,12);
     for(i=13;i<=19;i++)
     {
     printf("%2d ", feld[i]);
     }
    
     gotoxy(21,14);
     for(i=20;i<=26;i++)
     {
     printf("%2d ", feld[i]);
     }
    
     gotoxy(27,16);
     for(i=27;i<=29;i++)
     {
     printf("%2d ", feld[i]);
     }
    
     gotoxy(27,18);
     for(i=30;i<=32;i++)
     {
     printf("%2d ", feld[i]);
     }
     return 0;
    }
    
    int nummern()
    {
     int i;
    
     //TEXT AUSGABE SPIELFELD NUMMERN
    
     gotoxy(57,6);
     for(i=0;i<=2;i++)
     {
     printf("%2d ", i);
     }
    
     gotoxy(57,8);
     for(i=3;i<=5;i++)
     {
     printf("%2d ", i);
     }
    
     gotoxy(51,10);
     for(i=6;i<=12;i++)
     {
     printf("%2d ", i);
     }
    
     gotoxy(51,12);
     for(i=13;i<=19;i++)
     {
     printf("%2d ", i);
     }
    
     gotoxy(51,14);
     for(i=20;i<=26;i++)
     {
     printf("%2d ", i);
     }
    
     gotoxy(57,16);
     for(i=27;i<=29;i++)
     {
     printf("%2d ", i);
     }
    
     gotoxy(57,18);
     for(i=30;i<=32;i++)
     {
     printf("%2d ", i);
     }
     getch();
     return 0;
    }
    
    int load()
    {
     int gd, gm, i;
    
     detectgraph(&gd, &gm);
     initgraph(&gd, &gm, "D:\\TC\\BGI");
    
     setbkcolor(YELLOW);
     setfillstyle(SOLID_FILL, RED);
     setcolor(RED);
    
     // Lade-Screen mit Ueberschrift
    
     rectangle(40,100,80,120); // S
     floodfill(41,101,RED);
     rectangle(40,120,60,160);
     floodfill(41,121,RED);
     rectangle(60,140,80,180);
     floodfill(61,141,RED);
     rectangle(40,200,80,180);
     floodfill(41,181,RED);
     
     rectangle(100,100,160,200); // O
     floodfill(101,101,RED);
     setcolor(YELLOW);
     rectangle(120,120,140,180);
     setfillstyle(SOLID_FILL, YELLOW);
     floodfill(121,121,YELLOW);
    
     setcolor(RED); // L
     rectangle(180,100,200,180);
     setfillstyle(SOLID_FILL, RED);
     floodfill(181,101,RED);
     rectangle(180,180,220,200);
     floodfill(181,181,RED);
    
     rectangle(240,100,260,200); // I
     floodfill(241,101,RED);
    
     rectangle(280,100,340,120); // T
     floodfill(281,101,RED);
     rectangle(300,120,320,200);
     floodfill(301,121,RED);
    
     rectangle(360,100,380,200); // A
     floodfill(361,101,RED);
     rectangle(380,100,400,120);
     floodfill(381,101,RED);
     rectangle(380,140,400,160);
     floodfill(381,141,RED);
     rectangle(400,100,420,200);
     floodfill(401,101,RED);
    
     rectangle(440,100,460,200); // I
     floodfill(441,101,RED);
    
     rectangle(480,100,520,120); // R
     floodfill(481,101,RED);
     rectangle(480,120,500,200);
     floodfill(481,121,RED);
     rectangle(500,140,520,160);
     floodfill(501,141,RED);
     rectangle(520,160,540,200);
     floodfill(521,161,RED);
     rectangle(520,120,540,140);
     floodfill(521,121,RED);
    
     rectangle(560,100,580,200); // E
     floodfill(561,101,RED);
     rectangle(580,100,600,120);
     floodfill(581,101,RED);
     rectangle(580,140,600,160);
     floodfill(581,141,RED);
     rectangle(580,180,600,200);
     floodfill(581,181,RED);
    
    
     setcolor(LIGHTRED); // Ladebalken (Hintergrund)
     for(i=0;i<=200;i++) 
     {
     moveto(220+i,270);
     lineto(220+i,250);
     }
    
    
     setcolor(RED); // Ladebalken
     outtextxy(250,240,"Es wird geladen...");
     for(i=0;i<=200;i++)
     {
     moveto(220+i,270);
     lineto(220+i,250);
     //delay(50);
     }
    
     outtextxy(175,290,"Druecke eine Taste um fortzufahren...");
    
     getch();
     closegraph();
     return 0;
    }
    Ps: es muss alles in C geschrieben sein.
    Danke schonmal im vorraus
    MfG Erdnuss
     
  2. 27. Januar 2008
    AW: Problem bei Solitaire Programmierung!

    Du übergibst den Array Pointer nicht das Array selbst.
     
  3. 28. Januar 2008
    AW: Problem bei Solitaire Programmierung!

    also von pointern seh ich nix.

    Aber mir scheint es noch ein paar Probleme zu geben:
    a) deine funktion ausgabe deklarierst du mit einem 32 teiligem Array, bei der Initialisierung sind es dann 33 und der Name stimmt nicht überein
    b) dein array bekommt die größe 33 (also von 0 bis 32!!!!) trotzdem durchläufst du die for-schleife bis 33

    Ich nehme mal an, du kritisierst, dass keine Ausgabe stattfindet (also praktisch nichts übergeben wird). Ansonsten kann ich da nichts falsches erkennen. (kann vielleicht an den koordinaten liegen, oder am bildschirmmodus(vollbild, fenster)). Ach und wenn du deine Funktionen schon brav als integer deklarierst, solltest du evt. auch mal überprüfen, was die funktion zurückgibt, also ob sie wirklich 0 zurückgibt, oder bei einem fehler was anderes
     
  4. 29. Januar 2008
    AW: Problem bei Solitaire Programmierung!

    du hast meiner meinung nach mehrere probleme bei deinem programm:

    1. wie schon gesagt, läufst du mit i<=33 aus dem array raus
    2. hast du in der methoden deklaration eine funktion mit einem rückgabewert deklariert, beim funktionsaufruf jedoch dies nicht beauchtet (alternative: anstatt int void verwenden, oder ne variable zum funktionsaufruf verwenden: int test = ausgabe(..) )
    3. die methoden definiton enthält den fehler, dass du als argument feld[33] geschrieben hast.. somit läuft da ne ganze menge durcheinander: die funktion erwartet ein int (das feld[33] ja vom typ int ist), du aber nen pointer auf ein int übergibst. also einfach nur ausgabe(int feld[]) schreiben.

    wenn du die drei sachen umsetzt, sollte es hoffentlich laufen..


    zu meinen vorrednern:

    "und der Name stimmt nicht überein" --> ist egal, da bei definition und deklaration einer methode die argumentnamen nicht übereinstimmen müssen, jediglich der methodenname, der typ der argumente und der typ der funktion.

    "Du übergibst den Array Pointer nicht das Array selbst." auch egal, da das array bereits im speicher steht und er weiß, wie lang es ist (33).. außerdem ist ein array nichts anderes als ein pointer auf das erste element..
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.