a6
This commit is contained in:
17
assignment6/Question1/IShape.java
Normal file
17
assignment6/Question1/IShape.java
Normal file
@@ -0,0 +1,17 @@
|
||||
import java.awt.Graphics;
|
||||
|
||||
public interface IShape {
|
||||
public int getX();
|
||||
|
||||
public int getY();
|
||||
|
||||
public void setX(int x);
|
||||
|
||||
public void setY(int y);
|
||||
|
||||
public boolean isVisible(int w, int h);
|
||||
|
||||
public boolean isIn(int x, int y);
|
||||
|
||||
public void draw(Graphics g);
|
||||
}
|
||||
51
assignment6/Question1/Shape.java
Normal file
51
assignment6/Question1/Shape.java
Normal file
@@ -0,0 +1,51 @@
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
|
||||
public abstract class Shape {
|
||||
private int x;
|
||||
private int y;
|
||||
private Color color;
|
||||
|
||||
/**
|
||||
* Constructor for Shape
|
||||
*
|
||||
* @param x
|
||||
* the x coordinate of the shape
|
||||
* @param y
|
||||
* the y coordinate of the shape
|
||||
*/
|
||||
public Shape(int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
color = new Color((float) Math.random(), (float) Math.random(), (float) Math.random());
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public void setY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public abstract boolean isVisible(int w, int h);
|
||||
|
||||
public abstract boolean isIn(int x, int y);
|
||||
|
||||
public void draw(Graphics g) {
|
||||
g.setColor(color);
|
||||
}
|
||||
|
||||
public static void testShape() {
|
||||
// TODO: implement this method
|
||||
// Because this is the abstract so we don't test anything here.
|
||||
}
|
||||
}
|
||||
5
assignment6/Question1/Start.java
Normal file
5
assignment6/Question1/Start.java
Normal file
@@ -0,0 +1,5 @@
|
||||
public class Start {
|
||||
public static void main(String[] args) {
|
||||
Shape.testShape();
|
||||
}
|
||||
}
|
||||
89
assignment6/Question2/Bubble.java
Normal file
89
assignment6/Question2/Bubble.java
Normal file
@@ -0,0 +1,89 @@
|
||||
import java.awt.Graphics;
|
||||
|
||||
public class Bubble extends Shape {
|
||||
private double radius;
|
||||
|
||||
/**
|
||||
* Constructor for the Bubble class.
|
||||
*
|
||||
* @param x the x coordinate of the center of the bubble
|
||||
* @param y the y coordinate of the center of the bubble
|
||||
*/
|
||||
public Bubble(int x, int y) {
|
||||
super(x, y);
|
||||
this.radius = 10;
|
||||
}
|
||||
|
||||
// Find the point (wx, wy) inside the window which is closest to the
|
||||
// center (x, y) of the circle. In other words, find the wx in the
|
||||
// interval [0, w - 1] which is closest to x, and find the wy in the
|
||||
// interval [0, h - 1] which is closest to y.
|
||||
// If the distance between (wx, wy) and (x, y) is less than the radius
|
||||
// of the circle (using Pythagoras's theorem) then at least part of
|
||||
// the circle is visible in the window.
|
||||
// Note: if the center of the circle is inside the window, then (wx, wy)
|
||||
// is the same as (x, y), and the distance is 0.
|
||||
@Override
|
||||
public boolean isVisible(int w, int h) {
|
||||
double x = getX();
|
||||
double y = getY();
|
||||
double wx = (x < 0 ? 0 : (x > w - 1 ? w - 1 : x));
|
||||
double wy = (y < 0 ? 0 : (y > h - 1 ? h - 1 : y));
|
||||
double dx = wx - x;
|
||||
double dy = wy - y;
|
||||
return dx * dx + dy * dy <= radius * radius;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the point at xy is currently inside the bubble
|
||||
*
|
||||
* @param x the x coordinate of the point
|
||||
* @param y the y coordinate of the point
|
||||
* @return true if the point is inside the bubble, false otherwise
|
||||
*/
|
||||
@Override
|
||||
public boolean isIn(int x, int y) {
|
||||
double dx = x - getX();
|
||||
double dy = y - getY();
|
||||
return dx * dx + dy * dy < radius * radius;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the bubble.
|
||||
*
|
||||
* @param g the graphics context
|
||||
*/
|
||||
@Override
|
||||
public void draw(Graphics g) {
|
||||
super.draw(g);
|
||||
g.drawOval(
|
||||
getX() - (int) radius,
|
||||
getY() - (int) radius,
|
||||
(int) radius * 2,
|
||||
(int) radius * 2);
|
||||
}
|
||||
|
||||
public static void testBubble() {
|
||||
Bubble b = new Bubble(20, 30);
|
||||
|
||||
System.out.println(b.getX() == 20);
|
||||
System.out.println(b.getY() == 30);
|
||||
|
||||
b.setX(40);
|
||||
System.out.println(b.getX() == 40);
|
||||
System.out.println(b.getY() == 30);
|
||||
|
||||
b.setY(60);
|
||||
System.out.println(b.getX() == 40);
|
||||
System.out.println(b.getY() == 60);
|
||||
System.out.println(b.isVisible(100, 100) == true);
|
||||
|
||||
b.setX(50);
|
||||
b.setY(0);
|
||||
System.out.println(b.isVisible(100, 100) == true);
|
||||
|
||||
b.setX(99);
|
||||
b.setY(50);
|
||||
System.out.println(b.isVisible(100, 100) == true);
|
||||
}
|
||||
}
|
||||
17
assignment6/Question2/IShape.java
Normal file
17
assignment6/Question2/IShape.java
Normal file
@@ -0,0 +1,17 @@
|
||||
import java.awt.Graphics;
|
||||
|
||||
public interface IShape {
|
||||
public int getX();
|
||||
|
||||
public int getY();
|
||||
|
||||
public void setX(int x);
|
||||
|
||||
public void setY(int y);
|
||||
|
||||
public boolean isVisible(int w, int h);
|
||||
|
||||
public boolean isIn(int x, int y);
|
||||
|
||||
public void draw(Graphics g);
|
||||
}
|
||||
42
assignment6/Question2/Shape.java
Normal file
42
assignment6/Question2/Shape.java
Normal file
@@ -0,0 +1,42 @@
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
|
||||
public abstract class Shape {
|
||||
private int x;
|
||||
private int y;
|
||||
private Color color;
|
||||
|
||||
public Shape(int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
color = new Color((float) Math.random(), (float) Math.random(), (float) Math.random());
|
||||
}
|
||||
|
||||
// getters and setters
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public void setY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public abstract boolean isVisible(int w, int h);
|
||||
|
||||
public abstract boolean isIn(int x, int y);
|
||||
|
||||
public void draw(Graphics g) {
|
||||
g.setColor(color);
|
||||
}
|
||||
|
||||
public static void testShape() {
|
||||
}
|
||||
}
|
||||
6
assignment6/Question2/Start.java
Normal file
6
assignment6/Question2/Start.java
Normal file
@@ -0,0 +1,6 @@
|
||||
public class Start {
|
||||
public static void main(String[] args) {
|
||||
Shape.testShape();
|
||||
Bubble.testBubble();
|
||||
}
|
||||
}
|
||||
65
assignment6/Question3/Bubble.java
Normal file
65
assignment6/Question3/Bubble.java
Normal file
@@ -0,0 +1,65 @@
|
||||
import java.awt.Graphics;
|
||||
|
||||
public class Bubble extends Shape implements IShape {
|
||||
// instance variables
|
||||
private double radius;
|
||||
|
||||
// constructor
|
||||
public Bubble(int x, int y) {
|
||||
super(x, y);
|
||||
this.radius = 10;
|
||||
}
|
||||
|
||||
// Find the point (wx, wy) inside the window which is closest to the
|
||||
// center (x, y) of the circle. In other words, find the wx in the
|
||||
// interval [0, w - 1] which is closest to x, and find the wy in the
|
||||
// interval [0, h - 1] which is closest to y.
|
||||
// If the distance between (wx, wy) and (x, y) is less than the radius
|
||||
// of the circle (using Pythagoras's theorem) then at least part of
|
||||
// the circle is visible in the window.
|
||||
// Note: if the center of the circle is inside the window, then (wx, wy)
|
||||
// is the same as (x, y), and the distance is 0.
|
||||
@Override
|
||||
public boolean isVisible(int w, int h) {
|
||||
double x = getX();
|
||||
double y = getY();
|
||||
double wx = (x < 0 ? 0 : (x > w - 1 ? w - 1 : x));
|
||||
double wy = (y < 0 ? 0 : (y > h - 1 ? h - 1 : y));
|
||||
double dx = wx - x;
|
||||
double dy = wy - y;
|
||||
return dx * dx + dy * dy <= radius * radius;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIn(int x, int y) {
|
||||
double dx = x - getX();
|
||||
double dy = y - getY();
|
||||
return dx * dx + dy * dy < radius * radius;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Graphics g) {
|
||||
super.draw(g);
|
||||
g.drawOval(
|
||||
getX() - (int) radius,
|
||||
getY() - (int) radius,
|
||||
(int) radius * 2,
|
||||
(int) radius * 2);
|
||||
}
|
||||
|
||||
public static void testBubble() {
|
||||
Bubble b = new Bubble(20, 30);
|
||||
System.out.println(b.getX() == 20);
|
||||
System.out.println(b.getY() == 30);
|
||||
b.setX(40);
|
||||
System.out.println(b.getX() == 40);
|
||||
System.out.println(b.getY() == 30);
|
||||
b.setY(60);
|
||||
System.out.println(b.getX() == 40);
|
||||
System.out.println(b.getY() == 60);
|
||||
System.out.println(b.isVisible(100, 100) == true);
|
||||
b.setX(50);
|
||||
b.setY(0);
|
||||
System.out.println(b.isVisible(100, 100) == true);
|
||||
}
|
||||
}
|
||||
17
assignment6/Question3/IShape.java
Normal file
17
assignment6/Question3/IShape.java
Normal file
@@ -0,0 +1,17 @@
|
||||
import java.awt.Graphics;
|
||||
|
||||
public interface IShape {
|
||||
public int getX();
|
||||
|
||||
public int getY();
|
||||
|
||||
public void setX(int x);
|
||||
|
||||
public void setY(int y);
|
||||
|
||||
public boolean isVisible(int w, int h);
|
||||
|
||||
public boolean isIn(int x, int y);
|
||||
|
||||
public void draw(Graphics g);
|
||||
}
|
||||
105
assignment6/Question3/Model.java
Normal file
105
assignment6/Question3/Model.java
Normal file
@@ -0,0 +1,105 @@
|
||||
import java.awt.Graphics;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Model {
|
||||
// instance variables
|
||||
private int score;
|
||||
private ArrayList<IShape> bubbles;
|
||||
|
||||
// constructor
|
||||
public Model() {
|
||||
score = 0;
|
||||
bubbles = new ArrayList<IShape>();
|
||||
}
|
||||
|
||||
// getters and setters
|
||||
public int getScore() {
|
||||
return score;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param w
|
||||
* @param h
|
||||
*/
|
||||
public void addBubble(int w, int h) {
|
||||
bubbles.add(new Bubble((int) (w * Math.random()), (int) (h * Math.random())));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dx
|
||||
* @param dy
|
||||
*/
|
||||
public void moveAll(int dx, int dy) {
|
||||
for (int i = 0; i < bubbles.size(); i++) {
|
||||
bubbles.get(i).setX(bubbles.get(i).getX() + dx);
|
||||
bubbles.get(i).setY(bubbles.get(i).getY() + dy);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* clear all bubbles
|
||||
*
|
||||
* @param w
|
||||
* @param h
|
||||
*/
|
||||
public void clearInvisibles(int w, int h) {
|
||||
for (int i = bubbles.size() - 1; i >= 0; i--) {
|
||||
if (!bubbles.get(i).isVisible(w, h)) {
|
||||
bubbles.remove(i);
|
||||
score--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* delete bubbles that are hit by the mouse
|
||||
*
|
||||
* @param x
|
||||
* @param y
|
||||
*/
|
||||
public void deleteBubblesAtPoint(int x, int y) {
|
||||
for (int i = bubbles.size() - 1; i >= 0; i--) {
|
||||
if (bubbles.get(i).isIn(x, y)) {
|
||||
bubbles.remove(i);
|
||||
score++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* draw all bubbles
|
||||
*
|
||||
* @param g
|
||||
*/
|
||||
public void drawAll(Graphics g) {
|
||||
for (IShape bubble : bubbles) {
|
||||
bubble.draw(g);
|
||||
}
|
||||
}
|
||||
|
||||
public static void testModel() {
|
||||
Model m = new Model();
|
||||
System.out.println(m.getScore() == 0);
|
||||
System.out.println(m.bubbles.size() == 0);
|
||||
m.addBubble(100, 100);
|
||||
m.addBubble(100, 100);
|
||||
System.out.println(m.getScore() == 0);
|
||||
System.out.println(m.bubbles.size() == 2);
|
||||
m.clearInvisibles(200, 200);
|
||||
System.out.println(m.getScore() == 0);
|
||||
System.out.println(m.bubbles.size() == 2);
|
||||
m.clearInvisibles(0, 0);
|
||||
System.out.println(m.getScore() == -2);
|
||||
System.out.println(m.bubbles.size() == 0);
|
||||
m.addBubble(100, 100);
|
||||
m.addBubble(100, 100);
|
||||
System.out.println(m.getScore() == -2);
|
||||
System.out.println(m.bubbles.size() == 2);
|
||||
m.moveAll(200, 200);
|
||||
System.out.println(m.getScore() == -2);
|
||||
System.out.println(m.bubbles.size() == 2);
|
||||
m.clearInvisibles(200, 200);
|
||||
System.out.println(m.getScore() == -4);
|
||||
System.out.println(m.bubbles.size() == 0);
|
||||
}
|
||||
}
|
||||
41
assignment6/Question3/Shape.java
Normal file
41
assignment6/Question3/Shape.java
Normal file
@@ -0,0 +1,41 @@
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
|
||||
public abstract class Shape {
|
||||
private int x;
|
||||
private int y;
|
||||
private Color color;
|
||||
|
||||
public Shape(int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
color = new Color((float) Math.random(), (float) Math.random(), (float) Math.random());
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public void setY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public abstract boolean isVisible(int w, int h);
|
||||
|
||||
public abstract boolean isIn(int x, int y);
|
||||
|
||||
public void draw(Graphics g) {
|
||||
g.setColor(color);
|
||||
}
|
||||
|
||||
public static void testShape() {
|
||||
}
|
||||
}
|
||||
7
assignment6/Question3/Start.java
Normal file
7
assignment6/Question3/Start.java
Normal file
@@ -0,0 +1,7 @@
|
||||
public class Start {
|
||||
public static void main(String[] args) {
|
||||
Shape.testShape();
|
||||
Bubble.testBubble();
|
||||
Model.testModel();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user