Direction Game The Alien Direction Game System Modify the AlienDirection program
ID: 3851104 • Letter: D
Question
Direction Game
The Alien Direction Game System Modify the AlienDirection program in Listing 7.20 so that it displays 10 random numbers between 1 and 100 in random locations and as the alien moves, it eats the numbers and as the numbers are consumed, it shows the total. When a number is consumed, the consumed number disappears, while other numbers remain the same. When all the numbers are consumed, the game starts over.
My Code So far :
package alien;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class AlienDirection extends Application {
public final static int JUMP = 10;
private ImageView imageView;
@Override
public void start(Stage primaryStage)
{
Image alien = new Image("file:Small_alien.png");
imageView = new ImageView(alien);
imageView.setX(20);
imageView.setY(20);
Group root = new Group(imageView);
Scene scene = new Scene(root, 400, 200, Color.BLUE);
scene.setOnKeyPressed(this::processKeyPress);
primaryStage.setTitle("Alien Direction");
primaryStage.setScene(scene);
primaryStage.show();
}
public void processKeyPress(KeyEvent event)
{
switch (event.getCode())
{
case UP:
imageView.setY(imageView.getY() - JUMP);
break;
case DOWN:
imageView.setY(imageView.getY() + JUMP);
break;
case RIGHT:
imageView.setX(imageView.getX() + JUMP);
break;
case LEFT:
imageView.setX(imageView.getX() - JUMP);
break;
default:
break;
}
}
public static void main(String[] args) {
launch(args);
}
}
Explanation / Answer
keep the image name as "Small_alien.png".
keep the image available to program AlienDirection.java
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import java.util.Random;
import javax.swing.JOptionPane;
/**
*
* @author dhrgam
*/
public class AlienDirection extends Application {
public final static int JUMP = 10;
public final static int WIDTH = 400;
public final static int HEIGHT = 200;
private ImageView imageView;
private Text text[];
private Group root;
@Override
public void start(Stage primaryStage)
{
Image alien = new Image("Small_alien.png");
imageView = new ImageView(alien);
//imageView.setScaleX(0.5);
//imageView.setScaleY(0.5);
imageView.setX(20);
imageView.setY(20);
root = new Group(imageView);
ObservableList list = root.getChildren();
System.out.println("Initially List Size:"+list.size());
int x;
Random r = new Random();
text = new Text[10];
for(int i=0;i<10;i++){
text[i] = new Text();
//Setting font to the text
text[i].setFont(new Font(15));
text[i].setFill(Color.RED);
//setting the position of the text
x=10+r.nextInt(39)*10;
//System.out.print(x+",");
text[i].setX(x);
x=10+r.nextInt(19)*10;
//System.out.print(x+",");
text[i].setY(x);
//Setting the text to be added.
x=1+r.nextInt(100);
//System.out.print(x+",");
text[i].setText(""+x);
//Setting the text object as a node to the group object
list.add(text[i]);
}
System.out.println("After adding Text objects, ListSize:"+list.size());
Scene scene = new Scene(root, WIDTH, HEIGHT, Color.BLACK);
scene.setOnKeyPressed(this::processKeyPress);
primaryStage.setTitle("Alien Direction");
primaryStage.setScene(scene);
primaryStage.show();
}
//--------------------------------------------------------------------
// Modifies the position of the image view when an arrow key is
// pressed.
//--------------------------------------------------------------------
public void processKeyPress(KeyEvent event)
{
switch (event.getCode())
{
case UP:
imageView.setY(imageView.getY() - JUMP);
isConsumed();
break;
case DOWN:
imageView.setY(imageView.getY() + JUMP);
isConsumed();
break;
case RIGHT:
imageView.setX(imageView.getX() + JUMP);
isConsumed();
break;
case LEFT:
imageView.setX(imageView.getX() - JUMP);
isConsumed();
break;
default:
break; // do nothing if it's not an arrow key
}
}
public void isConsumed(){
for(int i=0;i<10;i++){
if(imageView.getX()==text[i].getX() && imageView.getY()==text[i].getY()){
root.getChildren().remove(text[i]);
System.out.println("consumed at:"+text[i].getX()+","+text[i].getY());
}
}
//if all text objects are consumed(removed from list), then list size will become 1. means all numbers are consumed.
if(root.getChildren().size()==1){
JOptionPane.showMessageDialog(null,"Game Completed!!!","Result",JOptionPane.WARNING_MESSAGE);
}
}
public static void main(String[] args) {
launch(args);
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.