Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » [WaTor] => HILFE!!!

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 < [ 2 ]
000
30.05.2008, 16:38 Uhr
Mind_Freak



Hallo Leute,

Ich bin neu hier und hab gleich mal eine frage zu dem "Spiel" WaTor.
Und zwar wollte ich fragen ,warum meine Fische sich nicht zufällig irgendwo hinbewegen, sondern immer nur diagonal sich bewegen.
ich hab es mit random() versucht, aber es klappt nicht, wäre nett , wenn mir jmd mal ein Tipp geben würde oder eine andere Denkweise vielleicht.

Hier ist der Quelltext:

Code:
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>


using namespace std;

struct Bewohner
{
string figur;
int zaehler;
bool bewegt;    
};


int const MAX_LAENGE=8;


int move(int pos, int pos2)
{
    unsigned srand(time(NULL));
    int i = rand()%4;
    
    if(i==0)
    {
       if(pos!=(MAX_LAENGE-1))
       {
       pos=pos+1;
       return pos;
       }
       else
       {
       pos=0;
       return pos;
       }
    }
    
    if(i==1)
    {
       if(pos!=0)
       {
       pos=pos-1;
       return pos;
       }
       else
       {
       pos=(MAX_LAENGE-1);
       return pos;
       }
    }
    
    if(i==2)
    {
       if(pos2!=(MAX_LAENGE-1))
       {
       pos2=pos2+1;
       return pos;
       }
       else
       {
       pos2=0;
       return pos2;
       }
    }
    
    if(i==3)
    {
       if(pos2!=0)
       {
       pos2=pos2-1;
       return pos2;
       }
       else
       {
       pos2=(MAX_LAENGE-1);
       return pos2;
       }
    }
      
}      




int main(int argc, char *argv[])
{
    
    Bewohner fisch;
    fisch.figur = "o)=(";
    fisch.zaehler = 6;
    fisch.bewegt=false;
    
    Bewohner hai;
    hai.figur = "o##(";
    hai.zaehler = 8;
    hai.bewegt=false;
    
    Bewohner wasser;
    wasser.figur ="~~~~";

    
    
    Bewohner feld[MAX_LAENGE][MAX_LAENGE];
  
    for (int i=0; i<MAX_LAENGE;i++)
      for (int j=0; j<MAX_LAENGE; j++)
        feld[i][j] = wasser;
      
  
// der Planet erhält einen Fisch und einen Hai  
   feld[2][4] =  fisch;
   feld[MAX_LAENGE-1][MAX_LAENGE-1] =  hai;
  
nochmal:;
if(cin.get())
{
  system("CLS");
  for(;;)//  endlosschleife
  {            
    // hier kommt die Ausgabe...    
    cout << "\n";
    cout << "\n"<<"--------------------Matrix Fisch-------------------"<<"\n";    
    
    
    for (int i=0; i<MAX_LAENGE;i++)
    {
      cout <<"\n";  
      for (int j=0; j<MAX_LAENGE; j++)
      {
          cout << feld[i][j].figur;
      }
    }
  
    //  Ende Ausgabe
    
    //    Fische  bewegen sich....
   for (int i=0; i<MAX_LAENGE;i++)
    {
      for (int j=0; j<MAX_LAENGE; j++)
      {
        if ((feld[i][j].figur == "o)=(")&&(feld[i][j].bewegt==false))
        {
            int neu_pos = move(i,j);
  
  
             feld[neu_pos][neu_pos]=fisch;
             feld[i][j]=wasser;
             fisch.bewegt=true;
        }//end if                  
      }//end for
    }//end for
    cout << "\n";
    cout << "\n"<<"---------------------------------------------------"<<"\n";
    
       for (int i=0; i<MAX_LAENGE;i++)
    {
      for (int j=0; j<MAX_LAENGE; j++)
      {
        if ((feld[i][j].figur == "o##(")&&(feld[i][j].bewegt==false))
        {
             int neu_pos = move(j,i);


             feld[neu_pos][neu_pos]=hai;
             feld[i][j]=wasser;
             hai.bewegt=true;
        }//end if                  
      }//end for
    }//end for    

  
    for (int i=0; i<MAX_LAENGE;i++)
    {
      for (int j=0; j<MAX_LAENGE; j++)
      {
        if ((feld[i][j].figur == "o)=(")||(feld[i][j].figur=="o##("))
        {
             feld[i][j].bewegt=false;
        }
      }
    }
    


   goto nochmal;
  }// end for
}
    system("PAUSE");
    return EXIT_SUCCESS;
}


Bitte helft mir, ich verzweifle

MFG

MIND_FREAK
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.05.2008, 17:48 Uhr
Tommix



Hallo,

Zitat:


C++:
feld[neu_pos][neu_pos]=fisch;




Wenn X und Y immer gleich sind, sind halt nur die Diagonalen belegt.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.05.2008, 18:08 Uhr
~Mind_Freak
Gast


hey tommix, danke für die schnelle antwort,
aber wie kann ich denn das problem beheben?
wäre nett wenn du helfen könntest....

Danke im Voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.05.2008, 08:44 Uhr
Tommix



Hallo,
am übersichtlichsten wäre es vermutlich eine Klasse "Position" einzuführen, alternativ könntest Du in diese Richtung gehen:

C++:
void move(int& row, int& column)
{
// ändere row/column
}


Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.05.2008, 09:14 Uhr
Mind_Freak



Nur leider hab ich noch nichts mit Klassen gemacht, gibt es keine andere möglichkeit?

LG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.05.2008, 15:49 Uhr
Tommix



Ja...

Zitat von Tommix:
Hallo,
... alternativ könntest Du in diese Richtung gehen:

C++:
void move(int& row, int& column)
{
// ändere row/column
}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.05.2008, 18:01 Uhr
öni



Und goto's sind in C++ ganz schlecht dafür solltest du lieber eine Schleif benutzen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.05.2008, 18:36 Uhr
Mind_Freak



Warum sind Schleifen besser?

ich mein goto erfüllt auch sein zweck oder
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
31.05.2008, 19:03 Uhr
Suba Esel



Ja, ist aber auf Dauer völlig unübersichtlich.
Du weißt nicht, wo im Quellcode das label steht, also hast du überhaupt keine Ahnung, wohin er springt.

Ich meine - du benutzt ja auch eine For-Schleife. Das könnte man auch mit goto / label machen... ist bloß unnötig kompliziert und auch völlig unübersichtlich.
--
Simon

Dieser Post wurde am 31.05.2008 um 19:04 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
31.05.2008, 22:59 Uhr
Mind_Freak



Also erstmal danke, aber zurück zu meiner Frage:
Ich hab jt das getan, was tommix wollte mit dem

Code:
void move(int& row, int& column)
{
// ändere row/column
}

aber der Hai und der Fisch, bewegen sich immer noch diagonal?!?
Ich glaub ich hab nen falschen ansatz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: