0

Hello I have a programme where you place tiles and destroy tiles and then after you build something with the tiles you place you can sell them for money. I only want to be able to sell the tiles if at least one of the tiles is a cockpit tile. Here is what I have so far:

for(int i = 0; i < play.b.toArray().length;i++){
 if(play.b.get(i).id == 1 ){
 cansell= true;
 }else{
 cansell= false;
 } 
}

b is an array of blocks:
public static ArrayList b = new arrayList(); the id 1 is the cockpit tile. Here is the cockpit tile for reference:

public class cockpit extends block{
 public cockpit(int x,int y,int rot){
 this.x = x;
 this.y = y;
 this.rotate = rot;
 r = new Rectangle(x - (int)play.camx,y - (int)play.camy,20,20);
 id = 3;
 }
 public void tick(){
 createCollisionRect();
 if(Comp.mr && r.contains(new Point((Comp.mx ) ,(Comp.my) ))){
 remove = true;
 }
 if(remove){
 //play.gui.money +=800;
 }
 }
 public void render(Graphics g){
 Graphics2D g2 = (Graphics2D) g;
 if (rotate == 0) {
 ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
 img = i62.getImage();
 g.drawImage(img, x - (int) play.camx, y - (int) play.camy,20,20, null);
 }
 if (rotate == 1) {
 AffineTransform at = AffineTransform.getTranslateInstance(x, y);
 at.rotate(Math.toRadians(90),10,10);
 ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
 img = i62.getImage();
 g2.drawImage(img,at, null);
 }
 if (rotate == 2) {
 AffineTransform at = AffineTransform.getTranslateInstance(x, y);
 at.rotate(Math.toRadians(180),10,10);
 ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
 img = i62.getImage();
 g2.drawImage(img, at, null);
 }
 if (rotate == 3) {
 AffineTransform at = AffineTransform.getTranslateInstance(x, y);
 at.rotate(Math.toRadians(-90),10,10);
 ImageIcon i62 = new ImageIcon("res/tiles/cockpit.png");
 img = i62.getImage();
 g2.drawImage(img, at, null);
 }
 }
}

here is the play class(its big):

public class play extends screen {

public Image img, img1;
public static Rectangle r = new Rectangle(0, 200, 1000, 50);
private Image i;
public int turn = 1;
public static player p;
public static gui gui;
public static entitiesManager em;
public static sell s;
public static int camx, camy;
public static ArrayList<block> b = new ArrayList<block>();
public static int selectedRot = 0;
public static int selectedID = 0;
public static int maxSelectedID = 13;
public static int bx, by, w, h;
public static int dragX, dragY, drawWitdh, drawHeight, curX, curY;
public static boolean canPlaceATile = true;
public static boolean loadSave1;
public static boolean loadSave2;
public static boolean loadSave3;
public static boolean dragging;
public boolean hasloaded = false;
public static boolean canplace = true;
public static boolean testingMode = false;
// bankruptcy
public static boolean bankrupt = false;
public static int pos = -200;
public static int time = 0;
public static int timer = 0;
public play(manager m) {
 super(m);
 b.clear();
 hasloaded = false;
 p = new player(Comp.size.width / 2 - 10, Comp.size.height / 2 - 10);
 gui = new gui(Comp.size.width / 2 - 10, 20);
 em = new entitiesManager();
 s = new sell(Comp.size.width / 2 + 50, 20);
 if (b.toArray().length <= 0) {
 play.b.add(new invisible(-1000, -1000, play.selectedRot));
 }
 pos = -400;
}
public void tick() {
 if (hasloaded == false) {
 if (loadSave1) {
 load.loadship1();
 load.loadMoney1();
 }
 if (loadSave2) {
 load.loadship1();
 load.loadMoney1();
 play.gui.money = 10000;
 play.gui.s.HJSshares = 0;
 play.gui.s.MSshares = 0;
 play.gui.s.KSshares = 0;
 play.gui.s.MScost = 100;
 play.gui.s.KScost = 1000;
 play.gui.s.HJScost = 10000;
 play.gui.day = 30;
 play.gui.dividend = 0;
 play.bankrupt = false;
 play.b.clear();
 play.b.add(new invisible(-1000, -1000, play.selectedRot));
 play.selectedID = 1;
 play.selectedRot = 0;
 save.saveMoney1();
 save.saveShip();
 }
 hasloaded = true;
 }
 handleinput();
 s.tick();
 p.tick();
 gui.tick();
 em.tick();
 for (int i = 0; i < b.toArray().length; i++) {
 b.get(i).tick();
 if (b.get(i).remove && !play.testingMode) {
 b.remove(i);
 i--;
 }
 }
 if (selectedRot >= 4) {
 selectedRot = 0;
 }
 if (selectedID > maxSelectedID) {
 selectedID = 0;
 } else if (selectedID < 0) {
 selectedID = maxSelectedID;
 }
 // System.out.println(""+b.toArray().length);
 if (b.toArray().length <= 0) {
 play.b.add(new invisible(-1000, -1000, play.selectedRot));
 }
 if (pos >= -30) {
 pos = -30;
 time = 0;
 }
 if(bankrupt){
 if(time >= timer && pos<= -31){
 pos++;
 time = 0;
 }else {
 time++;
 }
 }
}
public void handleinput() {
 if (Keys.isPressed(Keys.z)) {
 selectedRot++;
 }
 if (Keys.isPressed(Keys.s)) {
 save.saveShip();
 save.saveMoney1();
 }
 if (Keys.isPressed(Keys.ESCAPE)) {
 m.setScreen(manager.menu);
 play.selectedID = 0;
 play.selectedRot = 0;
 }
}
public void render(Graphics g) {
 Graphics2D g2 = (Graphics2D) g;
 RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
 g2.setRenderingHints(rh);
 ImageIcon i622 = new ImageIcon("res/bg/universFIN.png");
 img = i622.getImage();
 g.drawImage(img, 0, 0, null);
 p.render(g);
 em.render(g);
 for (int i = 0; i < b.toArray().length; i++) {
 b.get(i).render(g);
 }
 gui.render(g);
 s.render(g);
 bx = Math.min((dragX / 20) * 20, (curX / 20) * 20);
 by = Math.min((dragY / 20) * 20, (curY / 20) * 20);
 w = Math.abs((curX / 20) * 20 - (dragX / 20) * 20);
 h = Math.abs((curY / 20) * 20 - (dragY / 20) * 20);
 if (dragging && w >= 20 && h >= 20 && Comp.ml) {
 g.setColor(new Color(26, 216, 26, 128));
 g.fillRect(bx, by, w, h);
 g.setColor(new Color(17, 142, 17, 255));
 g.drawRect(bx, by, w, h);
 }
 if (dragging && w >= 20 && h >= 20 && Comp.mr) {
 g.setColor(new Color(216, 26, 26, 128));
 g.fillRect(bx, by, w, h);
 g.setColor(new Color(142, 17, 17, 255));
 g.drawRect(bx, by, w, h);
 }
 if (bankrupt) {
 ImageIcon i6221 = new ImageIcon("res/bg/bankrupt.png");
 img = i6221.getImage();
 g.drawImage(img, 0, pos, null);
 }
}
public void init() {
}

}

asked Apr 18, 2015 at 10:58
1

3 Answers 3

1

If you are using plain array, the only way to find object inside is to iterate thru the array and compare desired value like you did, or using equals(). If you are looking for more effective way check classes like HashSet and other collections.

answered Apr 18, 2015 at 11:04
0
1

It looks like you are storing the Blocks in a list, in that case the idiomatic way would be to use the Stream API.

public boolean containsCockpit(List<Block> blocks) {
 return blocks.stream().anyMatch(x -> x.id == 1);
}

This also works for Block arrays:

public boolean containsCockpit(Block[] blocks) {
 return Arrays.stream(blocks).anyMatch(x -> x.id == 1);
}

If you are using Java 7 or older, you will have to iterate the Blocks:

public boolean containsCockpit(Block[] blocks) {
 for(Block b : blocks)
 if(b.id == 1)
 return true;
 return false;
}
answered Apr 18, 2015 at 11:12
-1

Try

Arrays.binarySearch(intArr,searchVal);

where intArr is the name of the array and searchVal is the value you want to search

answered Apr 18, 2015 at 11:01
5
  • 2
    This will not work in this case, binary search works only on sorted collections. Commented Apr 18, 2015 at 11:06
  • so what would I put in for value? Commented Apr 18, 2015 at 11:12
  • is this wright Arrays.binarySearch(play.b,play.b.get(i).id) Commented Apr 18, 2015 at 11:12
  • why are you try Arrays.stream(stringArray).forEach ............ where stringArray is array derived from b Commented Apr 18, 2015 at 11:22
  • stackoverflow.com/questions/29715645/… should also assist you Commented Apr 18, 2015 at 11:26

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.