Tôi hiện đang làm việc trên một chương trình sẽ tạo ra nhiễu ngẫu nhiên trên màn hình dựa trên 'tọa độ' của pixel. Các tọa độ phải có cùng màu mỗi khi bạn khởi động lại chương trình. Tuy nhiên, bằng cách sử dụng Java.Random, các kết quả tôi nhận được không phải là ngẫu nhiên như tôi muốn:
Tôi nghĩ rằng nếu tôi sử dụng tọa độ kết hợp (như trong một số nguyên được hình thành từ cả hai tọa độ bên cạnh nhau) thì mỗi tọa độ sẽ có một số khác nhau. Bằng cách sử dụng số đó làm hạt giống, tôi dự kiến sẽ có được một số ngẫu nhiên khác nhau cho mỗi tọa độ để sử dụng cho giá trị rgb của tọa độ đó.
Đây là mã tôi đã sử dụng:
public class Generate {
static Random Random;
public static int TileColor(int x, int y){
Random = new Random(Integer.valueOf(Integer.toString(x)+Integer.toString(y)));
int b = 1 + Random.nextInt(50);
int g = 1 + Random.nextInt(50);
int r = 1 + Random.nextInt(50);
int color = -Color.rgb888(r, g, b);
return color;
}
}
Là mô hình mà chương trình tạo ra do cách chức năng Random của java hoạt động hay tôi đang làm gì đó sai và tôi có nên thử một cách tiếp cận khác không?
Cập nhật: Bây giờ tôi đã cố gắng loại bỏ các vấn đề xung quanh việc ghép nối bằng cách sử dụng mã sau đây:
public static int TileColor(int x, int y){
Randomy = new Random(y);
Randomx = new Random(x);
Random = new Random(Integer.valueOf(Integer.toString(Randomx.nextInt(1234))+Integer.toString(Randomy.nextInt(1234))));
int b = 1 + Random.nextInt(100);
int g = 1 + Random.nextInt(100);
int r = 1 + Random.nextInt(100);
int color = -Color.rgb888(r, g, b);
return color;
}
Bằng cách nào đó, điều này cũng cung cấp một hình ảnh (theo ý kiến của tôi) đủ ngẫu nhiên:
Tuy nhiên, mã này đã quét lại ba lần cho mỗi pixel. Mặc dù điều này không phải là vấn đề đối với tôi ngay bây giờ, tôi vẫn xem xét thay đổi mã này trong trường hợp tôi cần sự phù hợp tốt hơn sau này.