用反射功能优化这段代码:public static Image upImg = Toolkit.getDefaultToolkit().getImage("img/up.png"); public static Image downImg = Toolkit.getDefaultToolkit().getImage("img/down.png"); public static Image leftImg = Toolkit.getDefaultToolkit().getImage("img/left.png"); public static Image rightImg = Toolkit.getDefaultToolkit().getImage("img/right.png"); //蛇身 public static Image bodyImg = Toolkit.getDefaultToolkit().getImage("img/body.png"); //食物 public static Image foodImg = Toolkit.getDefaultToolkit().getImage("img/food.png");
时间: 2024-03-25 22:38:29 浏览: 12
可以使用反射来优化这段代码,使其更加简洁。可以使用一个数组来存储所有的图片路径,然后使用反射动态地获取这些图片。具体实现如下:
```
public static Image[] images = new Image[6];
static {
String[] imagePaths = {"img/up.png", "img/down.png", "img/left.png", "img/right.png", "img/body.png", "img/food.png"};
for (int i = 0; i < imagePaths.length; i++) {
images[i] = Toolkit.getDefaultToolkit().getImage(imagePaths[i]);
}
}
```
这样就可以使用 images[0]、images[1]、images[2]、images[3]、images[4]、images[5] 来分别获取对应的图片了。
相关问题
package com.hh.utils; import java.awt.*; import java.lang.reflect.Field; public class GameUtils { //蛇头 public static Image upImg=Toolkit.getDefaultToolkit().getImage("img/up.png"); public static Image downImg=Toolkit.getDefaultToolkit().getImage("img/down.png"); public static Image leftImg=Toolkit.getDefaultToolkit().getImage("img/left.png"); public static Image rightImg=Toolkit.getDefaultToolkit().getImage("img/right.png"); //蛇身 public static Image bodyImg=Toolkit.getDefaultToolkit().getImage("img/body.png"); //食物 public static Image foodImg=Toolkit.getDefaultToolkit().getImage("img/food.png"); //关卡 public static int level= 1; //绘制文字 public static void drawWord(Graphics g,String str,Color color,int size,int x,int y){ g.setColor(color); g.setFont(new Font("宋体",Font.BOLD,size)); g.drawString(str, x, y); } }将这段代码用反射机制来改写
使用反射机制来改写上述代码可以将图片路径和关卡数作为参数传递并动态加载:
```java
package com.hh.utils;
import java.awt.*;
import java.lang.reflect.Field;
public class GameUtils {
// 蛇头
public static Image upImg;
public static Image downImg;
public static Image leftImg;
public static Image rightImg;
// 蛇身
public static Image bodyImg;
// 食物
public static Image foodImg;
// 关卡
public static int level;
static {
// 使用反射机制动态加载图片
ClassLoader classLoader = GameUtils.class.getClassLoader();
try {
upImg = Toolkit.getDefaultToolkit().getImage(classLoader.getResource("img/up.png"));
downImg = Toolkit.getDefaultToolkit().getImage(classLoader.getResource("img/down.png"));
leftImg = Toolkit.getDefaultToolkit().getImage(classLoader.getResource("img/left.png"));
rightImg = Toolkit.getDefaultToolkit().getImage(classLoader.getResource("img/right.png"));
bodyImg = Toolkit.getDefaultToolkit().getImage(classLoader.getResource("img/body.png"));
foodImg = Toolkit.getDefaultToolkit().getImage(classLoader.getResource("img/food.png"));
} catch (Exception e) {
e.printStackTrace();
}
}
// 绘制文字
public static void drawWord(Graphics g, String str, Color color, int size, int x, int y) {
g.setColor(color);
g.setFont(new Font("宋体", Font.BOLD, size));
g.drawString(str, x, y);
}
public static void setLevel(int level) {
GameUtils.level = level;
}
}
```
这样可以通过反射机制动态加载图片,使得代码更加灵活和可扩展。同时增加了一个方法 `setLevel(int level)` 用于设置关卡数。
public class GameUtils { //蛇头 public static Image upImg=Toolkit.getDefaultToolkit().getImage("src\\com\\hh\\img\\up.png"); public static Image downImg=Toolkit.getDefaultToolkit().getImage("src\\com\\hh\\img\\down.png"); public static Image leftImg=Toolkit.getDefaultToolkit().getImage("src\\com\\hh\\img\\left.png"); public static Image rightImg=Toolkit.getDefaultToolkit().getImage("src\\com\\hh\\img\\right.png"); //蛇身 public static Image bodyImg=Toolkit.getDefaultToolkit().getImage("src\\com\\hh\\img\\body.png"); //食物 public static Image foodImg=Toolkit.getDefaultToolkit().getImage("src\\com\\hh\\img\\food.png"); }用反射方法改写这段代码
可以使用反射方法来改写这段代码,以下是改写后的代码:
```
public class GameUtils {
//蛇头
public static Image upImg;
public static Image downImg;
public static Image leftImg;
public static Image rightImg;
//蛇身
public static Image bodyImg;
//食物
public static Image foodImg;
static {
try {
Class clazz = Class.forName("com.hh.img.GameUtils");
upImg = Toolkit.getDefaultToolkit().getImage(clazz.getResource("up.png"));
downImg = Toolkit.getDefaultToolkit().getImage(clazz.getResource("down.png"));
leftImg = Toolkit.getDefaultToolkit().getImage(clazz.getResource("left.png"));
rightImg = Toolkit.getDefaultToolkit().getImage(clazz.getResource("right.png"));
bodyImg = Toolkit.getDefaultToolkit().getImage(clazz.getResource("body.png"));
foodImg = Toolkit.getDefaultToolkit().getImage(clazz.getResource("food.png"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
使用反射方法可以避免使用硬编码的路径,而是通过类加载器来获取资源文件的路径。同时,这种方法也可以避免在不同的操作系统上出现路径格式不一致的问题。