Skip to content

Commit 8678a07

Browse files
committed
Started Building Animals Recipe w/Jim
1 parent df429d0 commit 8678a07

2 files changed

Lines changed: 155 additions & 0 deletions

File tree

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package org.teachingextensions.logo;
2+
3+
import java.awt.BasicStroke;
4+
import java.awt.Cursor;
5+
import java.awt.Graphics;
6+
import java.awt.Graphics2D;
7+
import java.awt.Image;
8+
import java.awt.RenderingHints;
9+
import java.awt.geom.AffineTransform;
10+
import java.awt.geom.Line2D;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
import javax.swing.ImageIcon;
15+
import javax.swing.JFrame;
16+
17+
import org.teachingextensions.logo.Turtle.Animals;
18+
import org.teachingextensions.windows.ProgramWindow;
19+
20+
public class MultiTurtlePanel extends ProgramWindow
21+
{
22+
private List<Turtle> turtles;
23+
private Image image;
24+
private Animals animal;
25+
public MultiTurtlePanel()
26+
{
27+
turtles = new ArrayList<Turtle>();
28+
}
29+
public void addTurtle(Turtle turtle)
30+
{
31+
this.turtles.add(turtle);
32+
}
33+
@Override
34+
public void paint(Graphics g)
35+
{
36+
super.paint(g);
37+
paintLines((Graphics2D) g);
38+
paintTurtle((Graphics2D) g);
39+
}
40+
private void paintLines(Graphics2D g)
41+
{
42+
for (Turtle turtle : turtles)
43+
{
44+
if (turtle == null) { return; }
45+
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
46+
g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
47+
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
48+
g.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
49+
for (LineSegment l : turtle.getTrail())
50+
{
51+
if (l != null)
52+
{
53+
g.setColor(l.getColor());
54+
g.setStroke(new BasicStroke(l.getWidth(), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER));
55+
g.draw(new Line2D.Double(l.getStart().x, l.getStart().y, l.getEnd().x, l.getEnd().y));
56+
}
57+
}
58+
}
59+
}
60+
private void paintTurtle(Graphics2D g)
61+
{
62+
for (Turtle turtle : turtles)
63+
{
64+
if (turtle == null || turtle.isHidden()) { return; }
65+
Image image = getImage();
66+
int xCenter = image.getWidth(null) / 2;
67+
int yCenter = image.getHeight(null) / 2;
68+
int x = turtle.getX() - xCenter;
69+
int y = turtle.getY() - yCenter;
70+
AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(turtle.getHeadingInDegrees()),
71+
xCenter, yCenter);
72+
AffineTransform move = AffineTransform.getTranslateInstance(x, y);
73+
move.concatenate(rotate);
74+
g.drawImage(image, move, null);
75+
}
76+
}
77+
public synchronized Image getImage()
78+
{
79+
if (image == null)
80+
{
81+
setAnimal(Animals.Turtle);
82+
}
83+
return image;
84+
}
85+
public synchronized Animals getAnimal()
86+
{
87+
if (animal == null)
88+
{
89+
setAnimal(Animals.Turtle);
90+
}
91+
return animal;
92+
}
93+
public synchronized void setAnimal(Animals animal)
94+
{
95+
this.animal = animal;
96+
image = new ImageIcon(this.getClass().getResource(animal + ".png")).getImage();
97+
}
98+
public void setCursor(int cursor)
99+
{
100+
this.setCursor(Cursor.getPredefinedCursor(cursor));
101+
}
102+
public void showPanel()
103+
{
104+
JFrame frame = new JFrame("Animals");
105+
frame.getContentPane().add(this);
106+
ProgramWindow.createStandardFrame(frame);
107+
this.repaint();
108+
}
109+
public void ___()
110+
{
111+
// blank for the DeepDive
112+
}
113+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.teachingkidsprogramming.section07events;
2+
3+
import org.teachingextensions.logo.MultiTurtlePanel;
4+
import org.teachingextensions.logo.Turtle;
5+
import org.teachingextensions.windows.MouseLeftClickListener;
6+
7+
public class ManyAnimals implements MouseLeftClickListener
8+
{
9+
public ManyAnimals()
10+
{
11+
showSomeTurtles();
12+
}
13+
private void showSomeTurtles()
14+
{
15+
MultiTurtlePanel mt = new MultiTurtlePanel();
16+
Turtle t1 = new Turtle();
17+
mt.addTurtle(t1);
18+
t1.setX(100);
19+
t1.setY(300);
20+
Turtle t2 = new Turtle();
21+
mt.addTurtle(t2);
22+
t1.setX(300);
23+
t1.setY(100);
24+
mt.showPanel();
25+
}
26+
@Override
27+
public void onLeftMouseClick(int x, int y)
28+
{
29+
// createTurtles (recipe below) --#8
30+
//------------- Recipe for createTurtles --#8
31+
// Remove previous Tortoise from your program window --#9
32+
// programWindow.removePaintable();
33+
// Set the count of Turtles to a random number between 10 and 50 --#2.5
34+
// Create a tortoise at 200, 300 --#2.1
35+
// Add the circle to your program window --#2.4
36+
//------------- End of createTurtles recipe --#8
37+
}
38+
public static void main(String[] args)
39+
{
40+
new ManyAnimals();
41+
}
42+
}

0 commit comments

Comments
 (0)