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