Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javafx.scene.layout.BackgroundImage;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.HashMap;
- import java.util.Map;
- public class RaceGui {
- // private final JLabel background;
- Race race;
- JFrame window, raceWindow;
- Container container, raceContainer;
- JPanel startPanel, startButtonPanel, customiseRacePanel, preview, nextBackPanel;
- JLabel startLabel, distanceLabel, lapsLabel, horsesLabel, trackSelectorLabel;
- Font startFont = new Font("American Typewriter", Font.BOLD, 60);
- Font normalFont = new Font("Arial", Font.BOLD, 20);
- Font isInfo = new Font("Arial", Font.BOLD, 20);
- Font showSymbol = new Font("", Font.PLAIN, 200);
- JButton startButton, customiseHorsesButton;
- JSlider distanceSlider, lapsSlider, horsesSlider;
- JPanel[] horsePanels;
- JButton[] horseButtons;
- JComboBox[] symbolSelectors;
- JTextField[] nameFields;
- JSlider[] confidenceSliders;
- private Map<String, ImageIcon> trackImages; // Store track images
- private JLayeredPane layeredPane;
- private JComboBox<String> trackComboBox;
- TitleScreenHandler tScreenHandler = new TitleScreenHandler();
- RaceCustomiseHandler rcHandler = new RaceCustomiseHandler();
- HorseCustomiseHandler horseHandler = new HorseCustomiseHandler();
- JPanel horseCustomizationPanel;
- BackgroundPanel mainBackground;
- JPanel storeSymbol;
- JLabel holdSymbol;
- JPanel storeInfo;
- JLabel holdName;
- JLabel holdConfidence;
- char displaySymbol;
- int displayConfidence;
- String displayName;
- Color transparentGreen = new Color(0, 255, 0, 4);
- int numHorses = 3;
- int laps;
- int distance;
- private String[] trackTypes = {"Grass", "Dirt", "Underwater", "Space", "Backrooms"};
- ImageIcon imageIcon;
- Image background, raceBackground;
- private char[] symbolChar = {
- '♘', 'ଲ', '♞', '♛', '♚', '♕', '♔', '❄', '❁', '➵',
- '✈', '☀', '☁', '⚽', '⚡', '⭐', '☕', '☂', '✿', '✤',
- '⓪', '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨',
- '⓿', '❶', '❷', '❸', '❹', '❺', '❻', '❼', '❽', '❾',
- '♠', '♥', '♦', '♣',
- '⌘', '⏎', '⌫', '♿', '⚜', '⚛'
- };
- private JPanel trackSelectorPanel;
- private JPanel horsePreview;
- private JPanel buttonPanel;
- private int laneNumber;
- private JPanel watchRace;
- private ImageIcon backgroundImage;
- public static void main(String[] args) {
- new RaceGui();
- }
- public RaceGui() {
- backgroundImage = new ImageIcon("Images/Background.jpg");
- trackImages = new HashMap<>();
- loadTrackImages();
- background = backgroundImage.getImage();
- window = new JFrame();
- window.setSize(800, 600);
- window.setLayout(null);
- window.getContentPane().setBackground(Color.black);
- window.setResizable(false);
- window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- window.setVisible(true);
- container = window.getContentPane();
- ImageIcon backgroundImageIcon = new ImageIcon("Images/Background.jpg"); // Ensure correct path
- Image backgroundImage = backgroundImageIcon.getImage();
- // Create the background panel with the loaded image
- BackgroundPanel backgroundPanel = new BackgroundPanel(backgroundImage, BackgroundPanel.SCALED);
- backgroundPanel.setLayout(new BorderLayout());
- window.setContentPane(backgroundPanel);
- window.setVisible(true);
- startPanel = new JPanel();
- startPanel.setBounds(100, 100, 600, 150);
- startPanel.setBackground(transparentGreen);
- startLabel = new JLabel("Off To The Races");
- startLabel.setFont(startFont);
- startLabel.setForeground(Color.white);
- startButtonPanel = new JPanel();
- startButtonPanel.setBounds(300, 400, 200, 100);
- startButtonPanel.setBackground(transparentGreen);
- startButton = new JButton("Start Customising");
- startButton.setForeground(Color.white);
- startButton.setFont(normalFont);
- startButton.addActionListener(tScreenHandler);
- startPanel.add(startLabel);
- startButtonPanel.add(startButton);
- // layeredPane.add(startPanel, Integer.valueOf(1));
- // layeredPane.add(startButtonPanel, Integer.valueOf(1));
- //
- // // Set the layered pane as the content pane
- // window.setContentPane(layeredPane);
- container.add(startPanel);
- container.add(startButtonPanel);
- }
- public void customiseRace() {
- startPanel.setVisible(false);
- startButtonPanel.setVisible(false);
- customiseRacePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
- customiseRacePanel.setLayout(new GridLayout(4, 1));
- trackSelectorPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
- customiseRacePanel.setBounds(0, 450, 550, 100); // Adjusted bounds
- trackSelectorPanel.setBounds(550, 450, 250, 100); // Adjusted bounds
- customiseRacePanel.setBackground(Color.blue);
- trackSelectorPanel.setBackground(Color.red);
- container.add(customiseRacePanel);
- container.add(trackSelectorPanel);
- customiseRacePanel.setVisible(true);
- trackSelectorPanel.setVisible(true);
- // Creating and configuring sliders
- distanceSlider = new JSlider(1, 20, 10);
- lapsSlider = new JSlider(1, 5, 1);
- horsesSlider = new JSlider(2, 6, 3);
- distanceSlider.setMajorTickSpacing(2);
- lapsSlider.setMajorTickSpacing(1);
- horsesSlider.setMajorTickSpacing(1);
- distanceLabel = new JLabel("Distance: 10");
- distanceLabel.setFont(normalFont);
- lapsLabel = new JLabel("Laps: 1");
- lapsLabel.setFont(normalFont);
- horsesLabel = new JLabel("Horses: 3");
- horsesLabel.setFont(normalFont);
- // Update labels dynamically
- distanceSlider.addChangeListener(e -> {
- distance = distanceSlider.getValue();
- distanceLabel .setText("Distance: " + distance);
- });
- lapsSlider.addChangeListener(e -> {
- laps = lapsSlider.getValue();
- lapsLabel.setText("Laps: " + laps);
- });
- horsesSlider.addChangeListener(e -> {
- numHorses = horsesSlider.getValue();
- horsesLabel.setText("Horses: " + numHorses);
- });
- System.out.println(numHorses);
- trackComboBox = new JComboBox<>(trackTypes);
- trackComboBox.addActionListener(new ColorChangeHandler());
- trackComboBox.setPreferredSize(new Dimension(150, 30));
- trackSelectorLabel = new JLabel("Select Track");
- customiseRacePanel.add(trackComboBox); // Add combo box to the panel
- // Adding components to the panel
- customiseRacePanel.add(distanceLabel);
- customiseRacePanel.add(distanceSlider);
- customiseRacePanel.add(lapsLabel);
- customiseRacePanel.add(lapsSlider);
- customiseRacePanel.add(horsesLabel);
- customiseRacePanel.add(horsesSlider);
- trackSelectorPanel.add(trackSelectorLabel);
- trackSelectorPanel.add(trackComboBox);
- // Button to proceed to horse customisation
- customiseHorsesButton = new JButton("Customise Horses");
- customiseHorsesButton.setPreferredSize(new Dimension(150, 30));
- customiseHorsesButton.addActionListener(rcHandler);
- trackSelectorPanel.add(customiseHorsesButton);
- preview = new JPanel();
- preview.setBackground(transparentGreen);
- preview.setBounds(100, 100, 600, 300); // Set bounds to cover the top part of the window
- container.add(preview);
- preview.setVisible(true);
- }
- public void customiseHorses() {
- Character[] symbols = new Character[symbolChar.length];
- for (int i = 0; i < symbolChar.length; i++) {
- symbols[i] = symbolChar[i]; // Auto-boxing char to Character
- }
- storeSymbol = new JPanel();
- storeInfo = new JPanel();
- holdSymbol = new JLabel(Character.toString(displaySymbol));
- holdName = new JLabel("Name: " + displayName );
- holdConfidence = new JLabel("Confidence: " + displayConfidence + "%");
- horseCustomizationPanel = new JPanel();
- horseCustomizationPanel.setLayout(new GridLayout(0, 1));
- horseCustomizationPanel.setBounds(450, 0, 400, 500);
- horseCustomizationPanel.setBackground(Color.lightGray);
- container.add(horseCustomizationPanel);
- horsePanels = new JPanel[numHorses];
- horseButtons = new JButton[numHorses];
- symbolSelectors = new JComboBox[numHorses];
- nameFields = new JTextField[numHorses];
- confidenceSliders = new JSlider[numHorses];
- nextBackPanel = new JPanel();
- nextBackPanel.setLayout(new GridLayout(0, 1));
- nextBackPanel.setBounds(500, 510, 300, 50);
- nextBackPanel.setBackground(Color.black);
- nextBackPanel.setVisible(true);
- container.add(nextBackPanel);
- String selectedTrack;
- for (int i = 0; i < numHorses; i++) {
- // Panel for each horse
- final int index = i;
- horsePanels[i] = new JPanel();
- horsePanels[i].setLayout(new FlowLayout());
- horsePanels[i].setBackground(Color.decode("#F0F0F0"));
- // Button to select horse
- horseButtons[i] = new JButton("Change Horse " + (i + 1));
- horseButtons[index].addActionListener(e -> {
- displayHorseSettings(e, index); // Pass the button index
- });
- horsePanels[i].add(horseButtons[i]);
- // Symbol selector
- symbolSelectors[i] = new JComboBox<>(symbols);
- symbolSelectors[i].setSelectedItem('♘'); // Default selection
- symbolSelectors[i].addActionListener(e -> {
- displaySymbol = (char) symbolSelectors[index].getSelectedItem(); // Use the captured index
- //System.out.println(displaySymbol);
- });
- horsePanels[i].add(symbolSelectors[i]);
- // Name field
- nameFields[i] = new JTextField(10);
- nameFields[i].addActionListener(e -> {
- displayName = nameFields[index].getText();; // Use the captured index
- displaySymbol = (char) symbolSelectors[index].getSelectedItem();
- //System.out.println(displayName);
- });
- horsePanels[i].add(nameFields[i]);
- // Confidence slider
- confidenceSliders[i] = new JSlider(1, 10, 5);
- confidenceSliders[i].setMajorTickSpacing(1);
- confidenceSliders[i].setPaintTicks(true);
- confidenceSliders[i].setPaintLabels(true);
- confidenceSliders[i].addChangeListener(e -> {
- // Use the captured index
- //System.out.println(displayConfidence);
- });
- //
- horsePanels[i].add(confidenceSliders[i]);
- // Add panel to horse customization panel
- horseCustomizationPanel.add(horsePanels[i]);
- }
- JButton startRaceButton = new JButton("Start Race");
- startRaceButton.setBackground(Color.green);
- startRaceButton.setForeground(Color.white);
- startRaceButton.setFont(normalFont);
- startRaceButton.addActionListener(horseHandler);
- nextBackPanel.add(startRaceButton);
- JButton goBackButton = new JButton("Back to Race Config");
- goBackButton.setBackground(Color.green);
- goBackButton.setBackground(Color.white);
- goBackButton.setFont(normalFont);
- goBackButton.addActionListener(tScreenHandler);
- nextBackPanel.add(goBackButton);
- container.add(storeSymbol);
- container.add(storeInfo);
- container.add(horseCustomizationPanel); // Re-add horse customization panel
- container.add(nextBackPanel); // Re-add next/back panel
- // Set visibility to true to ensure components are visible
- storeInfo.setVisible(true);
- storeSymbol.setVisible(true);
- horseCustomizationPanel.setVisible(true);
- nextBackPanel.setVisible(true);
- for (int i = 0; i < numHorses; i++) {
- horsePanels[i].setVisible(true);
- }
- // Show settings panel for first horse initially
- displayHorseSettings(new ActionEvent(horseButtons[0], ActionEvent.ACTION_PERFORMED, null), 0);
- }
- private void displayHorseSettings(ActionEvent e, int index) {
- // System.out.println("♘");
- for (int i = 0; i < numHorses; i++) {
- if (e.getSource() == horseButtons[i]) {
- displaySymbol = (char) symbolSelectors[index].getSelectedItem();
- displayConfidence = confidenceSliders[index].getValue();
- displayName = nameFields[index].getText();
- holdSymbol.setText(Character.toString(displaySymbol));
- holdSymbol.setFont(showSymbol);
- holdName.setText("Name: " + displayName );
- holdConfidence.setText("Confidence: " + displayConfidence * 10 + "%");
- holdName.setFont(isInfo);
- holdConfidence.setFont(isInfo);
- //horsePreview.setBounds(50, 100, 350, 350);
- storeSymbol.setBounds(50, 100, 350, 250);
- storeInfo.setBounds(50, 350, 350, 100);
- storeSymbol.setBackground(Color.orange);
- storeInfo.setBackground(Color.red);
- storeInfo.setLayout(new GridLayout(0, 1));
- storeInfo.add(holdName);
- storeInfo.add(holdConfidence);
- storeSymbol.add(holdSymbol);
- }
- }
- }
- private void loadTrackImages() {
- // Load images for each track type
- trackImages.put("Grass", new ImageIcon("Images/Grass.jpg"));
- trackImages.put("Dirt", new ImageIcon("Images/Dirt.jpg"));
- trackImages.put("Underwater", new ImageIcon("Images/Underwater.jpg"));
- trackImages.put("Space", new ImageIcon("Images/Space.jpg"));
- trackImages.put("Backrooms", new ImageIcon("Images/Backrooms.jpg"));
- trackImages.put("Background", new ImageIcon("Images/Background.jpg"));
- }
- private void updatePreview(String trackType) {
- imageIcon = trackImages.get(trackType);
- if (imageIcon != null) {
- // Scale the image to fit the panel while maintaining aspect ratio
- Image scaledImage = imageIcon.getImage().getScaledInstance(preview.getWidth(), preview.getHeight(), Image.SCALE_SMOOTH);
- preview.removeAll(); // Clear existing content
- preview.add(new JLabel(new ImageIcon(scaledImage))); // Add scaled image to preview
- preview.revalidate(); // Refresh the panel
- preview.repaint(); // Redraw the panel
- }
- }
- public void beginRace() {
- customiseRacePanel.setVisible(false);
- nextBackPanel.setVisible(false);
- container.setVisible(false);
- raceWindow = new JFrame();
- raceWindow.setSize(800, 600);
- raceWindow.setLayout(null);
- raceWindow.getContentPane().setBackground(Color.black);
- raceWindow.setResizable(false);
- raceWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- raceWindow.setVisible(true);
- raceContainer = raceWindow.getContentPane();
- // Create a panel to display the race
- watchRace = new BackgroundPanel(background, BackgroundPanel.SCALED){
- @Override
- protected void paintComponent(Graphics g) {
- // Call the superclass to ensure other Swing components are painted
- super.paintComponent(g);
- // Draw the background image first
- if (watchRace.getBackground() != null) {
- System.out.println(backgroundImage);
- g.drawImage(
- backgroundImage.getImage().getScaledInstance(getWidth(), getHeight(), Image.SCALE_SMOOTH),
- 0,
- 0,
- this
- );
- }
- // Now draw other content, such as the race
- if (race != null) {
- race.paintRace(g); // Draw the race content on top
- }
- }
- };
- watchRace.setBounds(50, 50, 700, 380); // Set the race panel size
- raceContainer.add(watchRace);
- if(imageIcon == null){
- //System.out.println("No image selected, proceeding with basics");
- imageIcon = trackImages.get("Grass");
- }
- race = new Race(distance, laps, watchRace, imageIcon); // Initialize the race with the panel
- for (int i = 0; i < numHorses; i++) {
- Character symbol = (Character) symbolSelectors[i].getSelectedItem(); // Get the horse symbol
- double confidence = (double) confidenceSliders[i].getValue() / 10;
- String name = nameFields[i].getText(); // Get the horse name
- Horse horse = new Horse(symbol, name, confidence); // Create the horse
- race.addHorse(horse); // Add to the race
- }
- //System.out.println(imageIcon);
- race.startRace(); // Start the race
- }
- public class TitleScreenHandler implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- if(horseCustomizationPanel != null){
- storeInfo.setVisible(false);
- storeSymbol.setVisible(false);
- horseCustomizationPanel.setVisible(false);
- nextBackPanel.setVisible(false);}
- customiseRace();
- }
- }
- public class RaceCustomiseHandler implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- preview.setVisible(false);
- customiseRacePanel.setVisible(false);
- trackSelectorPanel.setVisible(false);
- customiseHorses();
- }
- }
- public class HorseCustomiseHandler implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- beginRace();
- }
- }
- private class ColorChangeHandler implements ActionListener {
- @Override
- public void actionPerformed(ActionEvent e) {
- String selectedTrack = (String) trackComboBox.getSelectedItem();
- updatePreview(selectedTrack); // Update the preview with the new image
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment