WinFuture-Forum.de: Vier Gewinnt - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Vier Gewinnt C++


#1 Mitglied ist offline   Stefan92 

  • Gruppe: aktive Mitglieder
  • Beiträge: 28
  • Beigetreten: 20. Januar 07
  • Reputation: 0

geschrieben 01. Juli 2007 - 12:54

Hallo,

Ich versuche gerade ein Vier gewinnt Spielt zu Programmieren(in c++).
Bevor ich zu dem Problem komme erstmal der Quelltext:

#include <iostream>
using namespace std;

int main()
{
	bool Gewonnen = false;
	bool Zuggemacht = false;
	short Zugx, Zugy; 
	short Zugmerkenx[31], Zugmerkeny[31];
	short AnzahlZug = 1;

do
{
	//Spielfeld
	for(short i=1;i<7;i++)
	{ // Zu!
	for(short j=1;j<11;j++)
	{ // Zu!
	if(Zuggemacht == true)
	{ // Zu!
	for(short k = 1;k <= AnzahlZug; k++)
	{
	if(j == Zugmerkenx[k] && i == Zugmerkeny[k])
	{						
	cout <<"0";
	} // if zu
	 else
	{
	cout <<"X";
	} // else zu
	} // For-Schleife mit k
	} // if (Zuggemacht == true)
	else
	{
	cout <<"X";
	} // else zu
	} // For Schleife mit j
	cout<<endl;
	} // For-Schleife mit i
	
	//Spieler1 Zug	
	cout << "Sie sind an der Reihe! x:";
	cin >> Zugx;
	cout << "					   y:";
	cin >> Zugy;
																											 
	Zugmerkenx[AnzahlZug] = Zugx;
	Zugmerkeny[AnzahlZug] = Zugy;
	AnzahlZug++;
	
	Zuggemacht = true;
	  
}while(Gewonnen == false);


	cin.get();
	return 0;
}

Wenn man das Programm nun startet ist soweit alles ok, nur wenn man dann die koordinaten eingibt und bestätigt, gibt das Programm neben dem eigentlichen Spielfeld, direkdanach noch eins aus und das geht immer so weiter also z.B.:
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX

Man gibt die Koordinaten ein:
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXX0XXXXXXXXXXXXXX
XXXX0XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
und das immer so weiter, jedesmal 1Feld mehr.

Ich hab mir den Quelltext 100 mal angeschaut, aber ich finde den Fehler einfach nicht.

Ich hoffe hier kann mir einer weiterhelfen

Mfg Stefan
0

Anzeige



#2 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 574
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 01. Juli 2007 - 15:23

Dein Programm endet in ner Endlosschleife, weil nirgends im Schleifenkörper (do-Teil) "Gewonnen" verändert wird.
0

#3 Mitglied ist offline   Stefan92 

  • Gruppe: aktive Mitglieder
  • Beiträge: 28
  • Beigetreten: 20. Januar 07
  • Reputation: 0

geschrieben 01. Juli 2007 - 19:15

Zitat

Dein Programm endet in ner Endlosschleife, weil nirgends im Schleifenkörper (do-Teil) "Gewonnen" verändert wird.


Das Programm ist ja noch nicht fertig. Das ist nur zum Testen.^^

Mfg Stefan
0

#4 _Look2Me_

  • Gruppe: Gäste

geschrieben 01. Juli 2007 - 19:26

Wenn es fertig ist, bietest du es dann hier zum Download an? :)
Würde es nämlich dann gerne Downloaden & spielen.
0

#5 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 574
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 01. Juli 2007 - 20:21

Sorry, aber ich hab nur den Anfang vom Quelltext gelesen, weil die Formatierung unter aller Sau is :)
Ansonsten würd ich das mal mit zweidimensionalen Vektoren probieren.
0

#6 Mitglied ist offline   zwutz 

  • Gruppe: aktive Mitglieder
  • Beiträge: 659
  • Beigetreten: 17. Juli 07
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 22. Juli 2007 - 18:17

argh... gewöhn dir mal an, deinen Code richtig einzurücken...

warum eigentlich Koordinaten? in 4 Gewinnt wählt man nur die Spalte aus. Wenn eine Spalte ausgewählt wird füllst du die nächste freie Stelle des zugrundeliegenden Arrays mit dem entsprechenden Wert und gibst das Array von unten nach oben aus...

hab selber noch ein 4 Gewinnt hier rumliegen... allerdings fehlt ein Teil :angry:
mal sehn, ob ich meins mal vervollständigen kann...

Grundgedanken bei 4 Gewinnt:
dsa Spielfeld ist ein zweidimensionales Array, damit lässt es sich am besten arbeiten
mach mehrere Funktionen, das sorgt für einen besseren Überblick und vereinfacht die Tipparbeit. Der Main-Konstrukt ruft diese nur auf (gegenwärtig bei mir sind die Funktionen belege_spalte, frage_nach_spalte, ausgabe und init)

Dieser Beitrag wurde von zwutz bearbeitet: 22. Juli 2007 - 18:23

Raise your glass if you are wrong
0

#7 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 574
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 30. Juli 2007 - 18:00

Ich hab mal ein 4 gewinnt für zwei Spieler geschrieben. Allerdings funktioniert die Prüfung, ob diagonal 4 gleiche Buchstaben eingetragen sind, nicht. Das Programm ist auch noch nicht vollständig: es wird nur auf die zwei langen Diagonalen von links unten nach rechts oben geprüft.
Ich hoffe, einer von euch kann mir sagen, warum die 2 diagonalen Kombinationen nicht erkannt werden. ;)
Zum Code: ähh ja... ;) umständlicher gehts wohl kaum. Gestern nacht ging aber nichts besseres mehr ;)

Angehängte Datei(en)


Dieser Beitrag wurde von Der Kenner bearbeitet: 30. Juli 2007 - 18:01

0

#8 Mitglied ist offline   Campy 

  • Gruppe: aktive Mitglieder
  • Beiträge: 696
  • Beigetreten: 24. Januar 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 03. August 2007 - 11:55

Hallo,

habe das damals mit dem Brute Force Algorithmus mit ein paar "Einschränkungen" gelöst.
So kannste dann auch die Diagonalen prüfen lassen.

MFG Campy
0

#9 Mitglied ist offline   zwutz 

  • Gruppe: aktive Mitglieder
  • Beiträge: 659
  • Beigetreten: 17. Juli 07
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 03. August 2007 - 15:09

@der kenner: stell dir die Überprüfung als Schablone vor, die du über das Spielbrett schiebst... wenn alle Werte darin den selben Wert haben, gilt es als gewonnen

also nehmen wir mal ein Standardspielbrett 6*7
die roten Felder überprüfst du und wenn die drei werte Diagonal darüber (blau) den selben Wert haben hat der Spieler gewonnen, der als letztes dran war

links unten nach rechts oben:
|_|_|_|X|X|X|X|
|_|_|X|X|X|X|X|
|_|X|X|X|X|X|X|
|X|X|X|X|X|X|_|
|X|X|X|X|X|_|_|
|X|X|X|X|_|_|_|

rechts unten nach links oben
|X|X|X|X|_|_|_|
|X|X|X|X|X|_|_|
|X|X|X|X|X|X|_|
|_|X|X|X|X|X|X|
|_|_|X|X|X|X|X|
|_|_|_|X|X|X|X|

Wenn du das Spielfeld als Array aufgebaut hast (hab mir deinen Code nicht angesehen) dürfte es kein Problem darstellen, das ganze mit ner Schleife + ein paar If-Abfragen zu lösen. Die Schleife durchläuft die rot-markierten Felder und mittels If überprüfst du die restlichen blauen auf Gemeinsamkeiten...
Raise your glass if you are wrong
0

#10 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 574
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 03. August 2007 - 19:32

So, habs nochmal objektorientiert umgeschrieben. Den andern Code dürft ihr getrost vergessen ;)

Der Vier-gewinnt-Spielspaß! (für zwei Leute am gleichen Computer auf der Konsole :smokin: )
Edit: Hm ja... Anhang...

Angehängte Datei(en)


Dieser Beitrag wurde von Der Kenner bearbeitet: 03. August 2007 - 22:24

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0