Lista med punkter

        

Lägg till en lista med fallande 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.
(Rita en cirkel kring punkten med diametern 20)
    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;
    }
    



Källkoden

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
    }
}
    


Nästa version - med mus