Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

C/C++, Visual C++, Visual C++.NET Fragen und Antworten zu C/C++, Visual C++ und Visual C++.NET

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 94, Antworten: 5
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50850, Antworten: 1390
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26624, Antworten: 4194
Gehe zum ersten neuen Beitrag Windows Oberfläche (Schrift,...
Aufrufe: 177, Antworten: 10
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 65, Antworten: 5
Gehe zum ersten neuen Beitrag TabCtrl
Aufrufe: 122, Antworten: 12
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 18, Antworten: 2
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 50, Antworten: 2
Gehe zum ersten neuen Beitrag McAfee AVERT Stinger...
Aufrufe: 14, Antworten: 0
Gehe zum ersten neuen Beitrag Sticky Password 6.0.2...
Aufrufe: 26, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31.12.2006, 03:19   #1 (Direktlink)
Stammuser
 
Registriert seit: 11.02.2005
Beiträge: 336
Standard Lösungswege für "Schiffe Versenken" in C++

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
Der-Neue ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 04.01.2007, 00:21   #2 (Direktlink)
Stammuser
 
Registriert seit: 11.02.2005
Beiträge: 336
Standard

hat denn keiner was?
Der-Neue ist offline   Mit Zitat antworten
Alt 07.01.2007, 01:25   #3 (Direktlink)
C-Noob
Gast
 
Beiträge: n/a
Standard

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??
  Mit Zitat antworten
Alt 07.01.2007, 01:31   #4 (Direktlink)
C-Noob
Gast
 
Beiträge: n/a
Standard

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
  Mit Zitat antworten
Alt 08.01.2007, 15:30   #5 (Direktlink)
C-Noob
Gast
 
Beiträge: n/a
Standard

hat denn keiner ne ahnung wie das geht?
  Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 08.01.2007, 18:46   #6 (Direktlink)
Dayzd
Gast
 
Beiträge: n/a
Standard

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.
  Mit Zitat antworten
Alt 09.01.2007, 16:44   #7 (Direktlink)
C-Noob
Gast
 
Beiträge: n/a
Standard

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
  Mit Zitat antworten
Alt 11.01.2007, 02:10   #8 (Direktlink)
C-Noob
Gast
 
Beiträge: n/a
Standard

kann mir da keiner weiterhelfen?
  Mit Zitat antworten
Alt 12.01.2007, 21:24   #9 (Direktlink)
War schon mal da
 
Registriert seit: 29.12.2006
Beiträge: 40
Standard

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
Heart Break Kid ist offline   Mit Zitat antworten
Alt 13.01.2007, 00:17   #10 (Direktlink)
C-Noob
Gast
 
Beiträge: n/a
Standard

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
}
//---------------------------------------------------------------------------
  Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 13.01.2007, 14:47   #11 (Direktlink)
War schon mal da
 
Registriert seit: 29.12.2006
Beiträge: 40
Standard

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
Heart Break Kid ist offline   Mit Zitat antworten
Alt 02.02.2007, 19:28   #12 (Direktlink)
Müller
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Heart Break Kid
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
  Mit Zitat antworten
Alt 07.02.2007, 10:58   #13 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 07.02.2007
Beiträge: 22
Standard

Wow, muss ich sagen... Gute Arbeit bis jetzt... Bin zwar auch TAI aber mit soetwas hab ich mich noch nie beschäftigt... respekt!
EckiX ist offline   Mit Zitat antworten
Alt 15.02.2007, 23:28   #14 (Direktlink)
Florian Mycka
Gast
 
Beiträge: n/a
Standard

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
  Mit Zitat antworten
Alt 06.08.2007, 02:01   #15 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 14.11.2004
Ort: Chemnitz
Beiträge: 169
Standard

Schiffeversenken gabs hier mal

http://www.paules-pc-forum.de/phpBB2...senken,30.html
jamo ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an




Alle Zeitangaben in WEZ +2. Es ist jetzt 06:33 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2