public void draw(Graphics g) { g.setColor(Color.lightGray); if(direction == 0 || direction == 1) g.fillRect(border.x + 1, border.y +1, 3, 9); if(direction == 2 || direction == 3) g.fillRect(border.x +1, border.y + 1, 9, 3); } if(!border.intersects(map)){ gameModel.removeActor(this); notifiyOwner(); makeBomb(); writeToOutputLine(); return; if(gameModel.actors[i].getType().equals("steelWall")){ Steelwall temp =(Steelwall)gameModel.actors[i]; if(!temp.walldestoried){ temp.damageWall(border,bulletpower,direction); if(temp.bulletdestoried) hitTarget = true; } }else if(gameModel.actors[i].getType().equals("wall")){ wall temp = (wall)gameModel.actors[i]; if(!temp.walldestoried){ temp.damageWall(border,bulletpower,direction); if(temp.bulletdestoried) hitTarget = true; } }else if(gameModel.actors[i].getType().equals("bullet")){ bullet temp = (bullet)gameModel.actors[i]; if(temp.owner.getType().equals("Player")){ hitTarget = true; gameModel.removeActor(gameModel.actors[i]); temp.notifiyOwner(); } }else if(gameModel.actors[i].getType().equals("Player")){ if(owner.getType().equals("enemy")){ player temp = (player)gameModel.actors[i]; temp.hurt(); }else{ } hitTarget = true; }else if (gameModel.actors[i].getType().equals("enemy") && owner.getType().equals("Player")){ enemy temp = (enemy)gameModel.actors[i]; player tempe = (player)owner; if(temp.health == 0) tempe.scores+=temp.type*100; temp.hurt(); hitTarget = true; }else if(gameModel.actors[i].getType().equals("base")){ base temp = (base)gameModel.actors[i]; temp.doom(); hitTarget = true; gameModel.gameOver = true; } } } } } if(hitTarget){ gameModel.removeActor(this); notifiyOwner(); makeBomb(); writeToOutputLine(); return; }详细讲解一下
时间: 2024-03-31 21:36:00 浏览: 106
这段代码是一个游戏中的子弹类,其中包含了子弹的绘制和碰撞检测功能。
draw方法用于将子弹绘制在屏幕上,首先设置画笔颜色为浅灰色,然后根据子弹的方向绘制不同的矩形。如果方向为0或1,则绘制高度为9,宽度为3的矩形,如果方向为2或3,则绘制高度为3,宽度为9的矩形。
碰撞检测的部分是通过循环遍历游戏中的所有角色,来判断子弹是否与其他角色相撞。首先判断子弹是否与地图边界相撞,如果是,则将子弹从游戏中移除,并且通知其所有者,然后创建爆炸效果并写入输出行。
如果子弹与其他角色相撞,则根据角色的类型进行不同的处理。如果是钢墙,则将钢墙受到的伤害传递给钢墙,并判断是否摧毁了钢墙。如果是普通墙,则将墙受到的伤害传递给墙,并判断是否摧毁了墙。如果是子弹,则将子弹从游戏中移除,并通知子弹所有者。如果是玩家,则如果子弹的所有者是敌人,则玩家会受到伤害,否则不做处理。如果是敌人,则敌人会受到伤害,并且玩家会得到相应的分数。如果是基地,则基地会被摧毁,游戏结束。
最后判断是否命中了目标,如果是,则将子弹从游戏中移除,并且通知其所有者,然后创建爆炸效果并写入输出行。如果没有命中,则继续执行游戏循环。
相关问题
public void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int x = (getWidth() - image.getWidth(null)) / 2; int y = (getHeight() - image.getHeight(null)) / 2; AffineTransform transform = new AffineTransform(); transform.translate(x, y); if (drawingMode == DrawingMode.LINE) { g2d.setColor(Color.BLUE); g2d.draw(new Line2D.Double(0, getHeight() / 2, getWidth(), getHeight() / 2)); } else if (drawingMode == DrawingMode.RECTANGLE) { g2d.setColor(Color.RED); g2d.draw(new Rectangle2D.Double(0, 0, getWidth() - 1, getHeight() - 1)); } else if (drawingMode == DrawingMode.ELLIPSE) { g2d.setColor(Color.GREEN); g2d.draw(new Ellipse2D.Double(0, 0, getWidth() - 1, getHeight() - 1)); } else if (drawingMode == DrawingMode.POLYGON) { if (polygonPath != null) { g2d.setColor(Color.ORANGE); g2d.draw(polygonPath); } } g2d.drawImage(image, transform, null); } } }
这段代码是 ImagePanel 类的 paintComponent 函数的实现。它继承了 JPanel 的 paintComponent 函数,用于在面板上绘制图形。在绘制之前,先调用了父类的 paintComponent 函数进行清空面板操作。然后根据当前绘制模式,绘制不同的图形。最后,通过 AffineTransform 对象对图形进行变换,将图像居中显示。如果 ImagePanel 对象包含了一个 image 对象,那么在绘制完图形之后,还会将该 image 对象绘制到面板上。
package impl; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RadialGradientPaint; import java.awt.RenderingHints; public class Chess { Chessboard cp; //棋盘 int row; //横坐标 int col; //纵坐标 Color color; //棋子颜色 public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } public static final int BANJING = 18; public Chess(Chessboard cp, int col, int row, Color color) { this.cp = cp; this.col = col; this.row = row; this.color = color; } //画棋子 public void draw(Graphics g) { //定义棋子圆心 int xPos = col * 20 + 15; int yPos = row * 20 + 15; Graphics2D g2d = (Graphics2D) g; RadialGradientPaint paint = null; Color[] c = { Color.WHITE, Color.BLACK }; float[] f = { 0f, 1f }; int x = xPos + 3; int y = yPos - 3; if (color == Color.WHITE) { paint = new RadialGradientPaint(x, y, BANJING * 3, f, c); } else { paint = new RadialGradientPaint(x, y, BANJING, f, c); } g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setPaint(paint); g2d.fillOval(xPos - BANJING / 2, yPos - BANJING / 2, BANJING, BANJING); } }
这段代码是一个 Java 类,名为 Chess,实现了在棋盘上画棋子的功能。类中包括了以下几个成员变量:
- cp:棋盘对象
- row:棋子所在行
- col:棋子所在列
- color:棋子颜色
其中,getColor() 和 setColor() 方法用于获取和设置棋子颜色,getRow() 和 setRow() 方法用于获取和设置棋子所在行,getCol() 和 setCol() 方法用于获取和设置棋子所在列。
该类的构造方法 Chess(Chessboard cp, int col, int row, Color color) 用于创建一个棋子对象,传入参数为棋盘对象、棋子所在列、棋子所在行和棋子颜色。
该类还包括了一个方法 draw(Graphics g),用于在棋盘上画出棋子。方法中使用 Graphics2D 对象和 RadialGradientPaint 对象来绘制棋子,具体实现过程为:
- 根据棋子所在行和列计算棋子圆心的坐标;
- 根据棋子颜色创建一个 RadialGradientPaint 对象;
- 设置 Graphics2D 对象的渲染方式和画笔颜色;
- 使用 Graphics2D 对象绘制棋子。
最后,该类还定义了一个常量 BANJING,表示棋子的半径。
阅读全文