This site requires JavaScript, please enable it in your browser!
Greenfoot back
Blackdow97
Blackdow97 wrote ...

2014/12/18

Boolean Question!

1
2
Super_Hippo Super_Hippo

2014/12/19

#
Ich glaube nicht, dass das so funktionieren wird. "willig" wird nur auf true gesetzt, wenn "t_willig" auf 1000 steigt. Allerdings wird diese Stelle des Codes nicht erreicht, da Zeile 4 die Methode verlässt, wenn sie nicht willig ist. Außerdem überprüfst du nur, ob eine Ratte da ist (Zeile 6), nicht ob diese auch weiblich ist. Für den Zufallsfaktor schaust du dir am besten mal die Methode Greenfoot.getRandomNumber(int x) an, die eine Zufallszahl zwischen 0 und x-1 zurückgibt. Wenn dir die Methode zu viel Zeitaufwand ist, wie mir jedes mal, füge einfach die folgende Methode hinzu und du kannst die Zufallszahl einfach mit r(zahl) erzeugen:
private int r(int s)
{
    return Greenfoot.getRandomNumber(s);
}
Falls dich das noch nicht weiterbringt, noch folgende Zeile (sonst einfach beim Lesen überspringen^^) ---> Erzeuge eine Zufallszahl und überprüfe mittels eines if-Statements, welches Geschlecht erzeugt werden soll. Was ich dir sonst noch raten würde ist, das Geschlecht der Ratten als Variable zu speichern und sie nicht als eigene Klasse zu definieren. Vielleicht möchtest du später die (noch unfruchtbaren) Kinder einzeln haben, da diese noch keine Nachkommen zeugen können und vielleicht ein kleineres Bildes haben sollen.
Blackdow97 Blackdow97

2014/12/19

#
Solve the problem by this:
    public void sex()
    {
       if(infiziert) return;
       if(!willig) return;
       int x = getX(), y = getY();
       Actor ratte = getOneIntersectingObject(mRatte.class);
       Ratte1 = new mRatte();
       Ratte2 = new wRatte();
       if(ratte != null)
       {
           willig = false;
           if(Greenfoot.getRandomNumber(11)<5)
            getWorld().addObject(Ratte1,x,y);
           else
            getWorld().addObject(Ratte2,x,y);
        }

    }
    public void willig()
    { 
       t_willig++; 
       if (t_willig==1000) 
       {
           willig = true;
           t_willig=0;
       }
    }
Super_Hippo Super_Hippo

2014/12/19

#
Wieso kann eine infizierte Ratte eigentlich keine Nachkommen bekommen? Könnte sie nicht die Infektion weitergeben? Falls du möchtest, dass nach der Nachkommenszeugung 1000 act Zyklen gewartet werden müssen, bevor weitere Nachkommen gezeugt werden können, solltest du ein "if (!willig)" vor Zeile 21 machen, ansonsten wird t_willig schon erhöht, bevor der Sex stattfindet, sodass es möglicherweise gerade 999 ist, während der Sex stattfindet und sie machen es gleich zweimal hintereinander. ;)
Blackdow97 Blackdow97

2014/12/19

#
Das mit der infizierten Ratte ist so geregelt, ich versuche möglichst genau ein Szenario zur Pest im Mittelalter zu erstellen, und ich denke nicht das infizierte Menschen oder Tiere noch Kinder bekommen konntnen. Mal was neues: After my Rats works perfectly, I worked on the Mensch.class. This class looks very simliar to the Rat.class with the difference, Mensch get infected when get touched by infected Rat.class! I tried this Code:
  protected boolean minfiziert = false;
  protected int t_minfiziert=0;
  public void act() 
  {
    beißen();
    interactr();

  } 
  public void beißen()
  {
    if (isTouching(wRatte.class))
    {
        setImage("person.png");
        minfiziert = true;
        removeTouching(wRatte.class);
    }
        if (isTouching(mRatte.class))
    {
        setImage("person.png");
        minfiziert = true;
        removeTouching(mRatte.class);
    }
  }
  public void interactr()
  {
    if(!minfiziert) return;
    if(!rinfiziert) return;
     if(minfiziert)
     {
         t_minfiziert++;
         if (t_minfiziert==600)
         {
          t_minfiziert=0;
          getWorld().removeObject(this);
        }
    }
  }
For Mensch.class and this code:
   protected boolean rinfiziert = false;
   protected int t_rinfiziert=0;
   public void act()
   {} 
   public void essen()
   {
    if (isTouching(Pmikrobe.class))
    {
        setImage("Ratte.png");
        rinfiziert = true;
        removeTouching(Pmikrobe.class);
    }
   }
      public void interactm()
   {
    if(!rinfiziert) return; 
    Actor mensch = getOneIntersectingObject(Mensch.class);
    if(mensch != null)
    {
        mensch.setImage("person.png");
        getWorld().removeObject(this);
    }
    else
        {
            t_rinfiziert++;
            if (t_rinfiziert==600)
            {
            t_rinfiziert=0;    
            getWorld().removeObject(this);
            }
        }
   }
Well, I think my problem is obvious, I don't know who i can check if Rat is infected or no....Pls no Code i only want tips :)
Super_Hippo Super_Hippo

2014/12/19

#
Wenn eine infizierte Ratte einen Menschen berührt, wechselt dieser Mensch das Bild. Der Code ist in der Klasse der Ratte. (Zeile 58) So wie das Bild des Menschen geändert wird, kannst du auch eine Variable des Menschen ändern und ihm damit sagen, dass er infiziert sein soll. Momentan versuchst du im Code der Ratte, diese zu entfernen, wenn sie einen Menschen berührt. Außerdem sagst du dem Menschen, dass er eine Ratte entfernen soll, wenn er sie berührt. Das ist doppelt, einmal reicht! Hier zeigt sich weiterhin, dass es klug wäre, das Geschlecht als Variable zu speichern, dann müsstest du z.B. nicht beide prüfen. Der Code wird sich vermutlich ohnehin sehr ähneln.
Blackdow97 Blackdow97

2014/12/20

#
Hey, I followed all of you Tips, but i don't now how i can set this:
  protected boolean minfiziert = false;
into true, from the other Class :( I tried something like this:
      public void interactm()
   {
    if(!rinfiziert) return; 
    Actor mensch = getOneIntersectingObject(Mensch.class);
    if(mensch != null)
    {
        mensch.setImage("person.png");
        getWorld().removeObject(this);
        mensch.minfiziert=true;
    }
Which doesn't worked :(
danpost danpost

2014/12/20

#
You could either change the access to 'public' on the field that you want to set in the other class or add a public setter method in the class with the field that the other class can call to set the value of the field.
Super_Hippo Super_Hippo

2014/12/20

#
"protected" gewährt zusätzlich zu "private" (nur eigene Klasse) allen davon "abstammenden" Klassen Zugriff. Die anderen können nur direkt darauf zugreifen, wenn es "public" ist. (Nein, du solltest nicht die Ratte vom Menschen abstammen lassen.) ;)
Blackdow97 Blackdow97

2014/12/20

#
Thanks for the help, now i setted:
  public boolean minfiziert = false;
  public int t_minfiziert=0; 
In my Mensch.class And this:
      public void interactm()
   {
    if(!rinfiziert) return; 
    Actor mensch = getOneIntersectingObject(Mensch.class);
    if(mensch != null)
    {
        mensch.setImage("person.png");
        getWorld().removeObject(this);
        mensch.minfiziert=true;
    }
    else
        {
            t_rinfiziert++;
            if (t_rinfiziert==600)
            {
            t_rinfiziert=0;    
            getWorld().removeObject(this);
            }
        }
But i Got this Error: Cannot find symbol - variable minfiziert... I know the mistake is in the Rat.class in Line 9 but i don't know how to fix it :(
Super_Hippo Super_Hippo

2014/12/20

#
Ändere Zeile 4 in:
Mensch mensch = (Mensch) getOneIntersectingObject(Mensch.class);
Bisher ist die Variable mensch nur als Objekt der Klasse Actor gespeichert und in Actor gibt es keine Variable, die minfiziert heißt. Deshalb musst du mensch als Mensch speichern und kannst dann Variablen und Methoden nutzen, die du in der Mensch Klasse hast.
Blackdow97 Blackdow97

2014/12/20

#
         public void interactm()
   {
    if(!rinfiziert) return; 
    wMensch wmensch = (wMensch) getOneIntersectingObject(wMensch.class);
    mMensch mmensch = (mMensch) getOneIntersectingObject(mMensch.class);
    Mensch mensch = (Mensch) getOneIntersectingObject(Mensch.class);

    if(wmensch != null)
    {
        wmensch.setImage("person.png");
        getWorld().removeObject(this);
        mensch.minfiziert=true;
    }
    if(mmensch != null)
    {
        mmensch.setImage("person.png");
        getWorld().removeObject(this);
        mensch.minfiziert=true;
    }
        
 
    else
        {
            t_rinfiziert++;
            if (t_rinfiziert==600)
            {
            t_rinfiziert=0;    
            getWorld().removeObject(this);
            }
        }
   }
    }
Got the mistake NullPointerException and don't know who i can fix that :(
Super_Hippo Super_Hippo

2014/12/20

#
Ergänze ein "else" in Zeile 14. Außerdem "mensch" in Zeile 12 durch "wmensch" ersetzen und "mensch" in Zeile 18 durch "mmensch".
You need to login to post a reply.
1
2