📄 mazeview.java
字号:
/** * mazeView.java * Implements the responsibilities of the Environment agent's View role * Notice that no Zeus code is imported, as this is not an agent-level component */import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;import javax.swing.*;public class mazeView extends JPanel implements ComponentListener, MouseListener, MouseMotionListener{ private int lastX = 0; private int lastY = 0; private boolean listeningForUpdates = false; private boolean agentUpdate = true; private boolean mazeUpdate = true; private mazeModel mazeInUse = null; public void mouseClicked (MouseEvent me) { int xMouse = me.getX(); int yMouse = me.getY(); Dimension thisPanelSize = getSize(); int xGrid = xMouse / (thisPanelSize.width / mazeInUse.mazeWidth); int yGrid = yMouse / (thisPanelSize.height / mazeInUse.mazeHeight); if (me.getModifiers()==me.BUTTON1_MASK){ mazeInUse.changeStatus(xGrid, yGrid);} if (me.getModifiers()== me.BUTTON3_MASK) { mazeInUse.setTarget(xGrid, yGrid); } repaint(); } private boolean thisSquareLastChanged(int thisX, int thisY) { if ((thisX == lastX) &&(thisY == lastY)) return true; else return false; } public void mouseMoved(MouseEvent me) {;} public void mouseDragged (MouseEvent me) { int xMouse = me.getX(); int yMouse = me.getY(); Dimension thisPanelSize = getSize(); int xGrid = xMouse / (thisPanelSize.width / mazeInUse.mazeWidth); int yGrid = yMouse / (thisPanelSize.height / mazeInUse.mazeHeight); if (me.getModifiers() == MouseEvent.BUTTON1_MASK && !thisSquareLastChanged(xGrid,yGrid)) { mazeInUse.changeStatus(xGrid, yGrid); lastX = xGrid; lastY = yGrid; } repaint(); } public void mousePressed (MouseEvent me) { repaint(); } public void mouseReleased (MouseEvent me) {} public void mouseEntered (MouseEvent me) {;} public void mouseExited (MouseEvent me) {;} public void componentResized (ComponentEvent ev) { repaint(); } public void componentMoved (ComponentEvent ev) { repaint(); } public void componentShown (ComponentEvent ev) { repaint(); } public void componentHidden (ComponentEvent ev) {;} public mazeView (mazeModel mazeInUse) { super(); this.mazeInUse = mazeInUse; } private void drawMaze(Graphics g) { Dimension thisPanelSize = getSize(); int noPixGridX = thisPanelSize.width / mazeInUse.mazeWidth; int noPixGridY = thisPanelSize.height / mazeInUse.mazeHeight; // first rub the maze and contents out g.setColor(Color.white); g.fillRect(0,0,thisPanelSize.width, thisPanelSize.height); //now redraw it int row = 0; int col = 0; for (col = 0; col < mazeInUse.mazeHeight; col++) { for (row = 0; row < mazeInUse.mazeWidth;row++) { if (mazeInUse.thisMaze[row][col]) { g.setColor(Color.blue); g.fillRect(col *noPixGridX, row * noPixGridY, noPixGridX, noPixGridY); } if (mazeInUse.isTarget(row,col)) { g.setColor(Color.yellow); g.fillRect(col * noPixGridX, row * noPixGridY, noPixGridX, noPixGridY); } g.setColor(Color.black); g.drawRect(col *noPixGridX, row * noPixGridY, noPixGridX, noPixGridY); } } mazeUpdate = false; // ensure that the agents are added agentUpdate = true; } private void drawAgent(Graphics g) { Dimension thisPanelSize = getSize(); int noPixGridX = thisPanelSize.width / mazeInUse.mazeWidth; int noPixGridY = thisPanelSize.height / mazeInUse.mazeHeight; Dimension currentAgentPos = null; Enumeration allAgents = mazeInUse.agents.keys(); Enumeration positions = mazeInUse.agents.elements(); int row = 0; int col = 0; while (allAgents.hasMoreElements()) { String id = (String)allAgents.nextElement(); if (!mazeInUse.exited(id)) { Color c = chooseColour(id); currentAgentPos = (Dimension) mazeInUse.agents.get(id); g.setColor(c); row = currentAgentPos.height * noPixGridY; col = currentAgentPos.width * noPixGridX; g.fillOval(col+noPixGridX/4,row+noPixGridY/4, noPixGridX/2, noPixGridY/2); } } agentUpdate = false; // only do this when necessary } private Color chooseColour(String name) { name = name.toLowerCase(); if (name.indexOf("red") != -1) return Color.red; if (name.indexOf("blue") != -1) return Color.blue; if (name.indexOf("green") != -1) return Color.green; return Color.black; } public void paint (Graphics g) { drawMaze(g); drawAgent(g); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -