Vier-Gewinnt funktioniert nicht :(



  • Hallo! Habe folgenden Code programmiert, man achte auf die globalen Variablen. Irgendwie speichert das Programm nicht die momentanen Werte in diese glob. Variablen.
    Wie würde es mit Pointern aussehen (Call by Reference)?

    // 4gewinnt.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    #include <stdio.h>
    #include <stdafx.h>
    #include <stdlib.h>
    void abfrageZeile(void);
    void werteingabe(short spieler);
    void tabelle(void);
    int aiZeichen [6][7]={0};
    int zeile=0;
    int reihe=0;
    int i=0;
    
    void abfrageZeile(void)
    {
    	int nochnicht=0;
    	for (i=0;i<6;i++)
    	{
    		if (aiZeichen[i][reihe]!=0)
    		{
    			zeile++;
    		}
    		else if (zeile>5)
    		{
    			printf ("Reihe belegt!\n");
    			werteingabe(1);
    		}
    		else if ((aiZeichen[i][reihe] == 0)&& nochnicht==0)
    		{
    			zeile=i;
    			nochnicht=1;
    		}
    		else 
    		{
    			printf ("Fehler.");
    		}
    	}
    }
    
    void werteingabe(short spieler)
    {
    
    	printf ("Spieler-%d, Reihe eingeben: ",spieler);
    	scanf ("%d",&reihe);
    	abfrageZeile();
    	aiZeichen[zeile][reihe-1]= 'X';
    
    	system("cls");
    	tabelle();
    	//return 1;
    
    }
    
    void tabelle(void)
    {
    	printf ("\t     1 %c 2 %c 3 %c 4 %c 5 %c 6 %c 7\n", 179, 179, 179,179,179,179);
    	printf ("\t6  %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c \n",186, aiZeichen [5][0],179,aiZeichen [5][1],179,aiZeichen [5][2],179,aiZeichen [5][3],179,aiZeichen [5][4],179,aiZeichen [5][5],179,aiZeichen [5][6],186 );
    	printf ("\t5  %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c \n",186, aiZeichen [4][0],179,aiZeichen [4][1],179,aiZeichen [4][2],179,aiZeichen [4][3],179,aiZeichen [4][4],179,aiZeichen [4][5],179,aiZeichen [4][6],186 );
    	printf ("\t4  %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c \n",186, aiZeichen [3][0],179,aiZeichen [3][1],179,aiZeichen [3][2],179,aiZeichen [3][3],179,aiZeichen [3][4],179,aiZeichen [3][5],179,aiZeichen [3][6],186 );
    	printf ("\t3  %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c \n",186, aiZeichen [2][0],179,aiZeichen [2][1],179,aiZeichen [2][2],179,aiZeichen [2][3],179,aiZeichen [2][4],179,aiZeichen [2][5],179,aiZeichen [2][6],186 );
    	printf ("\t2  %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c \n",186, aiZeichen [1][0],179,aiZeichen [1][1],179,aiZeichen [1][2],179,aiZeichen [1][3],179,aiZeichen [1][4],179,aiZeichen [1][5],179,aiZeichen [1][6],186 );
    	printf ("\t1  %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c \n",186, aiZeichen [0][0],179,aiZeichen [0][1],179,aiZeichen [0][2],179,aiZeichen [0][3],179,aiZeichen [0][4],179,aiZeichen [0][5],179,aiZeichen [0][6],186 );
    
    }
    
    void main (void)
    {
    tabelle();
    werteingabe(1);
    werteingabe(1);
    werteingabe(1);
    system("pause");
    }
    

    Vielen Dank!



  • hat denn keiner ne Idee? Es ist ja erstmal nur ein zwischenschritt, aber ich komm da einfach nicht weiter.



  • Vielleicht solltest du mal im Debugger betrachten, was da eigentlich passiert. Und es wäre eine gute Idee, das Array am Beginn mit etwas dastellbaren zu füllen (für Testzwecke vielleicht ein '.', im ferigen Programm ein Leerzeichen).

    (btw, die <stdafx.h> solltest du als allererstes einbinden - der MSVC hat die Angewohnheit, alles davor zu ignorieren)



  • 1. "void main(void)"
    2. "system("pause")"
    3. globale variablen
    4. "scanf"
    5. "printf"

    wenn man das alles sieht bekommt man doch augenkrebs, und zudem benutzt du nichts MFC spezifisches sondern proggs in C

    zu deinen fehler:

    int aiZeichen [6][7]={0};
    /* ... */
    aiZeichen[zeile][reihe-1]= 'X';

    faellt dir da was auf ?



  • Mr Evil schrieb:

    int aiZeichen [6][7]={0};
    /* ... */
    aiZeichen[zeile][reihe-1]= 'X';

    faellt dir da was auf ?

    vielleicht bin ich blind, aber nein, mir fällt da nix auf 😃 Bin noch in der Ausbildung, vielleicht liegt's daran.



  • du erstellst ein "int" array, aber weist ein "char" zu
    'X' ist ein char, wundert mich das der compiler das so ueberhaupt nimmt
    {er sollte mindestens warnen das er das char nach int castet}



  • Anscheinend hat das das Problem nicht behoben. Ich habe es gerade ausprobiert, führte jedoch zu keinem positiven Ergebnis.

    Es kann nicht daran liegen, weil wir ja kein Char (Zeichen) zuweisen, sondern ein ASCII_Wert.

    Gruß



  • jedes zeichen ist ein bestimmter wert - also ja
    weis doch einfach mal statt ein X eine zahl zu, und machs im debugger schritt fuer schritt, dann kannst du sehen was die variablen wann machen {hau die innen watch}



  • Ohne deinen Code vollständig gelesen oder gar verstanden zu haben:

    int aiZeichen [6][7]={0};
    

    Die Initialisierung mit {0} initialisiert nur das erste Element in deinem Array.

    Wenn die anderen Werte auch 0 sind ist das reiner Zufall (Es sei denn Microsoft hat etwas grundlegendes geändert).

    Könnte es daran liegen ?



  • nene, das ist so richtig, wenn man keine meheren werte angibt, werden alle auf 0 gesetzt, das passt so schon


Anmelden zum Antworten