Hilfestellung bein einem Memorysiel



  • Moinliebe Community

    Die nette Lehrerschaft hat uns die Aufgabe gegeben, ein Memoryspiel über die Feiertage zu programmieren. Leider hängt es bei mir 😞
    Ich habe das Spielfeld hinbekommen, nur ich bekomm es nicht mit zufälligen Zahlen gefüllt, bzw nicht angezeigt. Würde mich freuen wenn mir jemand helfen kann!!!

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define clrscr() system("cls")
    
    using namespace std;
    
    	   /* Spielfeld erstellen */
    int main(void) {
    		bool Karten[4][4];
    		int spielfeld [16];
    	 	bool kartenstatus[4][4];
    	 	int x, x1, y, y1;
    	 	int a, karte, zufallszahlen [8];
    
    		printf("      1  2  3  4\n");
    		printf( "     ");
    		for (int i = 0; i <= 11; i++)
    		{
    			printf("-");
    		}
    		printf("\n");
    		for (int j = 0; j<4; j++)
    		{
    			printf(" %d | ", j+1);
    			for (int c = 0; c<4; c++)
    			{
    				printf(" * ");
    				Karten[j][c] = false; 
    			}
    			printf("\n\n");
    		}
    	 do
    	            {
    	               /* 1. Karten wählen */
    
    	               	do
    						{
    						printf("Bitte gebe eine Zeile ein\n");
    						scanf("%i", &x);
    						printf("\nBitte gebe eine Spalte ein\n");
    						scanf("%i", &y);
    						} while (Karten[x - 1][y - 1] != false);
    	                if(Karten[x-1][y-1] == true) // checkt ob die Karte bereits umgedreht ist
    	                {
    	                    printf("Die Karte wurde schon umgedreht ! Nimm eine andere Karte ");
    	                }
    	            }   while(Karten[x-1][y-1]!= false);
    
    	            	/* 2. Karte wählen */
    
    					do
    
    						{
    						printf("Bitte gebe eine Zeile ein\n");
    						scanf("%i", &x1);
    						printf("\nBitte gebe eine Spalte ein\n");
    						scanf("%i", &y1);
    	                	if(Karten[x1-1][y1-1] == true) 
    	                	{
    	                    printf("Die Karte wurde schon umgedreht ! Nimm eine andere Karte");
    	                	}
    	                	if((x==x1)&&(y==y1))
    	               		{
    	                    printf("Du kannst nicht die selbe Karte zweimal nehmen !!");
    	               	    }
    	        			continue;
    
    	            }while(Karten[x1-1][y1-1]!= false);
    
    	            x--;
    	            y--;
    	            x1--;
    	            y1--;
    
    	         /* Karten aufdecken */
    
    	            printf("    1 2 3 4\n");
    	            printf("  ");
    	            for (int i=0; i<=11; i++)
    	            {
    	                printf("-");
    	            }
    	            printf("\n");
    	            	for (int j = 0; j<4; j++)
    						{
    						printf(" %d | ", j+1);
    							for (int c = 0; c<4; c++)
    								{	
                        			if ((x==x1)&&(y==y1))
    	                   			 {
    	                       			printf("%i%i",Karten[j][c]);
    	                    		 }
    	                    		else if((x==x1)&&(y==y1))
    	                    			{
    	                        		printf("%i%i",Karten[j][c]);
    	                    			}
    	                    		if (kartenstatus[j][c] == true)
    	                    			{
    	                        		printf("%i%i",Karten[j][c]);
    	                    			}
    	                    		else
    	                    		    {
    	                             	printf(" * ");
    	                    			}
    	               			    }
    	                		printf("\n");
    	            		}
    clrscr();
    int start[] = {0, 0, 0, 0, 0, 0, 0, 0 };
    	for (int a = 0; a <= 7; a++)
    		zufallszahlen [a]=rand()%99+1;
    	{
    
    		srand ((unsigned) time(NULL));
    		for (karte=0;karte<16;karte++){
    		int s=rand()%8;
    		for(;start[s]>1;s=rand()%8);
    		start[s]=start[s]+1;	
    		spielfeld[karte]=zufallszahlen[s];
    		}
    	}
    	int i = 0;
    	for (int r = 0; r<4; r++) 
    	{
    		for (int c = 0; c<4; c++)
    		{
    		Karten[r][c] = spielfeld[karte];
    			i = i + 1;
    		}
    		printf("\n");
    	}
    }
    


  • Bitte setze deinen Code zwischen Code-Tags: Code markieren und auf den C-Button unter dem 😡 klicken. Dann wird der auch gründlicher angesehen.
    Du als registriertes Mitglied kannst das auch nachträglich machen.

    Das srand kommt nur einmal, ganz am Anfang vom Programm.
    In einer Schleife ist es eine ganz schlechte Idee.
    Wenn du schon an der Stelle bist, schau mal die Klammerung an, ob die an der Stelle richtig ist.

    Und nutze die Möglichkeit der Funktionen.


  • Mod

    https://www.c-plusplus.net/forum/336034

    Vielleicht hätte eure nette, geschätzte Lehrerschaft weniger Gewicht darauf legen sollen, dass ihr in der Öffentlichkeit höflich über sie sprecht, und mehr darauf, dass ihr das Fach besser versteht. Die erste Antwort aus dem Thread deines Mitschülers gilt auch für dich: Jagen wir das Programm mal durch einen Compiler mit aktivierten Warnungen. Insbesondere nehme ich mal einen C-Compiler, denn du mischt hier C++-Sprachelemente in dein Programm. Das Ergebnis ist ernüchternd:

    test.c:6:1: error: unknown type name 'using'
     using namespace std;
     ^
    test.c:6:17: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'std'
     using namespace std;
                     ^
    test.c: In function 'main':
    test.c:10:3: error: unknown type name 'bool'
       bool Karten[4][4];
       ^
    test.c:12:3: error: unknown type name 'bool'
       bool kartenstatus[4][4];
       ^
    test.c:31:26: error: 'false' undeclared (first use in this function)
               Karten[j][c] = false;
                              ^
    test.c:31:26: note: each undeclared identifier is reported only once for each function it appears in
    test.c:46:30: error: 'true' undeclared (first use in this function)
           if(Karten[x-1][y-1] == true) // checkt ob die Karte bereits umgedreht ist
                                  ^
    test.c:94:22: warning: format '%i' expects a matching 'int' argument [-Wformat=]
                   printf("%i%i",Karten[j][c]);
                          ^
    test.c:98:22: warning: format '%i' expects a matching 'int' argument [-Wformat=]
                   printf("%i%i",Karten[j][c]);
                          ^
    test.c:102:22: warning: format '%i' expects a matching 'int' argument [-Wformat=]
                   printf("%i%i",Karten[j][c]);
                          ^
    test.c:14:7: warning: unused variable 'a' [-Wunused-variable]
       int a, karte, zufallszahlen [8];
    

    Neben jeder Menge anderer Fehler beantwortet dies auch deine Frage, wenn du all diese Warnungen als Fehler ansiehst (was du solltest).

    Ich selber habe mir den Code nicht angeguckt, da er in unlesbarer Form präsentiert wurde. Wie man seinen Beitrag lesbar formatiert



  • Das ich mische kann sein, da ich einiges aus dem Netz habe.



  • Danke für die Code-Tags

    Paddy198 schrieb:

    Das ich mische kann sein, da ich einiges aus dem Netz habe.

    Du weißt also gar nicht, was du in deinem Programm machst.

    Das sieht man auch am Einrückungsstil: da ist keiner.
    Aber gerade der erhöht die Lesbarkeit.

    Zudem nehme ich an, das du mitlerweile das Programm verändert hast.
    Darum wäre der aktuelle Stand interessant.


Anmelden zum Antworten