Stap 7: Invulling van het spel: ik
Op dit moment zijn alle klassen hebt gemaakt; je hoeft alleen te diepen TopClass en PlayGameScreen. Beginnend met de TopClass, zullen we de GUI voltooien door afwerking van de createContentPane() methode, evenals het toevoegen van de ActionListener.
In inhoud deelvenster maken, eerst zetten we de topPanel de achtergrondkleur op zwart omdat wanneer wij van het spel scherm aan het begin van een ronde vervagen, het topPanel dat wordt weergegeven. Vervolgens maken we een OverlayLayout, dat gunstig is omdat wij kunnen ervoor zorgen dat de knop is op de top van de grafische paneel, die anders niet haalbaar is. Na dit, we instantiëren de knop, een globale variabele, een paar van haar instellingen wijzigen, toevoegen van een ActionListener, dan de knop toevoegen aan topPanel. Ten slotte instantiëren we onze globale PlayGameScreen variabele, passeren in de schermbreedte, schermhoogte en een Boolean-waarde die aangeeft dat we willen het splash-scherm.
Als onderdeel van de TopClass met ActionListener, die we willen maken van de openbare methode actionPerformed(ActionEvent e). Dit laat ons toe de mogelijkheid voor het verwerken van een actie die heeft plaatsgevonden (dat wil zeggen de knop wordt geklikt).
import java.awt.Dimension; import java.awt.Font; import java.awt.Image; import java.awt.Color; import java.awt.LayoutManager; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class TopClass implements ActionListener { //global constant variables private static final int SCREEN_WIDTH = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth(); private static final int SCREEN_HEIGHT = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight(); //global variables //global swing objects private JFrame f = new JFrame("Flappy Bird Redux"); private JButton startGame; private JPanel topPanel; //declared globally to accommodate the repaint operation and allow for removeAll(), etc. //other global objects private static TopClass tc = new TopClass(); private static PlayGameScreen pgs; //panel that has the moving background at the start of the game /** * Default constructor */ public TopClass() { } /** * Main executable method invoked when running .jar file * args */ public static void main(String[] args) { //build the GUI on a new thread javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { tc.buildFrame(); //create a new thread to keep the GUI responsive while the game runs Thread t = new Thread() { public void run() { //run the game here } }; t.start(); } }); } /** * Method to construct the JFrame and add the program content */ private void buildFrame() { Image icon = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("resources/blue_bird.png")); f.setContentPane(createContentPane()); f.setResizable(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setAlwaysOnTop(false); f.setVisible(true); f.setMinimumSize(new Dimension(SCREEN_WIDTH*1/4, SCREEN_HEIGHT*1/4)); f.setExtendedState(JFrame.MAXIMIZED_BOTH); f.setIconImage(icon); f.addKeyListener(this); } private JPanel createContentPane() { topPanel = new JPanel(); //top-most JPanel in layout hierarchy topPanel.setBackground(Color.BLACK); //allow us to layer the panels: LayoutManager overlay = new OverlayLayout(topPanel); topPanel.setLayout(overlay); //Start Game JButton startGame = new JButton("Start Playing!"); startGame.setBackground(Color.BLUE); startGame.setForeground(Color.WHITE); startGame.setFocusable(false); startGame.setFont(new Font("Calibri", Font.BOLD, 42)); startGame.setAlignmentX(0.5f); //center horizontally on-screen startGame.setAlignmentY(0.5f); //center vertically on-screen startGame.addActionListener(this); topPanel.add(startGame); //must add last to ensure button's visibility pgs = new PlayGameScreen(SCREEN_WIDTH, SCREEN_HEIGHT, true); //true --> we want pgs to be the splash screen topPanel.add(pgs); return topPanel; } /** * Implementation for action events */ public void actionPerformed(ActionEvent e) { if(e.getSource() == startGame) { //do something } } }