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

2018/4/12

getRandomNumber and <<Image>>.equals<<Image)\>>

Lavenger Lavenger

2018/4/12

#
I am trying to generate 3 different images with random generator from a pool of 5 images but it still seems to be able to generate the same image between the 3 Images set for a SimpleActor... within those 3 images, I wish to generate another image that's based on what the 3 images may be... Example plan: add 3 SimpleActors with Images (<A>, <D>, <B>) that's randomly picked from a pool of 5 images (<A>, <B>, <C>, <D>, <E>) add 1 SimpleActor with an Image (<D>) that's randomly picked from one of the 3 actors with Images (<A>, <D>, <B>) This is my code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import greenfoot.*;
public class Minigame3 extends World
{
    public String ShadowPoseImages[] = {"UmarunShadowPose1.png", "UmarunShadowPose2.png", "UmarunShadowPose3.png", "UmarunShadowPose4.png", "UmarunShadowPose5.png"};
    public Actor ShadowPose1 = new SimpleActor(), ShadowPose2 = new SimpleActor(), ShadowPose3 = new SimpleActor(), PoseChoice = new SimpleActor(), ShadowPoseChoice = new SimpleActor();
     
    public Minigame3()
    {   
        super(600, 400, 1);
        setBackground(new GreenfootImage("bricks2.jpg"));
        addObject(ShadowPose1, 120, 133);
        addObject(ShadowPose2, 300, 133);
        addObject(ShadowPose3, 480, 133);
        addObject(PoseChoice, 300, 266);
        getShadowPoses();
        getPoseChoice();
    }
    public void getShadowPoses()
    {
        switch(Greenfoot.getRandomNumber(5))
        {
             
            case 0: ShadowPose1.setImage("UmarunShadowPose1.png"); ShadowPose1.getImage().scale(100,100); break;
            case 1: ShadowPose1.setImage("UmarunShadowPose2.png"); ShadowPose1.getImage().scale(100,100); break;
            case 2: ShadowPose1.setImage("UmarunShadowPose3.png"); ShadowPose1.getImage().scale(100,100); break;
            case 3: ShadowPose1.setImage("UmarunShadowPose4.png"); ShadowPose1.getImage().scale(100,100); break;
            case 4: ShadowPose1.setImage("UmarunShadowPose5.png"); ShadowPose1.getImage().scale(100,100); break;
        }
        ShadowPose2.setImage(ShadowPoseImages[Greenfoot.getRandomNumber(5)]);
        do
        {
            switch(Greenfoot.getRandomNumber(5))
            {
                case 0: ShadowPose2.setImage("UmarunShadowPose1.png"); ShadowPose2.getImage().scale(100,100); break;
                case 1: ShadowPose2.setImage("UmarunShadowPose2.png"); ShadowPose2.getImage().scale(100,100); break;
                case 2: ShadowPose2.setImage("UmarunShadowPose3.png"); ShadowPose2.getImage().scale(100,100); break;
                case 3: ShadowPose2.setImage("UmarunShadowPose4.png"); ShadowPose2.getImage().scale(100,100); break;
                case 4: ShadowPose2.setImage("UmarunShadowPose5.png"); ShadowPose2.getImage().scale(100,100); break;
            }
        }
        while(ShadowPose2.getImage().equals(ShadowPose1.getImage()));
        ShadowPose3.setImage(ShadowPoseImages[Greenfoot.getRandomNumber(5)]);
        do
        {
            switch(Greenfoot.getRandomNumber(5))
            {
                case 0: ShadowPose3.setImage("UmarunShadowPose1.png"); ShadowPose3.getImage().scale(100,100); break;
                case 1: ShadowPose3.setImage("UmarunShadowPose2.png"); ShadowPose3.getImage().scale(100,100); break;
                case 2: ShadowPose3.setImage("UmarunShadowPose3.png"); ShadowPose3.getImage().scale(100,100); break;
                case 3: ShadowPose3.setImage("UmarunShadowPose4.png"); ShadowPose3.getImage().scale(100,100); break;
                case 4: ShadowPose3.setImage("UmarunShadowPose5.png"); ShadowPose3.getImage().scale(100,100); break;
            }
        }
        while(ShadowPose3.getImage().equals(ShadowPose1.getImage()) || ShadowPose3.getImage().equals(ShadowPose2.getImage()));
    }
    public void getPoseChoice()
    {
        switch(Greenfoot.getRandomNumber(3))
        {
            case 0: ShadowPoseChoice.setImage(ShadowPose1.getImage()); break;
            case 1: ShadowPoseChoice.setImage(ShadowPose2.getImage()); break;
            case 2: ShadowPoseChoice.setImage(ShadowPose3.getImage()); break;
        }
        switch(Greenfoot.getRandomNumber(5))
        {
            case 0: if (ShadowPoseChoice.getImage().equals(new GreenfootImage("UmarunShadowPose1.png"))) {PoseChoice.setImage("UmarunPose1.png"); PoseChoice.getImage().scale(100,100); break;}
            case 1: if (ShadowPoseChoice.getImage().equals(new GreenfootImage("UmarunShadowPose2.png"))) {PoseChoice.setImage("UmarunPose2.png"); PoseChoice.getImage().scale(100,100); break;}
            case 2: if (ShadowPoseChoice.getImage().equals(new GreenfootImage("UmarunShadowPose3.png"))) {PoseChoice.setImage("UmarunPose3.png"); PoseChoice.getImage().scale(100,100); break;}
            case 3: if (ShadowPoseChoice.getImage().equals(new GreenfootImage("UmarunShadowPose4.png"))) {PoseChoice.setImage("UmarunPose4.png"); PoseChoice.getImage().scale(100,100); break;}
            case 4: if (ShadowPoseChoice.getImage().equals(new GreenfootImage("UmarunShadowPose5.png"))) {PoseChoice.setImage("UmarunPose5.png"); PoseChoice.getImage().scale(100,100); break;}
        }
    }
    public void act()
    {
        if(Greenfoot.mouseClicked(ShadowPose1) && (ShadowPoseChoice.equals(ShadowPose1))){removeObjects(getObjects(Actor.class));}
        if(Greenfoot.mouseClicked(ShadowPose2) && (ShadowPoseChoice.equals(ShadowPose2))){removeObjects(getObjects(Actor.class));}
        if(Greenfoot.mouseClicked(ShadowPose3) && (ShadowPoseChoice.equals(ShadowPose3))){removeObjects(getObjects(Actor.class));}
        if(Greenfoot.mouseClicked(ShadowPose1) && (!ShadowPoseChoice.equals(ShadowPose1))){removeObjects(getObjects(Actor.class));}
        if(Greenfoot.mouseClicked(ShadowPose2) && (!ShadowPoseChoice.equals(ShadowPose2))){removeObjects(getObjects(Actor.class));}
        if(Greenfoot.mouseClicked(ShadowPose3) && (!ShadowPoseChoice.equals(ShadowPose3))){removeObjects(getObjects(Actor.class));}
    }
}
What am I doing wrong here?
danpost danpost

2018/4/12

#
You are making much it more difficult than it needs to be. To start, you need a list of the 5 images and an empty list. Each randomly picked image can be removed from one list an added to the other. The new list of 3 images can now be used to set the images of the 3 actors and 1 image can be randomly chosen from those 3 to set to the final actor. Since 2 actors will have the actual same image, you can compare their images with '=='.
Lavenger Lavenger

2018/4/13

#
danpost wrote...
Each randomly picked image can be removed from one list an added to the other.
how is that done? I don't quite see how to do it from the API documentation... I see get(int index), add(int index, E element), remove(int index) but I seen to have trouble implementing them, can you give me examples on how to use them? PS: also, what exactly is an E? I've tried reading up on it but i still don't understand it...
danpost danpost

2018/4/13

#
E is just the type of element the list is declared to hold.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// with import
import java.util.ArrayList;
 
// fields
private Actor clone = new SimpleActor(); // the actor to be with a duplicate image;
 
// in constructor
ArrayList<GreenfootImage> pickList = new ArrayList<GreenfootImage>(); // for all 5 images
for (int i=0; i<5; i++) // loop to load images into array
{
    pickList.add(new GreenfootImage("UmarunShadowPose"+(i+1)+".png");
}
ArrayList<GreenfootImage> imageList = new ArrayList<GreenfootImage>(); // for 3 picked images
for (int i=0; i<3; i++) // loop to assign 3 different random images to 3 new actors
{
    imageList.add(pickList.remove(Greenfoot.getRandomNumber(pickList.size()))); // transfer one random image between lists
    Actor actor = new SimpleActor();
    actor.setImage(imageList.get(i));
    addObject(actor, 120+180*i, 133);
}
clone.setImage(imageList.get(Greenfoot.getRandomNumber(imageList.size())));
addObject(clone, 300, 266);
 
// in act (to check if images are same)
if (Greenfoot.mouseClicked(null))
{
    Actor mouseActor = Greenfoot.getMouseInfo().getActor();
    if (mouseActor != null && mouseActor.getImage() == clone.getImage()) removeObjects(getObjects(Actor.class));
}
No switch statements; no do loops; only 1 simple field; and only 2 if statements.
You need to login to post a reply.