2016-09-24 13 views
0

퍼즐 게임을 만들고 있는데 이제는 8 조각을 무작위로 3x3 눈금에 배치하고 있지만 모든 이미지가 HashMap에 추가되지는 않습니다. 왜 그 사람이 보이나요? 8 점 나열됨에 따라개체가 HashMap에 추가되지 않았습니다.

Loading new Image at java.awt.Point[x=2,y=1] 
Loading new Image at java.awt.Point[x=3,y=1] 
Loading new Image at java.awt.Point[x=1,y=2] 
Loading new Image at java.awt.Point[x=2,y=2] 
Loading new Image at java.awt.Point[x=3,y=2] 
Loading new Image at java.awt.Point[x=1,y=3] 
Loading new Image at java.awt.Point[x=2,y=3] 
Loading new Image at java.awt.Point[x=3,y=3] 
1 

내가 왜 표시되지 않습니다 : 여기에

내가 퍼즐을 준비하는 데 사용하는 코드입니다 :

private HashMap<BufferedImage, Point> puzzle = new HashMap<>(); 
public void arrangePieces() { 
    Random random = new Random(); 
    List<BufferedImage> rImages = new ArrayList<>(); 
    rImages.addAll(Arrays.asList(
         Assets.a2, Assets.a3, 
      Assets.a4, Assets.a5, Assets.a6, 
      Assets.a7, Assets.a8, Assets.a9 
    )); 

    for(int y = 1; y <= 3; y++) { 
     for(int x = 1; x <= 3; x++) { 
      if(y != 1 || x != 1) { 
       BufferedImage image = rImages.get(random.nextInt(rImages.size())); 
       puzzle.put(image, new Point(x, y)); 
       System.out.println("Loading new Image at " + new Point(x, y)); 
       rImages.remove(image); 
      } 
     } 
    } 
    System.out.println(puzzle.size()); 
} 

이이로드 될 때 어떤 콘솔 인쇄입니다 puzzle.size()은 임의의 BufferedImage가있는 puzzle에 8 포인트가 추가되어 8을 반환하지 않습니다. 그러면 동일한 이미지가 두 번 선택되지 않습니다.

편집 :이 문제를 해결했습니다. 애셋을 잘못로드했습니다. 시간을 낭비해서 죄송합니다. 난이 실행할 때

+1

은 우리에게'자산의 구현을보기 '. 'a2'와'a9'는 어떻게 만들어지며'hashCode()'와'equals()'에 따라 다릅니 까? – Andreas

+0

'rImages.remove (image);'뒤에'System.out.println (puzzle.size());'를 넣어 결과가 무엇인지 알려주시겠습니까? – saman

+0

@ saman 그것은'1'을 8 번 인쇄합니다. – TheGamerPlayz

답변

0
import java.awt.Point; 
import java.awt.image.BufferedImage; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Random; 

public class Snippet { 
    public static void main(String[] args) { 
     arrangePieces(); 
    } 
    private static HashMap<BufferedImage, Point> puzzle = new HashMap<>(); 
    public static void arrangePieces() { 
     Random random = new Random(); 
     List<BufferedImage> rImages = new ArrayList<>(); 
     rImages.addAll(Arrays.asList(
          Assets.a2, Assets.a3, 
       Assets.a4, Assets.a5, Assets.a6, 
       Assets.a7, Assets.a8, Assets.a9 
     )); 

      System.out.println(rImages.size());// try this and see what you get as response here 
     for(int y = 1; y <= 3; y++) { 
      for(int x = 1; x <= 3; x++) { 
       if(y != 1 || x != 1) { 
        BufferedImage image = rImages.get(random.nextInt(rImages.size())); 
        puzzle.put(image, new Point(x, y)); 
        System.out.println("Loading new Image at " + new Point(x, y)); 
        rImages.remove(image); 
       } 
      } 
     } 
     System.out.println(puzzle.size()); 
    } 

} 
class Assets { 

    public static BufferedImage a8 = new BufferedImage(1,1, 1); 
    public static BufferedImage a7= new BufferedImage(1,1, 1); 
    public static BufferedImage a4= new BufferedImage(1,1, 1); 
    public static BufferedImage a5= new BufferedImage(1,1, 1); 
    public static BufferedImage a9= new BufferedImage(1,1, 1); 
    public static BufferedImage a6= new BufferedImage(1,1, 1);; 
    public static BufferedImage a3= new BufferedImage(1,1, 1); 
    public static BufferedImage a2= new BufferedImage(1,1, 1); 


} 

그래서이있는 java.awt의 새로운 이미지를로드 java.awt.Point의 [X = 2, Y = 1]
의 새로운 이미지를로드 출력

로 이것을 얻을. [x = 1, y = 2]
새로운 이미지의로드 중 java.awt.Point [x = 2, y = 2]
새로운 이미지를 java.awt.Point [x = 3, y = 2]에로드 중
java.awt.Point [x = 1, y = 3]에 새로운 이미지로드 중java.awt.Point의 [X = 2, Y = 3]에서 java.awt.Point의 새로운 이미지를로드
의 새로운 이미지를로드 2,314,960,453,210 [X = 3, Y = 3]
8

그것은 수단 문제는 Assets 클래스 객체를 생성하는 방법에 있습니다.

당신은 그냥 정적, 그것이 null로 initailed 한 후 크기가 1이됩니다 정의하면이 쉽게 나는 우리의 코드에 추가 한 주석 SOP 확인할 수 있습니다

+0

실제로, 그 부분은 후속'rImages.remove (image);'에 의해 처리되므로 새로운 이미지가 선택되면 이전에 선택된 이미지는 더 이상 존재하지 않습니다. – njzk2

+0

그는 if 스코프 끝에있는 사용 된 이미지를 제거했습니다 – saman

+0

@ njzk2 same time :) – saman

관련 문제