BlueJ - движения, случайные генераторы, классы и общая видимость - PullRequest
0 голосов
/ 09 апреля 2020

Я здесь, потому что я нахожусь во введении в класс CS C, в настоящее время борюсь с лабораторией, и этот сайт был рекомендован мне как место для получения помощи.

Мы используем BlueJ для изучения основных c Java функций, и наш Профессор не научил нас, что на самом деле означает что-то или как на самом деле это понимать. Дан пакет с инструкциями о том, что добавить к уже существующей сцене. В настоящее время я должен добавить объекты с массивами, петлями и движениями (мерцающие звезды и падающие звезды) к горизонту. Мне удалось добавить одну падающую звезду, и код выглядит следующим образом:

import cha.*;
import cha.action.*;
import java.awt.*;
import java.util.*;

import static java.lang.Math.*;
import static java.awt.Color.*;

public class NightScene
extends CHApplet {
     Random gen;
     int horizon;
     Sky sky;
     CHLabel name;
     CHOval [] stars;
     Color offwhite; 
     Twinkle tw;
     CHOval shooter;
     Shoot st;
     CHClip shootingstar;

    private class Twinkle
    extends CHAction {
        public void step() {
            Random gen3;
            gen3 = new Random();
            int v;
            v = gen3.nextInt(stars.length);
            stars[v].setVisible(false);
            sleep(500);
            // 1000 didn't show any twinkle.  Lower number to show.
            stars[v].setVisible(true);
        }
    }
    private class Shoot
    extends CHAction {
        public void step() {
            shooter.moveOneStep();

        }
        public void before() {
            Random gen4;
            gen4 = new Random();
            int xl = gen.nextInt(getWidth());
            int yl = gen.nextInt(horizon);
            shooter.setBounds(xl,yl,5,5);
            shooter.setVisible(true);
            int xv = gen.nextInt(-10 + 20);
            int yv = gen.nextInt(-10 + 20);
            shooter.setVelocity(xv,yv);
            shootingstar.play();
        }  
        public void after() {
            shooter.setVisible(false);
        }
    }       

    public void init() {
        // background & lawn cut for brevity.

        Random gen2;
        gen2 = new Random();
        stars = new CHOval[500];
        for(int i = 0; i <stars.length; i++) {
            stars[i] = new CHOval();
            add (stars[i],0);
            int x;
            x = gen2.nextInt(800);
            // Prof used x = gen2.nextInt(getWidth());
            int y;
            y = gen2.nextInt(horizon);
            stars[i].setBounds(x,y,1,1);
            stars[i].setBackground(offwhite);
            stars[i].setForeground(offwhite);
        }

        tw = new Twinkle();
        add(tw);
        tw.setLimit(1000);

        shooter = new CHOval();
        add(shooter,0);
        shooter.setBackground(offwhite); 
        shooter.setForeground(offwhite);
        shooter.setVisible(false);

        st = new Shoot();
        add(st);
        Random gen5;
        gen5 = new Random();
        int sl = gen.nextInt(10 + 20);
        st.setLimit(sl);

        //audio clip to add sound

        //house added from another container

    } // end of init 

    public void start( ) {
        tw.start();
        st.start();
    }

    public static void run() {
        int width = 800;
        int height = 600;
        CHApplet applet = new NightScene();
        applet.run(width, height);
    }

    private NightScene(){}
}

Когда получено указание изменить этот код для создания «бесконечного l oop» падающих звезд,

Создайте еще один закрытый класс ShootMany, который расширяет CHAction. Единственным методом в этом классе будет метод step (). В этом методе спите случайное количество времени - создайте случайное число от 100 до 5000, затем используйте случайное число в качестве параметра в режиме ожидания. Затем вырежьте операторы для создания, имени, добавления и запуска объекта типа Shoot из методов init () и start () и поместите их в новый шаг ().

В методе init () , объявить, создать, добавить и запустить объект типа ShootMany. Используйте .setLimit (5000), чтобы повторять действие съемки более или менее бесконечно.

Из созданного частного класса мой код теперь выглядит следующим образом:

//placed after 
private class Shoot
    extends CHAction {
        public void step() {
            shooter.moveOneStep();
        }
        public void before() {
            Random gen4;
            gen4 = new Random();
            int xl = gen.nextInt(getWidth());
            int yl = gen.nextInt(horizon);
            shooter.setBounds(xl,yl,5,5);
            shooter.setVisible(true);
            int xv = gen.nextInt(-10 + 20);
            int yv = gen.nextInt(-10 + 20);
            shooter.setVelocity(xv,yv);
            shootingstar.play();
        }  
        public void after() {
            shooter.setVisible(false);
        }
    }       
    **private class ShootMany //this class added
    extends CHAction {
        public void step () {
            Random gen5;
            gen5 = new Random ();
            int rs = gen.nextInt(100 + 4900);
            sleep(rs);
            st = new Shoot();
            add(st);
            int rl = gen.nextInt(10 + 20);
            st.setLimit(rl);
            st.start(); 
        }
    }**
    public void init() {
        //background & colors cut for brevity

        //Random gen for stars w/ loop as seen above in previous code.

        }
        tw = new Twinkle();
        add(tw);
        tw.setLimit(1000);

        shooter = new CHOval();
        add(shooter,0);
        //shooter colors set here
        shooter.setVisible(false);

        **ShootMany stm;
        stm = new ShootMany();
        add(stm);
        stm.setLimit(5000);**

        //shooting star audio clip

        //house from container

    } // end of init 

    public void start( ) {
        tw.start();
        //st.start(); was removed from here
    }

    /***********************************************************
    //remainder cut for brevity
}

С изменениями, выделенными жирным шрифтом, я больше не могу видеть ни одну звезду, а тем более бесконечное число. Может кто-нибудь сообщить, что мне не хватает или я поставил вещи в неправильном месте? Опять же, я очень новичок в этом и понимаю, что могу делать что-то совершенно неправильно. Я только учусь.

...