Arrays und Kartenspiele :/



  • Die Sache hat sich ein bisschen erleichtert sodass ich nicht glaube das der Aufwand für jmd von euch Profis mehr als 5-10 min wäre 😃 Es reduziert sich alles auf eine Kontrollabfrage welche überprüft und ggnf. einen Error ausspuckt wenn man eine Karte mit dem Wert x (1-12) auf eine Karte legen will, dabei muss x-1 herrschen damit es erlaubt ist diese Karte auszuspielen.



  • Gladikonse12 schrieb:

    Hallöchen, ich bin recht neu in C und benötige einige Hilfe. 🙂 Es geht darum das ich ein Projekt machen will mit Freunden (unter Freunden) wo ich den Auftrag habe zu programmieren was der Spieler (Mensch) in dem Spiel darf etc. , einer ist für KI zuständig und der dritte um das "drumherum".

    Also hast Du die wenigste Ahnung und deswegen den kleinsten Job gekriegt.
    Der mit der KI kann Dir Deine Sachen in 10 Minuten machen und für 20€ sollte er auch schweigen.

    Gladikonse12 schrieb:

    So da ich für den Spieler zuständig bin bräuchte ich in sofern Hilfe als das wir mit Arrays arbeiten müssen und das wahrscheinlich das Thema ist was ich am wenigsten verstanden habe beim selber beibringen. Es geht um das Kartenspiel Skip-bo. Wäre jemand so gnädig und könnte mir helfen den Anteil programmiert zu bekommen den der Spieler ausüben darf?

    Für die jenigen die Helfen wollen:
    - welche Variablen ihr für was nutzt ist euch überlassen, ich ändere sie später so um das sie kompartibel mit den Variablen der Gruppenmitglieder sind (nur notiert bitte dazu welche Variable für was steht).

    Das wird nix.

    - Der Spieler muss :
                         - Jedes mal wenn er weniger als 5 Karten hat am Anfang     seines zuges solange ziehen bis er 5 hat.
    
    while(kartenAnzahl<5) ziehKarte();
    

    - Wenn er innerhalb einer Runde alle 5 abwirft, darf er sofort 5 neue ziehen.

    if(kartenAnzahl==0)
       for(int i=0;i!=5;++i)
          ziehKarte();
    

    - Eine Kontrollabfrage soll stattfinden die überprüft ob es legitim ist die Karte zu platziern (keine Farben vorhanden, nur Zahlen 1-12)

    if(werfKarte.zahl==stapel[stapelAnzahl-1]%4).zahl+1
    

    hängt echt davon ab, wie Ihr die Daten geplant habt.

    - Es soll möglich sein nicht nur von der Hand abzuwerfen sondern auch von einem der 5 Stapel die der Spieler besitzt (wobei auf einem von 4 davon der Spieler am Ende jedes Zuges eine Karte platzieren muss und der fünfte setzt sich auch Karten zusammen die zu beginn des Spiels ausgeteilt werden)

    Öhm, jetzt wirds ein wenig komisch. Alle Variablen, die ich dazu erfinden müßte, hat der KI-Schreiber bestimmt ganz ganz anders angelegt.

    Ich glaube das wäre es gewesen, vielen vielen Dank schonmal für jede gütige Seele die sich bereit erklärt mir zu helfen. 🙂 (es ist nichts offizielles sodass ihr euch "Strafbar" macht wenn ihr helfen solltet, es ist ein privates Programmieren)

    🤡



  • So, ich denke du kannst die Funktion als Denkansatz verwenden.

    Ein fertiges Programm wird dir hier niemand ohne Bezahlung vorlegen. Da man selber natürlich Zeit investieren muss. Kennst ja das gute Sprichwort: Zeit ist Geld

    int testCard( int oldCardValue, int newCardValue )
    {
        if( newCardValue > 12 || newCardValue <= 0 )
            return -1; // Fehlerhafte Karte wurde gelegt
    
        if( (newCardValue - oldCardValue) == 1 )
            return 1; // Karte darf gelegt werden
        else
            return 0; // Karte darf nicht gelegt werden
    }
    


  • Spitzenfunktion! Wie soll denn bitte eine 'Fehlerhafte Karte' ins Spiel kommen?



  • Belli schrieb:

    Spitzenfunktion! Wie soll denn bitte eine 'Fehlerhafte Karte' ins Spiel kommen?

    Programmierfehler? Programmierer hat geschlafen? Arrayübertritt? und und und...

    Besser einen Fehler in der Funktion abfangen und frühzeitig zu erkennen, anstatt später alles durchdebuggen zu müssen und mühselig einen Bug zu suchen. 😉



  • Dafuer gibts assert .



  • Habe es nun wie folgt geregelt:

    #include <stdio.h>
    #include <stdlib.h>

    int main(void)
    {

    int x; /*x ist der Zahlenwert der Karte von 1 bis 12* die liegt*/
    int y; /*Der Zahlenwert der Karte die man gerade spielen möchte, abfrage bei jeder einzelnen Karte die man auswählen sollte*/
    int ANKER;

    scanf("%d",&x);
    scanf("%d",&y);

    ANKER:; /*Die scanf-Befehle werden ersetzt du entsprechende Befehle die ablesen welche Karten auf der Hand sind und welche auf dem Feld*/

    scanf("%d",&y);

    if(y==x+1)
    {
    printf("Du hast %d auf %d gelegt, jetzt liegt %d auf dem Feld.",y,x,y);
    x=x+1; /*Der Wert von x wird durch den Wert von y überschrieben und wird so zu dem neuen x Wert ( oder doch x=y;?)*/
    goto ANKER;
    }

    else if(y<x)
    {
    printf("Die Karte %d ist kleiner als %d und kann nicht gespielt werden.\n\n",y,x);
    goto ANKER;
    }

    else
    {
    printf("Die Karte %d ist gleich groß oder mindestens um 2 größer als %d und kann nicht gespielt werden.\n\n",y,x);
    goto ANKER;
    }

    return 0;
    }

    Dadurch kann mit dem was ich bisher habe (nähmlich nichts weil der Anteil der anderen fehlt) eine Kontrollabfrage durchführen. Getestet habe ich es hier mit zwei einfachen scanf Befehlen wobei diese noch rausgelöscht und so ergänzt werden das es kompatibel ist (ich kann nunmal nichts dafür wenn die anderen ein Treffen absagen weil sie "erstmal lieber zuhause" arbeiten wollen...)
    Was sagt ihr zu dem was ich da schon habe?



  • Bashar schrieb:

    Dafuer gibts assert .

    Klar, die Methode ist mir durch aus bewusst. Aber ich denke, unsere Threadersteller ist froh, wenn er überhaupt das Konsolenfenster ansprechen kann (Nicht böse gemeint 🙂 ).

    Und die Funktion ist ja auch nicht als fertige Funktion direkt implementierbar, sondern sollte nur als Lösungsansatz dienen. 😉


  • Mod

    Gladikonse12 schrieb:

    Was sagt ihr zu dem was ich da schon habe?

    goto SALAT;
    


  • Gladikonse12 schrieb:

    weil sie "erstmal lieber zuhause" arbeiten wollen...)

    Dann werden sie Deinen Teil einfach mitprogrammieren.



  • volkard schrieb:

    Gladikonse12 schrieb:

    weil sie "erstmal lieber zuhause" arbeiten wollen...)

    Dann werden sie Deinen Teil einfach mitprogrammieren.

    Wenn mit dem "Salat" gemeint sein soll das es Mist ist was ich gemacht habe (ja ich weiß das es nicht super schön aussieht) dann bereue ich jetzt schon mich hier registriert zu haben. Ich will doch garnicht Programmieren aber bin Student und brauche 2 Semester Prozedurale Programmierung und um es mir besser beizubringen versuche ich mich mit Freunden immerwieder an Projekte die wir uns unabhängig von dem was wir in der Uni brauchen. Da kann es schonmal passieren das man irgendwo nicht weiterkommt und hilfe braucht, deswegen wollte ich hier nachfragen, bin kein Programmier-Crack und mein Aufgabenbereich in diesem Projekt ist weit mehr als nur das was ich aufgeführt habe aber hier wird man ja nur dumm von der Seite angemacht und jeder will Geld sehen. Ich glaube ich habe noch nie irgendwo so eine schlechte Community gesehen, nicht mal die unverschämtesten 12jährigen Kiddies die in CoD or Battlefield oder sonst welchen Spielen rumlaufen sind so drauf... Tut mir leid eure ahh so teure Zeit gestohlen zu haben.



  • Immer mit der Ruhe. 🙄

    Mit Salat hat er deine Programmierung mit "goto" gemeint. Dadurch fabrizierst du einen CodeSalat. Weil du irgendwann selber nicht mehr weißt, wohin du überall im Code springst:

    A:
    goto C;
    B:
    goto E;
    C:
    goto B;
    D:
    goto A;
    E:
    goto D;
    

    Hier im Forum wird schon geholfen, nur sollte man am Anfang kleine Brötchen backen und mit einem konkreten Problem hier auftreten und nicht alá Wie programmiert man ein kommplettes Spiel.
    Du sagst doch selber, dass ihr noch am Anfang seid. Warum probiert ihr es nicht einmal mit kleineren Programmen, die euch die Grundlagen vermitteln.

    Klar es hindert euch niemand daran an etwas größeres anzugehen, aber dann solltet ihr auch die richtigen Fragen stellen. 😉 👍

    EDIT:

    Es ist zwar nicht das tollste Programm, aber viel Zeit und Lust hatte ich nicht um es machen. Es soll auch wieder nur ein Denkanstoß sein.
    Den Rest sollte man schon alleine schaffen. 😉

    #include <stdio.h>
    #include <stdlib.h>
    
    void askCard( int* value )
    {
    	printf( "Gebe den Kartenwert an: " );
    	scanf( "%d", value );
    }
    
    int testCard( int oldCardValue, int newCardValue )
    {
        if( newCardValue > 12 || newCardValue <= 0 )
            return -1; // Fehlerhafte Karte wurde gelegt
    
        if( (newCardValue - oldCardValue) == 1 )
            return 1; // Karte darf gelegt werden
        else
            return 0; // Karte darf nicht gelegt werden
    }
    
    int main(void)
    {
    	int handCard = 0;
    	int stackCard = 1;
    	int run = 1;
    
    	while( run )
    	{
    		askCard( &handCard );
    
    		switch( testCard( stackCard, handCard ) )
    		{
    		case 0:
    			printf( "Deine Karte konnte nicht gespielt werden:\n" );
    			break;
    		case 1:
    			printf( "Deine Karte konnte gespielt werden:\n" );
    			stackCard = handCard;
    			printf( "Die Zahl %d liegt auf dem Stapel:", stackCard );
    			break;
    		default:
    			printf( "ERROR" );
    			run = 0;
    			return -1;
    		}
    
    	}
    	return 0;
    }
    

Anmelden zum Antworten