Lista med punkter |
Vi behöver en variabel som kan lagra en lista med fallande punkter. Listan måste kunna växa
när nya punkter kommer med tiden och krympa när punkter ramlar ut från skärmen eller körs över.
Den perfekta "datatypen" i Java är ArrayList.
1) Deklaration av en lista som bara kan rymma punkter:
ArrayList<Point> list= new ArrayList();2) Sätt in en ny punkt i listan:
list.add( new Point(50,15) );3) Stega igenom listan för att rita ut bollar vid alla punkter.
for( Point p : list){ g.drawOval( p.x-10,p.y-10, 20,20); }4) Stega genom listan för att flytta alla punkter nedåt och avsluta när en punkt når nederkanten av fönstret.
for( Point p : list){ p.y++; if( p.y > getHeight() ) gameOver= true; }
prog_b\elab\FallLab_boll.java |
import java.applet.*; import java.awt.*; import java.awt.event.*; import java.util.*; // ArrayList-klassen ligger i util-paketet public class FallLab_boll extends Applet implements ActionListener, Runnable { Button button = new Button("Start"); ArrayList<Point> list = new ArrayList(); // skapa en lista för punkterna public void init() { add(button); button.addActionListener(this); } public void actionPerformed(ActionEvent e) { button.setVisible(false); Thread t = new Thread(this); t.start(); } public void paint(Graphics g) { for (Point p : list) { g.drawOval(p.x - 10, p.y - 10, 20, 20); } } public void run() { boolean gameOver = false; int tic = 50; // tic räknar antalet bilder som visas while (!gameOver) { tic--; if (tic == 0) { // var 50:e tic ska en ny punkt läggas till list.add(new Point(50, 10));// i listan tic = 50; } for (Point point : list) { // flytta alla punkter i listan en pixel nedåt point.y++; if (point.y > getHeight()) { gameOver = true; } } repaint(); try { Thread.sleep(5); } catch (Exception e) { } } button.setVisible(true); // möjliggör omstart list.clear(); // töm listan från gamla punkter } }