Estou desenvolvendo um programa POO em java que consiste em uma matriz com uns veiculos se movendo para lados aleatoriamente.
Minha duvida é , como mover o objeto na matriz de uma forma aleatória e como fazer para eles nao se moverem pra mesma posição ao invés de irem para o mesmo lado juntos.
Sim mas assim , to com dificuldade na funçao mover mesmo , sei que posso utilizar o eixo x por exemplo pra ir pra direita ou esquerda subtraindo ou somando uma posição,mesma coisa com o y pra ir pra cima ou pra baixo.
Só que to travando na montagem da função
S
staroski
Se postar o código que já escreveu, fica muito mais fácil te orientar.
I
itajun
Que tal assim?
/** * @author itamar */publicclassCarsGame{publicstaticfinalintCYCLES=100;publicstaticfinalintCOLS=40;publicstaticfinalintROWS=20;privateSet<Car>cars;privateRandomrandomiser;privatevoiddoIt()throwsInterruptedException{printBoard("INITIAL STATE");for(inti=0;i<CYCLES;i++){cars.forEach(e->e.move(Direction.values()[randomiser.nextInt(4)],this::isEmptyPosition));printBoard(String.format("Cycle %d",i));Thread.sleep(500);}}privatebooleanisEmptyPosition(Positionposition){if(position.getX()<0||position.getY()<0){returnfalse;}if(position.getY()>=ROWS||position.getX()>=COLS){returnfalse;}return!cars.stream().anyMatch(e->e.getPosition().equals(position));}privatevoidprintBoard(Stringheader){System.out.println();System.out.println(header);Stringbar=String.format("%1$"+(COLS+2)+"s","").replace(' ','-');System.out.println(bar);for(introw=0;row<ROWS;row++){intfinalRow=row;Map<Integer,String>carsInRow=cars.stream()// Column is key and id is value.filter(e->e.getPosition().getX()==finalRow).collect(Collectors.toMap(e->e.getPosition().getY(),e->Integer.toString(e.getId())));if(carsInRow.isEmpty()){// If there are no cars, just print blank spaces and continueSystem.out.println(String.format("|%1$"+COLS+"s|",""));continue;}// Else we have to print the car idsSystem.out.print("|");for(intcol=0;col<COLS;col++){System.out.print(carsInRow.getOrDefault(col," "));}System.out.println("|");}System.out.println(bar);System.out.println();}privateCarsGame(){cars=IntStream.range(0,5).mapToObj(e->newCar(e,newPosition(0,e))).collect(Collectors.toSet());randomiser=newRandom();}classCar{privatefinalintid;privatePositionposition;publicCar(intid,Positionposition){this.position=position;this.id=id;}publicbooleanmove(Directiondirection,Function<Position,Boolean>constraints){PositionnewPosition=position.movingTo(direction,1);// 1 by 1 for now to keep it simpleif(constraints.apply(newPosition)){position=newPosition;returntrue;}returnfalse;}publicintgetId(){returnid;}publicPositiongetPosition(){returnposition;}}classPosition{privateintx;privateinty;publicPosition(intx,inty){this.x=x;this.y=y;}publicintgetX(){returnx;}publicintgetY(){returny;}publicPositionmovingTo(Directiondirection,intby){if(EnumSet.of(Direction.UP,Direction.LEFT).contains(direction)){by*=-1;// For left or up, we're decreasing the value}if(EnumSet.of(Direction.UP,Direction.DOWN).contains(direction)){returnnewPosition(x,y+by);}returnnewPosition(x+by,y);}@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(!(oinstanceofPosition))returnfalse;Positionposition=(Position)o;if(x!=position.x)returnfalse;returny==position.y;}}enumDirection{UP,RIGHT,DOWN,LEFT}publicstaticvoidmain(String...args)throwsInterruptedException{newCarsGame().doIt();}}
C
Caioww99
Aqui está meu codigo,preciso mover os carros em uma posição aleatória que é o numero 3 que são armazenados no arraylist…
importjava.util.ArrayList;importjava.util.Random;publicclassMain{//Declaração Global dos ArrayLists para poder armazenar a quantidade// de cada veiculopublicstaticArrayList<Carro>c=newArrayList<>();publicstaticvoidmain(String[]args){int[][]matrix=newint[30][60];for(intx=0;x<matrix.length;x++){for(inti=0;i<matrix[x].length;i++){if((x==0)||(x==(matrix.length)-1))matrix[x][i]=1;elseif((i==0)||(i==(matrix[x].length)-1))matrix[x][i]=1;elsematrix[x][i]=0;}}for(intx=0;x<matrix.length;x++){for(inti=0;i<matrix[x].length;i++){if(matrix[x][i]==0){for(intn=5;n<12;n++){for(intm=3;m<=5;m++){matrix[m][n]=2;}}for(intn=5;n<12;n++){for(intm=24;m<=26;m++){matrix[m][n]=2;}}for(intn=48;n<55;n++){for(intm=3;m<=5;m++){matrix[m][n]=2;}}for(intn=48;n<55;n++){for(intm=24;m<=26;m++){matrix[m][n]=2;}}for(intn=23;n<33;n++){for(intm=13;m<=15;m++){matrix[m][n]=2;}}}System.out.print(matrix[x][i]);}System.out.println();}//Instanciando objetos para usar as funçoes//Utilizando as funções com objetosCarrocarros=newCarro();for(inti=0;i<10;i++){carros.gerarCarro(matrix);c.add(newCarro());}//Código para printar a matriz após cada veiculo adicionadofor(intx=0;x<matrix.length;x++){for(inti=0;i<matrix[x].length;i++){System.out.print(matrix[x][i]);}System.out.println();}}
}
Aqui está a classe Carro:
importjava.util.Random;importjava.util.ArrayList;publicclassCarro{//Método para gerar um Carro em um lugar aleatório da matrizpublicvoidgerarCarro(intmatrix[][]){Randomr=newRandom();inta=r.nextInt(29);intb=r.nextInt(59);if(matrix[a][b]==0&&matrix[a][b]!=2&&matrix[a][b]!=1&&matrix[a][b]!=4&&matrix[a][b]!=5){matrix[a][b]=3;}}