![]() |
Anzeige:
|
|
|||||||
| C/C++, Visual C++, Visual C++.NET Fragen und Antworten zu C/C++, Visual C++ und Visual C++.NET |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Stammuser
![]() Registriert seit: 11.02.2005
Beiträge: 336
|
moin moin allerseits,
da ich TAI (Technischer Assistent für Informatik) bin mussten wir bis kurz vor Weihnachten unser erstes Projekt in C++ abgeben. Das Projekt war Schiffe versenken. Da unser lehrer gemeint hat, dass er nach den Ferien 2 Wochen auf Fortbildung ist könnte es noch lange dauern bis wir eine Lösung bekommen wie wir es hätten machen können. Doch so lange will ich net warten ich will wissen wie ich verschiedene dinge hätte Lösen können (manches funktionierte bei mir nicht so recht) Mich würds also intressieren ob jemand Schiffe Versenken in C++ gemacht hat (vllt. sind hier auch ein paar TAI's unterwegs, was natürlich besser währe vom Lösungsvorschlag weil ihr ja dann auch nichts anders als wir gemacht habt. Schiffe Versenken war/ist wie ich mitbekommen habe ein sehr beliebtes Projekt). Wenn es also noch jemand auf der HDD rumliegen hat oder sonstwo ... ich würd mich mal dafür intressieren wie ihr das so gemacht habt. Meinen Lösungsweg werd ich auch ma posten muss es nur nochmal rauskramen :P MfG Der-Neue |
|
|
|
|
|
|
#2 (Direktlink) |
|
Stammuser
![]() Registriert seit: 11.02.2005
Beiträge: 336
|
hat denn keiner was?
|
|
|
|
|
|
#3 (Direktlink) |
|
Gast
Beiträge: n/a
|
ich habe keine Lösung aber ich selbst hab ne frage:
wie um himmels willen geht das, das der PC automatisch die schiffe setzt? ich poste mal was ich schon habe: Code:
//HEADER---------------------------------------------------------------------
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <math.h>
//VOID-Deklaration-----------------------------------------------------------
void feld (void);
//MAIN-----------------------------------------------------------------------
int main()
{
feld();
}
//Spielfeld------------------------------------------------------------------
void feld (void)
{
char w=205,s=186,k=206,elo=201,elu=200,ero=187,eru=188,sou=203,soo=202,sol=185,sor=204,l=255;
char eingabe=0;
int groesse=0,richtungseingabe=0,zeile=26,spalte=2,zeilenbegrenzunglinks=0;
int zeilenbegrenzungrechts=0,spaltenbegrenzungunten=0,spaltenbegrenzungoben=0;
//Ascii- Tabelle
/*char linie=0;
for(int i=0;i<265;i++)
{
linie=i;
cout<<i<<" = "<<linie<<endl<<endl;
}
getchar();*/
/*Werte der ASCII Zeichen des Spielfeldes
Ergebnis
leer=255 l
doppellinie waagrecht=205 w
doppellinie senkrecht=186 s
doppellinie kreuz=206 k
doppellinie ecke links oben=201 elo
doppellinie ecke links unten=200 elu
doppellinie ecke rechts oben=187 ero
doppellinie ecke rechts unten=188 eru
doppellinie seitenteil Oeffnung unten=203 sou
doppellinie seitenteil Oeffnung oben=202 soo
doppellinie seitenteil Oeffnung links=185 sol
doppellinie seitenteil Oeffnung rechts=204 sor
*/
do
{
clrscr();
cout<<"\n\tWaehlen Sie Ihren gewuenschten Schwierigkeitsgrad aus:"
<<"\n\tFuer leicht (Feld: 8x 8) druecken Sie die Taste\t[l] bzw. [L]"
<<"\n\tFuer mittel (Feld: 10x10) druecken Sie die Taste\t[m] bzw. [M]"
<<"\n\tFuer schwer (Feld: 12x12) druecken Sie die Taste\t[s] bzw. [S]\n\t";
cin>>eingabe;
}while(eingabe!='l' && eingabe!='L' && eingabe!='m' && eingabe!='M' && eingabe!='s' && eingabe!='S');
switch(eingabe) //Auswahl des Schwierigkeitsgrades
{
case'l':
case'L': zeilenbegrenzunglinks=26; //Begrenzung des Spielfeldes
zeilenbegrenzungrechts=45;
spaltenbegrenzungunten=15;
spaltenbegrenzungoben=2;
groesse=8;
break;
case'm':
case'M': zeilenbegrenzunglinks=26; //Begrenzung des Spielfeldes
zeilenbegrenzungrechts=51;
spaltenbegrenzungunten=19;
spaltenbegrenzungoben=2;
groesse=10;
break;
case's':
case'S': zeilenbegrenzunglinks=26; //Begrenzung des Spielfeldes
zeilenbegrenzungrechts=57;
spaltenbegrenzungunten=23;
spaltenbegrenzungoben=2;
groesse=12;
break;
}
getchar();
clrscr();
//kopfzeile des Spielfeldes
cout<<"\t\t\t"<<elo;
for (int a=0;a<groesse-1;a++)
{
cout<<w<<w<<sou;
}
cout<<w<<w<<ero<<endl;
//innere flaeche des Spielfeldes
for(int zeile=0;zeile<groesse-1;zeile++)
{
cout<<"\t\t\t"<<s;
for(int spalte=0;spalte<groesse;spalte++)
{
cout<<l<<l<<s;
}
cout<<endl<<"\t\t\t"<<sor;
for(int spalte2=0;spalte2<groesse-1;spalte2++)
{
cout<<w<<w<<k;
}
cout<<w<<w<<sol<<endl;
}
//fusszeile des Spielfeldes
cout<<"\t\t\t"<<s;
for(int spalte=0;spalte<groesse;spalte++)
{
cout<<l<<l<<s;
}
cout<<endl<<"\t\t\t"<<elu;
for(int b=0;b<groesse-1;b++)
{
cout<<w<<w<<soo;
}
cout<<w<<w<<eru;
gotoxy(zeile,spalte); //geht ins erste Kaestchen des Spielfeldes (Wertzuweisung oben)
do
{
getch();
int richtung=getch();
if(richtung==77) //schritt nach rechts
{
if(zeile<zeilenbegrenzungrechts)
{
zeile=zeile+3;
}
}
else if(richtung==75) //schritt nach links
{
if(zeile>zeilenbegrenzunglinks)
{
zeile=zeile-3;
}
}
else if(richtung==80) //schritt nach unten
{
if(spalte<spaltenbegrenzungunten)
{
spalte=spalte+2;
}
}
else if(richtung==72) //schritt nach oben
{
if(spalte>spaltenbegrenzungoben)
{
spalte=spalte-2;
}
}
gotoxy(zeile,spalte);
}while(richtungseingabe!=120 && richtungseingabe!=88); //das druecken der Taste X beendet die richtungsauswahl
}
//---------------------------------------------------------------------------
könnte mir da jemand sagen wie das geht?? |
|
|
|
#4 (Direktlink) |
|
Gast
Beiträge: n/a
|
was ich vergessen habe zu sagen.
wieviele schiffe ich da möchte. bei leicht (feldgröße 8x8) = 2x 2er, 2x 3er, 1x 4er Schiffe bei mittel (feldgröße 10x10) = 2x 1er, 2x 2er, 2x 3er, 1x 4er Schiffe bei schwer (feldgröße 12x12) = 4x 1er, 3x 2er, 2x 3er, 1x 4er, 1x 5er Schiffe |
|
|
|
#5 (Direktlink) |
|
Gast
Beiträge: n/a
|
hat denn keiner ne ahnung wie das geht?
|
|
|
|
|
#6 (Direktlink) |
|
Gast
Beiträge: n/a
|
Bin zwar nicht TAI, aber ITA(infofmationstechnischer Assistent) im ersten Jahr XD
Mir würde da dnur die random funktion einfallen. erstmal am Anfang den Befehl randomize(); setzen um den zu initialisiern. und dann dem Buchstaben des feldes setzen mit: variable=random(x)+1; //random wählt hier von 0 bis x-1 und dann kann man einer anderen variable den entsprechenden buchstaben zuweisen. z.B. A=1 B=2 usw. Das würde dann mit Case funktionieren. Und die Zahl für die Koordinaten kann man einfach auch mit random(y)+1; zuweisen. Mit if muss man dann halt testen dass nichts übereinander liegt. So ungefähr würde ich das lösen, aber ich bin noch nicht so ganz gut. |
|
|
|
#7 (Direktlink) |
|
Gast
Beiträge: n/a
|
erstmal danke dass du mir helfen willst.
könntest du mir evtl. ein paar zeilen shcon mal proggen denn ich hab ehrlich gesagt keine ahnung wie ich das umsetzen soll. DANKE schon einmal |
|
|
|
#8 (Direktlink) |
|
Gast
Beiträge: n/a
|
kann mir da keiner weiterhelfen?
|
|
|
|
#9 (Direktlink) |
|
War schon mal da
![]() Registriert seit: 29.12.2006
Beiträge: 40
|
geduld^^
Wie genau soll das ganze denn ausehen, ich habs nochnicht so richtig gepeilt^^ Mir fällt spontan auch nur der Random Befehl(siehe oben) Ansonsten (wenn du das nicht verstehst) schau mal in Tuts nach (ich hab den leider auch erst einmal benutzt)
__________________
Spezialitäten: C, C++, html, PHP |
|
|
|
|
|
#10 (Direktlink) |
|
Gast
Beiträge: n/a
|
mir ist es eigentlich egal wie es gelöst wird, hauptsache es funkioniert.
Es sollen lediglich für jede Schwierigkeitsstufe die o.g. Schiffe gesetzt werden und zwar zuällig, sprich zufällig Waagerecht oder Senkrecht und irgendwo im Feld. Währ vllt irgendeiner so gütig und könnte mir das bischen reinproggen denn ich hab mir schon einige Tips angehört nur echt keinen Plan wie ichs umsetzen soll. VIELEN VIELEN DANK P.S. mein aktueller bestand des Quelltextes: Code:
//HEADER---------------------------------------------------------------------
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <math.h>
//VOID-Deklaration-----------------------------------------------------------
void feld (void);
//MAIN-----------------------------------------------------------------------
int main()
{
feld();
}
//Spielfeld------------------------------------------------------------------
void feld (void)
{
char w=205,s=186,k=206,elo=201,elu=200,ero=187,eru=188,sou=203,soo=202,sol=185,sor=204,l=255;
char eingabe=0;
int groesse=0,richtungseingabe=0,zeile=10,spalte=2,zeilenbegrenzunglinks=0;
int zeilenbegrenzungrechts=0,spaltenbegrenzungunten=0,spaltenbegrenzungoben=0;
int feld[12][12]={NULL};
//Ascii- Tabelle
/*char linie=0;
for(int i=0;i<265;i++)
{
linie=i;
cout<<i<<" = "<<linie<<endl<<endl;
}
getchar();*/
/*Werte der ASCII Zeichen des Spielfeldes
Ergebnis
leer=255 l
doppellinie waagrecht=205 w
doppellinie senkrecht=186 s
doppellinie kreuz=206 k
doppellinie ecke links oben=201 elo
doppellinie ecke links unten=200 elu
doppellinie ecke rechts oben=187 ero
doppellinie ecke rechts unten=188 eru
doppellinie seitenteil Oeffnung unten=203 sou
doppellinie seitenteil Oeffnung oben=202 soo
doppellinie seitenteil Oeffnung links=185 sol
doppellinie seitenteil Oeffnung rechts=204 sor
*/
do
{
clrscr();
cout<<"\n\tWaehlen Sie Ihren gewuenschten Schwierigkeitsgrad aus:"
<<"\n\n\n\n\tFuer leicht (Feld: 8x 8) druecken Sie die Taste\t[l] bzw. [L]"
<<"\n\tFuer mittel (Feld: 10x10) druecken Sie die Taste\t[m] bzw. [M]"
<<"\n\tFuer schwer (Feld: 12x12) druecken Sie die Taste\t[s] bzw. [S]"
<<"\n\n\tFuer die Hilfe druecken Sie die Taste\t\t\t[h] bzw. [H]";
gotoxy(64,2);
eingabe=getch();
switch(eingabe) //Auswahl des Schwierigkeitsgrades
{
case'l':
case'L': zeilenbegrenzunglinks=10; //Begrenzung des Spielfeldes
zeilenbegrenzungrechts=29;
spaltenbegrenzungunten=15;
spaltenbegrenzungoben=2;
groesse=8; //Breite und Hoehe des Spielfeldes
break;
case'm':
case'M': zeilenbegrenzunglinks=10; //Begrenzung des Spielfeldes
zeilenbegrenzungrechts=36;
spaltenbegrenzungunten=19;
spaltenbegrenzungoben=2;
groesse=10; //Breite und Hoehe des Spielfeldes
break;
case's':
case'S': zeilenbegrenzunglinks=10; //Begrenzung des Spielfeldes
zeilenbegrenzungrechts=41;
spaltenbegrenzungunten=23;
spaltenbegrenzungoben=2;
groesse=12; //Breite und Hoehe des Spielfeldes
break;
case'h':
case'H':
clrscr();
cout<<"\n\tHilfe";
getchar();
eingabe='a'; //Schleife kann nicht beendet werden (variable 'eingabe' ist nicht 'l', 'L', 'm', 'M', 's', 'S', 'h' oder 'H' sondern 'a')
break;
}
}while(eingabe!='l' && eingabe!='L' && eingabe!='m' && eingabe!='M' && eingabe!='s' && eingabe!='S' && eingabe!='h' && eingabe!='H');
clrscr();
//kopfzeile des Spielfeldes
cout<<"\t"<<elo;
for (int a=0;a<groesse-1;a++)
{
cout<<w<<w<<sou;
}
cout<<w<<w<<ero<<endl;
//innere flaeche des Spielfeldes
for(int zeile=0;zeile<groesse-1;zeile++)
{
cout<<"\t"<<s;
for(int spalte=0;spalte<groesse;spalte++)
{
cout<<l<<l<<s;
}
cout<<endl<<"\t"<<sor;
for(int spalte2=0;spalte2<groesse-1;spalte2++)
{
cout<<w<<w<<k;
}
cout<<w<<w<<sol<<endl;
}
//fusszeile des Spielfeldes
cout<<"\t"<<s;
for(int spalte=0;spalte<groesse;spalte++)
{
cout<<l<<l<<s;
}
cout<<endl<<"\t"<<elu;
for(int b=0;b<groesse-1;b++)
{
cout<<w<<w<<soo;
}
cout<<w<<w<<eru;
gotoxy(zeile,spalte); //geht ins erste Kaestchen des Spielfeldes (Wertzuweisung oben)
int zaehlerzeile=0,zaehlerspalte=0;
do
{
gotoxy(60,2);
cout<<"Koordinate";
gotoxy(60,5);
cout<<"Spalte:"<<setw(3)<<zaehlerspalte+1;
gotoxy(60,6);
cout<<"Zeile:"<<setw(4)<<zaehlerzeile+1;
gotoxy(zeile,spalte);
getch();
int richtung=getch();
if(richtung==77) //schritt nach rechts
{
if(zeile<zeilenbegrenzungrechts)
{
zeile=zeile+3;
zaehlerspalte++; //setzt aktuelle Possition im Array
}
}
else if(richtung==75) //schritt nach links
{
if(zeile>zeilenbegrenzunglinks)
{
zeile=zeile-3;
zaehlerspalte--; //setzt aktuelle Possition im Array
}
}
else if(richtung==80) //schritt nach unten
{
if(spalte<spaltenbegrenzungunten)
{
spalte=spalte+2;
zaehlerzeile++; //setzt aktuelle Possition im Array
}
}
else if(richtung==72) //schritt nach oben
{
if(spalte>spaltenbegrenzungoben)
{
spalte=spalte-2;
zaehlerzeile--; //setzt aktuelle Possition im Array
}
}
}while(richtungseingabe!=120 && richtungseingabe!=88); //das druecken der Taste X beendet die richtungsauswahl
}
//---------------------------------------------------------------------------
|
|
|
|
|
#11 (Direktlink) |
|
War schon mal da
![]() Registriert seit: 29.12.2006
Beiträge: 40
|
also sozusagen ein level? ich gugg mal ob ich was für dich finde..
Spontan würde mir halt auch nur random einfallen und das ist doch obern schon erklärt, aber ich suche mal wasn anderes für dich. Vieleicht kannst du auch mal in Foren schauen die sich nur mit C, C++ beschäftigen, aber ich suche mal was
__________________
Spezialitäten: C, C++, html, PHP |
|
|
|
|
|
#12 (Direktlink) | |
|
Gast
Beiträge: n/a
|
Zitat:
|
|
|
|
|
#13 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 07.02.2007
Beiträge: 22
|
Wow, muss ich sagen... Gute Arbeit bis jetzt... Bin zwar auch TAI aber mit soetwas hab ich mich noch nie beschäftigt... respekt!
|
|
|
|
|
|
#14 (Direktlink) |
|
Gast
Beiträge: n/a
|
Falls das noch aktuell ist:
Fang bei dem größten Schiff an. Erzeuge dir eine Zufallsfahl für die X-Koordinate im Spielfeld und eine für Y. So, nun hast du dein erstes Schiffsteil. Da es dein erstes Schiff ist, musst du nicht auf Kollision testen. Als nächstes geh hin, und addiere auf X eins drauf. Teste, ob du noch immer im Spielfeld bist. Wenn ja, addiere auf den neuen Wert wieder eins. Immernoch drin? Dann weiter machen. Kannst auch 5 mal je eins abziehen und testen. Dann nimm dir nun das erste 4er Schiff vor. Wieder X-Y mit Zufallszahl bestimmen, aber ab jetzt musst du immer auf Kollision testen. Im Array deiner Schiffe nachschaun, ob das Feld noch frei ist. Wenn ja, als "create" markieren und X um eins erhöhen. Im Feldfeld testen und auf Kollision testen.... beides ok, dann wieder als "create" markieren. Wenn nun Teil 1, 2, 3 und 4 deines zu erstellenden Schiffes die beiden Tests bestanden haben, kannst du dein Schiff als platziert markieren. Entweder arbeitest du dafür mit einem temp. Array des Typs bool oder du hast dein Spiel-Array mit Typ int. 0: leer, 1: create, 2: gesetzt, 3: Teil versenkt. Dann musst du nur noch die Schleifen durchlaufen, wie viele Schiffe eines Typs du haben willst... fertig... So kann die KI zumindest Schiffe der richtigen Anzahl setzten, die im Spielfeld sind und sich nicht überlagern. Kannst den Test auch noch erweitern und jeweils fragen, ob um ein zu erstellendes Schiff kein schon gesetztes angrenzt. Gruß Florianer |
|
|
|
#15 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 14.11.2004
Ort: Chemnitz
Beiträge: 169
|
|
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|