| | |
resetting paint graphics
Please support our Java advertiser: Programming Forums - DaniWeb Sister Site
Thread Solved |
•
•
Join Date: Jan 2008
Posts: 77
Reputation:
Solved Threads: 0
I am doing a game and I need to reset the graphics back to its original picture once a new game begins, however when I click the new game button, everything else resets but the graphics do not even though I called repaint. I have included the code for my main game panel(the new game buttons etc) and the game logic code with paint graphics.
This is my main game panel code.
Here is my game logic code with the paint graphics. My game buttons resets and works, I get a new random word too. Only thing that doesnt work is the graphics resetting to original.
This is my main game panel code.
Java Syntax (Toggle Plain Text)
public class MainPanel extends JPanel implements ActionListener{ private JButton newGame, quit; private JRadioButton onePlayer, twoPlayer; private JComboBox diff; private Hangman game = new Hangman(); public MainPanel (){ super(); //create menu panel JPanel menuPanel = new JPanel(); menuPanel.setBorder(BorderFactory.createTitledBorder("Menu")); menuPanel.setBackground(Color.orange); menuPanel.setPreferredSize(new Dimension(150, 550)); //create game display panel JPanel gamePanel = new JPanel(); gamePanel.setBorder(BorderFactory.createTitledBorder("Game Display")); gamePanel.setBackground(Color.white); gamePanel.setPreferredSize(new Dimension(400, 550)); //create game status panel JPanel statusPanel = new JPanel(); statusPanel.setBorder(BorderFactory.createTitledBorder("Game Status")); statusPanel.setBackground(Color.yellow); statusPanel.setPreferredSize(new Dimension(180, 350)); //main panel bg color setBackground(Color.black); //Text labels for game status JLabel difficulty = new JLabel("Difficulty: "); JLabel tries = new JLabel("Tries Remaining: " + (6 - game.getNumGuesses())); JLabel hint = new JLabel("Hint: " ); JLabel currLevel = new JLabel("Level: 1"); //create game menu buttons newGame = new JButton("New Game"); quit = new JButton("Quit"); //new game button newGame.setPreferredSize(new Dimension(100,20)); newGame.setToolTipText("Start New Game"); newGame.addActionListener(this); //quit button quit.setPreferredSize(new Dimension(100,20)); quit.setToolTipText("Exit game"); quit.addActionListener(this); //radio buttons for one/two player modes onePlayer = new JRadioButton ("One Player", true); twoPlayer = new JRadioButton ("Two Players"); onePlayer.addActionListener(this); twoPlayer.addActionListener(this); //group radio buttons ButtonGroup group = new ButtonGroup(); group.add (onePlayer); group.add (twoPlayer); //combo box for difficulty settings String[] level = {"Auto","Level 1", "Level 2", "Level 3"}; diff = new JComboBox (level); diff.setSelectedIndex(0); diff.addActionListener(this); //menu panel, buttons, box layout menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.PAGE_AXIS)); menuPanel.add (Box.createRigidArea(new Dimension (0, 5))); menuPanel.add (newGame); menuPanel.add (Box.createRigidArea(new Dimension (0, 10))); // menuPanel.add (difficulty); // menuPanel.add (diff); menuPanel.add (Box.createRigidArea(new Dimension (0, 10))); menuPanel.add (onePlayer); menuPanel.add (twoPlayer); menuPanel.add (Box.createRigidArea(new Dimension (0, 10))); menuPanel.add (quit); menuPanel.add (Box.createRigidArea(new Dimension (0, 10))); //game status panel with labels, box layout statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.PAGE_AXIS)); statusPanel.add (currLevel); statusPanel.add (Box.createRigidArea(new Dimension (0, 5))); statusPanel.add (hint); statusPanel.add (Box.createRigidArea(new Dimension (0, 5))); statusPanel.add (tries); statusPanel.add (Box.createVerticalStrut(320)); //nest panels in main panel gamePanel.add(game); menuPanel.add(statusPanel); add(menuPanel); add(gamePanel); game.repaint(); } /* * Action Listener for menu buttons. * */ public void actionPerformed(ActionEvent e) { if(e.getSource() == newGame){ game.resetGame(); game.repaint(); return; } if(e.getSource() == quit){ System.exit(1); } } }
Here is my game logic code with the paint graphics. My game buttons resets and works, I get a new random word too. Only thing that doesnt work is the graphics resetting to original.
Java Syntax (Toggle Plain Text)
public class Hangman extends JPanel implements ActionListener{ private boolean used[]; private String guessword; private int numguesses; private boolean finished; private Button a[]; private boolean won; private RandomWord rw = new RandomWord(); public Hangman(){ setPreferredSize(new Dimension(350, 350)); initgame(); repaint(); } public int getNumGuesses(){ return numguesses; } /* * initialise the game * */ public void initgame() { //initialise game variables rw.newGame(); //generate random word guessword = rw.getWord();//get the random word into word buffer won = false; finished = false; numguesses = 0; used = new boolean[26]; a = new Button[26]; StringBuffer buffer; //create keyboard buttons for (int i = 0; i <26; i++) { buffer = new StringBuffer(); buffer.append((char)(i+65)); a[i] = new Button(buffer.toString()); a[i].addActionListener(this); a[i].setEnabled(true); add(a[i]); } } /* * Paint Hangman picture * * */ @Override public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; //draw the hangman pole setBackground(Color.WHITE); g2.fillRect(10, 250, 150, 20); g2.fillRect(40,70,10,200); g2.fillRect(40,70,60,10); g2.setColor(Color.GRAY); g2.fillRect(95,70,5,25); //draw head g2.setColor(Color.MAGENTA); if (numguesses >=1 ) g2.drawOval(82,95,30,30); //draw body g2.setColor(Color.PINK); if (numguesses >=2 ) g2.drawLine(97,125,97,150); if (numguesses >=3 ) g2.drawLine(97,150,117,183); if (numguesses >=4 ) g2.drawLine(97,150,77,183); if (numguesses >=5 ) g2.drawLine(97,125,117,135); if (numguesses >=6 ) g2.drawLine(97,125,77,135); //fill up the used letters StringBuffer st = new StringBuffer(); for (int l=0; l<=25; l++) { if (used[l]) st.append((char)(l+65)); else st.append("-"); } g2.setColor(Color.BLUE); Font f = new Font("Times New Roman",Font.ITALIC,14); //display the used letters g2.setFont(f); g2.drawString(st.toString(),25,285); st.delete(0, 26); StringBuffer guessed = new StringBuffer(); Font ff = new Font("Times New Roman",Font.BOLD,24); g2.setColor(Color.BLACK); g2.setFont(ff); //display the hidden word as - and letters for (int mm = 0;mm < guessword.length();mm++) { if (used[(int)guessword.charAt(mm)-65]) guessed.append(guessword.charAt(mm)); else guessed.append("-"); } g2.drawString(guessed.toString(),75,230); guessed.delete(0, guessword.length()+1); if (numguesses >=6) {//more than 6 tries = lose g2.setColor(Color.WHITE); g2.fillRect(70, 200, 200, 30); g2.setColor(Color.BLACK); g2.drawString(guessword.toString(),75,230); Font fff = new Font("Times New Roman",Font.BOLD,36); g2.setFont(fff); g2.setColor(Color.RED); g2.drawString("You lose!",130,150);//display you lose finished = true;//game finish = true } if (won) {//if win game Font fff = new Font("Times New Roman",Font.BOLD,36); g2.setFont(fff); g2.setColor(Color.GREEN); g2.drawString("You Win!",130,150);//display you win finished = true;//game finish = true } repaint(); } /* * Action listener for key buttons * */ public void actionPerformed( ActionEvent ev) { for (int i = 0; i < 26; i++) { if (ev.getSource() == a[i]) { checker(i);//call check letter method a[i].setEnabled(false);//disable once pressed } } } /* * Check letter input from user * */ public void checker(int letter) { if (!finished) { boolean found = false; boolean wrong = false; if (!used[letter]) {//if not in the used letter array for (int mm = 0;mm < guessword.length(); mm++) { if (((char)(letter+65)) == guessword.charAt(mm)) { System.out.println((char)(letter+65)); found = true;//letter matching found = true } } if (!found)//if not matching numguesses++;//number of guesses used increased System.out.println(numguesses); } used[letter] = true;//set true when letter is used //if word not matching wrong = true for (int mm = 0;mm < guessword.length(); mm++) { if (!used[(int)(guessword.charAt(mm))-65]) wrong = true; } if (!wrong)//if word is not wrong win game won = true; repaint(); } } public void resetGame(){ //initialise game variables rw.newGame(); //generate random word guessword = rw.getWord();//get the random word into word buffer used = new boolean[26]; won = false; finished = false; numguesses = 0; //reset letter board for (int i = 0; i <26; i++) { a[i].setEnabled(true); } } }
•
•
Join Date: Sep 2008
Posts: 1,657
Reputation:
Solved Threads: 206
In your paint() method, call super.paintComponent(g). It will clear the screen. Alternatively, you could use this piece of code from inside your paintComponent method:
Java Syntax (Toggle Plain Text)
g.clearRect(0, 0, this.getWidth(), this.getHeight());
Last edited by BestJewSinceJC; May 12th, 2009 at 9:12 pm.
![]() |
Similar Threads
- Simple Paint Program concepts (Java)
- JFrame paint(), repaint() etc. (Java)
- Read an object from file and than paint it (Java)
- Object oriented design: Graphics editor (Java)
- functionality of board [code attached = please check this question] (Java)
- MY paint application (Java)
- calling a graphics method (Java)
Other Threads in the Java Forum
- Previous Thread: Help on arrays!!
- Next Thread: Help: iCal/vCal export
Views: 533 | Replies: 3
| Thread Tools | Search this Thread |
Tag cloud for Java
3d @param affinetransform android api apple applet application arc arguments array arrays automation binary bluetooth byte c# chat class classes click client code color compare component corrupted database detection draw eclipse error event exception file fractal game givemetehcodez graphics gui guitesting helpwithhomework html ide image input integer j2me java java.xls javaprojects jmf jni jpanel julia keytool linux list loop map method methods mobile netbeans newbie number object oracle pong print problem producer program programming project projectideas read recursion reflection replaysolutions rim scanner screen server set size sms socket sort sql string swing terminal test threads time transfer tree web windows






