Skip to content

Gabbynts/FP_OOP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FP_OOP

Repository for OOP Final Project using Java

Gabriella Natasya Br Ginting - 5025211081


Deskripsi

Project ini merupakan game dengan bahasa Java yang mengimplementasikan JavaFX sebagai penerapan GUI.
Game dengan nama CrashDodger ini merupakan game yang dirancang dengan konsep game mobil.
Game ini dimulai dengan pemain yang dapat memilih beberapa pilihan yaitu :

  • Play
  • Scores
  • Help
  • Credit
  • Exit

Untuk memulai permainan, pemain dapat memilih button play dan memilih mobil yang ingin dipakai untuk bermain. Setelah itu pemain dapat bermain dengan menghindari mobil yang berlawanan arah serta mendapatkan star .
Pada awal permainan pemain akan memiliki 3 nyawa untuk bermain, saat pemain menabrak mobil lain maka pemain akan kehilangan satu nyawanya. Namun, saat pemain mendapatkan star. Maka, point pemain akan bertambah. Sehingga, pemain harus bertahan dengan 3 nyawa untuk mendapatkan point yang tinggi.

Aspek OOP

Project ini diprogram dengan menerapkan aspek OOP, yaitu sebagai berikut:

  1. Casting/ Conversion
    src -> view -> ViewManager.java
String vol ="0.3";
double vol2 = Double.parseDouble(vol);
  1. Constructor
    src -> model -> RoadSeparator.java
public class RoadSeparator extends Pane {
	
	ObservableList<Node> list;
	List<Road> roadList;
	int dist;
	
	Timeline timeline = new Timeline();
	
	public RoadSeparator() {
		list = getChildren();
		setRoadSeparator();
		Rectangle clip = new Rectangle(0, 10, 40, 1110);
		setClip(clip);
		moveRoadSeperator();
	}
	
	public void setRoadSeparator() {
		Road roadSeparator;
		roadList = new ArrayList<>();
		
		for(int i = 0 ; i < 16 ; i++) {
			if(i % 2 == 0) {
				roadSeparator = new Road(0, i * 60, 10, 70);
				roadList.add(roadSeparator);
				list.add(roadSeparator);
			}
		}
		dist = list.size() - 1;
	}
	
	private void moveRoadSeperator() {
		KeyFrame keyFrame = new KeyFrame(Duration.millis(2),(event)->{
			for(int i = 0 ; i < list.size() ; i++) {
				list.get(i).setTranslateY(list.get(i).getTranslateY() + 1);
			}
			
			if(list.get(dist).getTranslateY() > 900) {
				list.get(dist).setTranslateY(-50);
				dist -= 1;
				if(dist < 0) {
					dist =  list.size() - 1;
				}
			}
		});
		
		timeline.getKeyFrames().add(keyFrame);
		timeline.setCycleCount(Timeline.INDEFINITE);
		timeline.play();
	}
}

  1. Overloading
extends
  1. Overriding
    src -> view -> ViewManager.java
exitButton.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent arg0) {
				try {
					CrashDodgerSounds.playSound(new URI(CLICK_BUTTON));
				} 
				catch(URISyntaxException e) {
					e.printStackTrace();
				}
				mainStage.close();
			}
			
		});
  1. Encapsulation
    src -> view -> ViewManager.java
public boolean getCheckButtonToStart() {
    return isCheckButtonToStart;
}

public void setCheckButtonToStart(boolean isCheckButtonToStart) {
	this.isCheckButtonToStart = isCheckButtonToStart;
}
  1. Inheritance
    src -> Model -> CrashDodgerSubScene.java
public class CrashDodgerSubScene extends SubScene {
	
	private final static String FONT_PATH = "src/model/resources/konvector_future.ttf";
	private final static String BACKGROUND_IMAGE = "model/resources/Information.png";
	
	private boolean isHidden;
	

	public CrashDodgerSubScene() {
		super(new AnchorPane(), 700, 700);
		prefWidth(700);
		prefHeight(700);
		
		BackgroundImage image = new BackgroundImage(new Image(BACKGROUND_IMAGE, 700, 700, false, true),
				BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, null);
		
		AnchorPane root2 = (AnchorPane) this.getRoot();
		
		root2.setBackground(new Background(image));
		
		isHidden = true;
		
		setLayoutX(1024);
		setLayoutY(180);
	}
	
	public void moveSubScene() {
		TranslateTransition transition = new TranslateTransition();
		transition.setDuration(Duration.seconds(0.3));
		transition.setNode(this);
		
		if(isHidden) {
			transition.setToX(-676);
			isHidden = false;
		}
		else {
			transition.setToX(0);
			isHidden = true;
		}
		
		transition.play();
	}
	
	public AnchorPane getPane() {
		return (AnchorPane) this.getRoot();
	}
	
}
  1. Polymorphism
file
  1. ArrayList
    src -> model -> RoadSeparator.java
Road roadSeparator;
roadList = new ArrayList<>();
  1. Exception Handling
    src -> view -> ViewManager.java
try {
	CrashDodgerSounds.playSound(new URI(CLICK_BUTTON));
} 
catch(URISyntaxException e) {
	e.printStackTrace();
}
  1. GUI

image

  1. Interface
    src -> model -> RoadSeparator.java
public RoadSeparator() {
	list = getChildren();
	setRoadSeparator();
	Rectangle clip = new Rectangle(0, 10, 40, 1110);
	setClip(clip);
	moveRoadSeperator();
}
  1. Abstract Class

  2. Generics

file
  1. Collection
    src -> model -> RoadSeparator.java
Road roadSeparator;
roadList = new ArrayList<>();

for(int i = 0 ; i < 16 ; i++) {
	if(i % 2 == 0) {
        roadSeparator = new Road(0, i * 60, 10, 70);
        roadList.add(roadSeparator);
list.add(roadSeparator);
	}
}
  1. Input Output
    src -> view -> ExitGame.java
public class ExitGame {
	public static boolean exitGame() {
		
		Alert alert = new Alert(AlertType.CONFIRMATION);
		alert.setHeaderText(null);
		alert.setContentText("Quit the Game?");
		if (alert.showAndWait() != Optional.of(ButtonType.CANCEL)) {
			return false;
		} 
		return true;
	}
}

link referensi https://www.youtube.com/watch?v=DkIuA5ZEZ_U&list=PL4wcbt63yAbdtY-GOeuRjIePfUsukSJZ9

link demo https://youtu.be/5668PkrtYC8

About

Repository for OOP Final Project using Java

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages