/* */ import java.applet.*; import java.awt.*; import java.net.*; import java.awt.image.*; import java.awt.event.*; public class Rink extends NoFlickerApplet implements KeyListener { int columns, rows; Thread animation; Image small[]; int cellWidth = 30, cellHeight = 30; public Rink() { } public Rink (int columns, int rows) { this.columns = columns; this.rows = rows; } int wide, tall; public void init() { if (columns == 0) this.columns = Integer.parseInt(this.getParameter("columns")); if (rows == 0) this.rows = Integer.parseInt(this.getParameter("rows")); this.wide = columns * cellWidth + cellWidth / 2; this.tall = (1 + rows) * cellHeight + cellHeight / 2; this.setSize(this.wide, this.tall); String pictureURL = "http://www.cs.indiana.edu/classes/a348/CT" + "ED/moduleFour/lectures/iceblox/iceblox.gif"; MediaTracker tracker = new MediaTracker(this); Image collection; try { collection = Toolkit.getDefaultToolkit().getImage(new URL(pictureURL)); } catch (Exception e) { collection = Toolkit.getDefaultToolkit().getImage("iceblox.gif"); } tracker.addImage(collection, 0); try { tracker.waitForID(0); } catch (InterruptedException e) { } ImageProducer collectionProducer = collection.getSource(); int smalls = 48; small = new Image[smalls]; int k = 0, i = 0, j = 0; ImageFilter filter; while (k < smalls) { filter = new CropImageFilter(j * 30, i * 30, 30, 30); small[k] = createImage( new FilteredImageSource( collectionProducer, filter)); tracker.addImage(small[k], 1); k++; j++; if (j == 8) { j = 0; i++; } } try { tracker.waitForID(1); } catch (InterruptedException e) { } if (this.getParameter("penguin").equals("yes")) { this.add(new Penguin(), Integer.parseInt(this.getParameter("pengo_x")), Integer.parseInt(this.getParameter("pengo_y"))); } this.addKeyListener(this); } int fontSize = 10; // in pixels Font digitsFont = new Font("Serif", Font.PLAIN, fontSize); Penguin skater; void add(Penguin p, int x, int y) { this.skater = p; p.placeIn(this, x, y); skater.start(); } public void paint(Graphics g) { ((Graphics2D)g).setFont(digitsFont); g.setColor(Color.black); g.fillRect(0, 0, columns * cellWidth, rows * cellHeight); g.setColor(Color.gray); for (int i = 0; i <= rows; i++) { g.drawLine(0, i * cellHeight, columns * cellWidth, i * cellHeight); } for (int i = 0; i <= columns; i++) { g.drawLine(i * cellWidth, 0, i * cellWidth, rows * cellHeight); } g.drawRect(0, 0, cellWidth * columns, cellHeight * rows); for (int j = 0; j < columns; j = j + 1) for (int i = 0; i < rows; i++) g.drawString(i + ", " + j, j * cellWidth + 2, i * cellHeight + fontSize); if (skater != null) { int x = skater.x, y = skater.y; g.setColor(Color.black); g.fillRect(x, y, 31, 31); skater.draw(g); } } public void keyPressed(KeyEvent e) { switch(e.getKeyCode()) { case KeyEvent.VK_L: // left // System.out.println("left"); skater.action.put("turnLeft"); break; case KeyEvent.VK_F: // forward // System.out.println("forward"); skater.action.put("moveForward"); break; case KeyEvent.VK_R: // right // System.out.println("right"); skater.action.put("turnRight"); break; case KeyEvent.VK_B: // backwards // System.out.println("back"); skater.action.put("backwards"); break; } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } }