Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GUI程序将2D数组值转换为图形_Java_Arrays_Map_Graphic - Fatal编程技术网

Java GUI程序将2D数组值转换为图形

Java GUI程序将2D数组值转换为图形,java,arrays,map,graphic,Java,Arrays,Map,Graphic,我是一名Java初学者&我必须编写一个Java程序,从一个维度为347*697(数组的值范围为2200到4200)的2d数组中获取输入。我必须这样做,即范围每增加100,就有一组特定的颜色(例如2200-2300颜色(214217223)等等)。我从来没有做过任何事这是我发现有点类似的程序。。。有人能告诉我如何转换它吗 我知道这要求太高了,但明天我必须做一个ppt当每个选项都关闭时,我来到这里。拜托,伙计们,我急需帮助 import javax.swing.*; import java.awt.

我是一名Java初学者&我必须编写一个Java程序,从一个维度为347*697(数组的值范围为2200到4200)的2d数组中获取输入。我必须这样做,即范围每增加100,就有一组特定的颜色(例如2200-2300颜色(214217223)等等)。我从来没有做过任何事这是我发现有点类似的程序。。。有人能告诉我如何转换它吗 我知道这要求太高了,但明天我必须做一个ppt当每个选项都关闭时,我来到这里。拜托,伙计们,我急需帮助

import javax.swing.*;
import java.awt.*;
import java.util.Random;

public class Map extends JPanel {

public static final Color CITY = new Color(214,217,223);
public static final Color DESERT = new Color(255,204,102);
public static final Color DIRT_ROAD = new Color(153,102,0);
public static final Color FOREST = new Color(0,102,0);
public static final Color HILLS = new Color(51,153,0);
public static final Color LAKE = new Color(0,153,153);
public static final Color MOUNTAINS = new Color(102,102,255);
public static final Color OCEAN = new Color(0,0,153);
public static final Color PAVED_ROAD = new Color(51,51,0);
public static final Color PLAINS = new Color(102,153,0);

public static final Color[] TERRAIN = {
    CITY,
    DESERT,
    DIRT_ROAD,
    FOREST,
    HILLS,
    LAKE,
    MOUNTAINS,
    OCEAN,
    PAVED_ROAD,
    PLAINS
};

public static final int NUM_ROWS = 215;
public static final int NUM_COLS = 300;

public static final int PREFERRED_GRID_SIZE_PIXELS = 10;

// In reality you will probably want a class here to represent a map tile,
// which will include things like dimensions, color, properties in the
// game world.  Keeping simple just to illustrate.
private final Color[][] terrainGrid;

public Map(){
    this.terrainGrid = new Color[NUM_ROWS][NUM_COLS];
    Random r = new Random();
    // Randomize the terrain
    for (int i = 0; i < NUM_ROWS; i++) {
        for (int j = 0; j < NUM_COLS; j++) {
            int randomTerrainIndex = r.nextInt(TERRAIN.length);
            Color randomColor = TERRAIN[randomTerrainIndex];
            this.terrainGrid[i][j] = randomColor;
        }
    }
    int preferredWidth = NUM_COLS * PREFERRED_GRID_SIZE_PIXELS;
    int preferredHeight = NUM_ROWS * PREFERRED_GRID_SIZE_PIXELS;
    setPreferredSize(new Dimension(preferredWidth, preferredHeight));
}

@Override
public void paintComponent(Graphics g) {
    // Important to call super class method
    super.paintComponent(g);
    // Clear the board
    g.clearRect(0, 0, getWidth(), getHeight());
    // Draw the grid
    int rectWidth = getWidth() / NUM_COLS;
    int rectHeight = getHeight() / NUM_ROWS;

    for (int i = 0; i < NUM_ROWS; i++) {
        for (int j = 0; j < NUM_COLS; j++) {
            // Upper left corner of this terrain rect
            int x = i * rectWidth;
            int y = j * rectHeight;
            Color terrainColor = terrainGrid[i][j];
            g.setColor(terrainColor);
            g.fillRect(x, y, rectWidth, rectHeight);
        }
    }
}

public static void main(String[] args) {
    // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame = new JFrame("Game");
            Map map = new Map();
            frame.add(map);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    });
}
import javax.swing.*;
导入java.awt.*;
导入java.util.Random;
公共类映射扩展了JPanel{
公共静态最终颜色城市=新颜色(214217223);
公共静态最终颜色=新颜色(255204102);
公共静态最终颜色泥土路=新颜色(153102,0);
公共静态最终颜色林=新颜色(0102,0);
公共静态最终颜色=新颜色(51153,0);
公共静态最终颜色湖=新颜色(0153153);
公共静态最终颜色=新颜色(102255);
公共静态最终颜色海洋=新颜色(0,0153);
公共静态最终颜色铺砌道路=新颜色(51,51,0);
公共静态最终颜色平面=新颜色(102153,0);
公共静态最终颜色[]地形={
城市
沙漠,
土路,
森林,
山,
湖,
山,
海洋,
柏油路,
平原
};
公共静态最终整数行数=215;
公共静态最终整数=300;
公共静态最终整数首选网格大小像素=10;
//实际上,您可能需要在这里使用一个类来表示地图分幅,
//其中包括尺寸、颜色、属性等
//游戏世界。保持简单只是为了说明。
私人最终颜色[][]terrainGrid;
公共地图(){
this.terrainGrid=新颜色[NUM_ROWS][NUM_COLS];
随机r=新随机();
//随机化地形
对于(int i=0;i

}

创建一个包含所需图像每个像素的rgb值的
字节[]
字节[]
长度将为
宽度*高度*3
(每个像素有3个值)。查看如何从
字节[]
创建
缓冲区图像的示例


另一种方法是直接为每个像素创建一个BuffereImage和rgb值。在这种情况下,您必须将所有3个rgb值位旋转为一个
int
值。

这个问题似乎离题了,因为它主要是一个工作或家庭作业转储。@HovercraftFullOfEels我只需要逻辑如何在数组中为不同的值使用不同的颜色。。。我不想让你解决这个问题,老兄,相信我这真的很重要,我只是需要一点帮助相信我,你展示你努力的成果对我们来说很重要。这不是一个为你做家庭作业的网站。很抱歉你这么想。我自己,我更愿意接受显示出某种努力的问题,而不是简单地抛出“找到的”代码并举手,显示您的代码尝试,提出关于您的代码尝试的特定问题。这就是我的本来面目。@HovercraftFullOfEels我已经澄清了我不知道java小程序和GUI&代码输出也是为了解释每个人都理解我的想法(因为我不知道术语)。我知道我也会遇到像你这样的人。。。他会不断提醒我不懂这种语言而不是帮助我的错误。你是不是故意的,但这里没有冒犯。。注意,伙计:)第二种方法是你建议的,我可以通过使用for循环将rgb的值定义为一个值范围吗?你必须为每个像素设置特定的rgb值。这可能是从嵌套的宽度和高度的循环中完成的。谢谢您的帮助。现在我知道我要做什么了。再次感谢:)