Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Schiffe versenken (Schiffe zufällig setzen)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.01.2007, 15:07 Uhr
SearchAndDestroy



moin moin,

möchte bischen C++ lernen und dachte Programmierst mal ein kleines Game.
Dachte ich ... doch nicht so leicht wie ich mir zuerst vorgestellt hab.


Was ich schon habe ist folgendes:




C++:

//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
}
//---------------------------------------------------------------------------





mein Problem ist, ich hab sowas von keinen Plan wie ich die Schiffe zufällig setzen lassen kann, sodass die sich auch net kreuzen.

könnte mir das jemand vllt. ergänzen?

dachte dabei an:
Leicht: (feldgröße 8x8) = 2x 2er, 2x 3er, 1x 4er Schiffe
Mittel: (feldgröße 10x10) = 2x 1er, 2x 2er, 2x 3er, 1x 4er Schiffe
Schwer: (feldgröße 12x12) = 4x 1er, 3x 2er, 2x 3er, 1x 4er, 1x 5er Schiffe



Ich beDANKE mich schon einmal bei euch!

MfG S&D


P.S. nehme auch SEHR GERNE Verbesserungsvorschläge an.

Dieser Post wurde am 11.01.2007 um 15:13 Uhr von SearchAndDestroy editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.01.2007, 15:13 Uhr
mischa
Fragender


du erstellst dir einfach eine 2d matrix und ermitellst die koordinaten durch den zufals generator. und setzt den inhalt dieses elementes auf 1 und wenn es schon eins ist lässt du die prozedur nochmal laufen
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.01.2007, 15:18 Uhr
SearchAndDestroy



nur ist das Problem, ich hab keine Ahnung wie ich das umsetzen soll.


gut die Matrix is ganz klar ein Array (was ich schon deklariert habe).



nur weis ich net wie ich ein Schiff mit einer gewissen länge setzen kann, und zwar so, dass es zufällig ist ob waagerecht und senkrecht und dass es zufällig ist wo es plaziert wird und halt dann noch, das sich 2 nicht kreuzen.


ich steh da echt voll auf dem schlauch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.01.2007, 15:27 Uhr
mischa
Fragender


dan überleg doch etwas ich hab auch mal ein schiffe versenken programmiert ist nicht so schwer wenn du dir mal ne strucktur überlegt hast versuchdas mit klassen su machen das hilft echt
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.01.2007, 15:41 Uhr
SearchAndDestroy



dass ich mich an ein forum wende war ja meine letzte möglichkeit ...
wollte es auch zuerst selbst rausfinden hab mich die ganze ran gesetzt und überlegt ...
das Programm liegt schon seit 1 woche auf glatteis ...


wenn ich jetzt nicht weiterkomme schmeiß ich das spiel hin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.01.2007, 17:16 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


schreib dir eine funktion setzte schiff.

der übergibst du das jeweilige schiff (also was es für eines ist/Größe) und die linke obere ecke und ob es vertikal oder horizontal ausgerichtet werden soll..

dann guckt deine dann ob die notwendigen felder frei sind. Wenn ja "packst du das schiff darauf und lieferst ein true zurück wenn nein ein false.

in einer schleife rufst du dann so lange die funktoin setze schiff auf bis die ein true zurücklieferst. die paramter der linken ecke und ob horiontal oder vertikal lässt du einfach per zufall mit rand generieren...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.01.2007 um 17:17 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: