000
26.01.2011, 14:51 Uhr
Tjelfe
|
Hallo, ich habe ein kleines Problem, ich muss für ein schulprojekt 4 Gewinnt programmieren, und bekomme die Prüfungen nicht hin.
Da ich nicht haufenweise if Abfragen machen möchte, habe ich versucht über eine for Schleife mit nur einer If Abfrage für jeweils senkrecht, waagerecht und diagonal auszukommen.
hoffe Ihr könnt mir weiterhelfen.
Lg Tjelfe
C++: |
// 4_Gewinnt.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. //
#include "stdafx.h" #include "iostream" #include "conio.h" #include "string" #include "windows.h" //Wird für die Funktion system("cls") benutzt um den Bildschirm //zu säubern
using namespace std;
class spiel { private: string spielfeld[7][8]; //Spielfeld[Spalte][reihe] int i,j,s0,s1,s2,s3,s4,s5,s6,temp; // s Variablen zum runterzählen des Spielfeldes bool win; //Boolische Werte arbeiten mit true und false: //true kann man mit 1 gleichsetzen und false mit 0 wie beim binärsystem public: void erstell_feld() //Funktion zum erstellen des ersten Feldes mit dem + als Platzhalter { for (i=0;i<6;i++) { for (j=0; j<7;j++) { spielfeld[i][j]='+'; } } } void neu_erstell() //Funktion wird jedesmal nach dem setzen aufgerufen { //um den Platzhalter mit dem Spieler zu füllen cout<<"*****Willkommen bei 4-Gewinnt*****\n\n"; for (int i=0;i<6;i++) { for(int j=0;j<8;j++) { cout<<spielfeld[i][j]; } cout<<"\n"; } cout<<"-------\n1234567\n\n"; //Ausgabe der zu wählenden Zahlen } void temp0(){temp=5;} void variable() { s0=5; s1=5; s2=5; s3=5; s4=5; s5=5,s6=5; //alle Spaltenvariablen werden auf 5 gesetzt } //da jedes Feld mit spielfeld[?][5] beginnt //und beim Setzen runtergezählt werden müssen void stein_werfen(int spalte,string spieler)//Aus dem Hauptprogramm werden die spalte und der { //Spieler übergeben. if(spalte==0) //wenn die angegebene Spalte zwischen 1 und 7 { //liegt, wird der Spieler gesetzt und die Variable um 1 verringert spielfeld[s0][spalte]=spieler;s0--;temp=s0; } else if(spalte==1) { spielfeld[s1][spalte]=spieler;s1--;temp=s1; } else if(spalte==2) { spielfeld[s2][spalte]=spieler;s2--;temp=s2; } else if(spalte==3) { spielfeld[s3][spalte]=spieler;s3--;temp=s3; } else if(spalte==4) { spielfeld[s4][spalte]=spieler;s4--;temp=s4; } else if(spalte==5) { spielfeld[s5][spalte]=spieler;s5--;temp=s5; } else if(spalte==6) { spielfeld[s6][spalte]=spieler;s6--;temp=s6; } } //Prüfen ob 4 Steine senkrecht,waagerecht oder diagonal dem selben spieler gehören. bool prüfe(int spalte, string spieler) { win=false; //win wird gleich auf false gesetzt, damit wenn jemand 4 in einer Reihe hat //win als true gekennzeichnet werden kann und das spiel somit beendet //senkrecht for(i=0;i<4;i++) { if(spielfeld[temp][spalte]==spieler&& spielfeld[temp-1][spalte]==spieler && spielfeld[temp-2][spalte]==spieler) { win=true; return win; } } //waagerecht for(i=5;i<=3;i--) { if(spielfeld[temp][i]==spieler&& spielfeld[temp][i-1]==spieler && spielfeld[temp][i-2]==spieler && spielfeld[temp][i-3]==spieler) { win=true; return win; } }
//diagonal for(i=5;i<0;i--) { if(spielfeld[i][spalte]==spieler &&spielfeld[i-1][spalte+1]==spieler && spielfeld[i-2][spalte+2]==spieler) { win=true; return win; } } }
int rückgabe(int spalte) //Rückgabe der Werte der Spalten zum Prüfen ob die Spalte voll ist { //+1 da die Spalte den Wert 0 Erreichen muss um das Feld zu füllen if(spalte==0) { return s0+1; } if(spalte==1) { return s1+1; } if(spalte==2) { return s2+1; } if(spalte==3) { return s3+1; } if(spalte==4) { return s4+1; } if(spalte==5) { return s5+1; } if(spalte==6) { return s6+1; } } };
int _tmain(int argc, _TCHAR* argv[]) { spiel sp; int s0,prüf; int weiter,h,spalte; bool win=false; string spieler[3]; //Spieler werden als Array abglegt um einfacher zwischen ihnen zu wechseln spieler[1]="0"; spieler[2]="X"; sp.erstell_feld(); sp.variable(); do { for(h=1;h<=2;h++) {sp.temp0(); do { sp.neu_erstell(); cout<<"Spieler "<<spieler[h]<<" welche spalte: "; cin>>spalte; prüf=sp.rückgabe(spalte-1); } while(spalte<1 || spalte>7||prüf==0);
win=sp.prüfe(spalte-1,spieler[h]); sp.stein_werfen(spalte-1,spieler[h]); //mit -1 übergeben, wegen dem Aufbau des Feldes if(win==true){cout<<"\nSpieler "<<spieler[h]<<" hat gewonnen"; break;} system("cls");//Clearscreenbefehl } } while(win==false);//läuft solange durch wie die Variable win auf false gesetzt ist getch(); return 0; }
|
Dieser Post wurde am 26.01.2011 um 16:55 Uhr von FloSoft editiert. |