The Code separated with lines of asterisks is where my issues begin, i can paint over the existing mines and numbers showing how many mines are near that square, is there a method in java that anyone knows of to "Undo" a
repaint()? if so pls help, beating my head against a wall for a couple hours now. Thankyou so much for any time and consideration in this matter.
-Sincerely, NoQuarter
repaint()? if so pls help, beating my head against a wall for a couple hours now. Thankyou so much for any time and consideration in this matter.
-Sincerely, NoQuarter
package mstake2; /** * * @author Kaleb */ import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.*; public class MSP2 extends JPanel { // instance variables - replace the example below with your own private int size = 750; private MSTake2 msGame; /** * Constructor for objects of class MondrianFrame */ public MSP2(MSTake2 msGame1) { setPreferredSize(new Dimension(size, size)); addMouseListener(new MSMouseListener()); msGame = msGame1; } public void paint(Graphics g) { g.setColor(Color.WHITE); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Color.BLACK); g.drawLine(0,50,750,50); g.drawLine(0,100,750,100); g.drawLine(0,150,750,150); g.drawLine(0,200,750,200); g.drawLine(0,250,750,250); g.drawLine(0,300,750,300); g.drawLine(0,350,750,350); g.drawLine(0,400,750,400); g.drawLine(0,450,750,450); g.drawLine(0,500,750,500); g.drawLine(0,550,750,550); g.drawLine(0,600,750,600); g.drawLine(0,650,750,650); g.drawLine(0,700,750,700); g.drawLine(0,750,750,750); g.drawLine(50,0,50,750); g.drawLine(100,0,100,750); g.drawLine(150,0,150,750); g.drawLine(200,0,200,750); g.drawLine(250,0,250,750); g.drawLine(300,0,300,750); g.drawLine(350,0,350,750); g.drawLine(400,0,400,750); g.drawLine(450,0,450,750); g.drawLine(500,0,500,750); g.drawLine(550,0,550,750); g.drawLine(600,0,600,750); g.drawLine(650,0,650,750); g.drawLine(700,0,700,750); g.drawLine(750,0,750,750); Font f = new Font("Times", Font.PLAIN, 30); g.setFont(f); FontMetrics fm = g.getFontMetrics(); int a = fm.getAscent(); int h = fm.getHeight(); for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { char curSquare = msGame.getSquare(i,j); String curSqStr = Character.toString(curSquare); int w = fm.stringWidth(curSqStr); g.drawString(curSqStr, 50*i + 25 - w/2, 50*j + 25 + a - h/2); int x = getX() / 50; int y = getY() / 50; if (msGame.getSquare(x,y) == ' ') { msGame.placeMines(); repaint(); ********************************************************************************* g.setColor(Color.GRAY); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Color.BLACK); g.drawLine(0,50,750,50); g.drawLine(0,100,750,100); g.drawLine(0,150,750,150); g.drawLine(0,200,750,200); g.drawLine(0,250,750,250); g.drawLine(0,300,750,300); g.drawLine(0,350,750,350); g.drawLine(0,400,750,400); g.drawLine(0,450,750,450); g.drawLine(0,500,750,500); g.drawLine(0,550,750,550); g.drawLine(0,600,750,600); g.drawLine(0,650,750,650); g.drawLine(0,700,750,700); g.drawLine(0,750,750,750); g.drawLine(50,0,50,750); g.drawLine(100,0,100,750); g.drawLine(150,0,150,750); g.drawLine(200,0,200,750); g.drawLine(250,0,250,750); g.drawLine(300,0,300,750); g.drawLine(350,0,350,750); g.drawLine(400,0,400,750); g.drawLine(450,0,450,750); g.drawLine(500,0,500,750); g.drawLine(550,0,550,750); g.drawLine(600,0,600,750); g.drawLine(650,0,650,750); g.drawLine(700,0,700,750); g.drawLine(750,0,750,750); ************************************************************** } } } } // INNER CLASS for a Mouse events: private class MSMouseListener implements MouseListener { @Override public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseClicked(MouseEvent e) { int x = e.getX() / 50; int y = e.getY() / 50; if (msGame.getSquare(x,y) == ' ' || msGame.getSquare(x,y) == '1' || msGame.getSquare(x,y) == '2' || msGame.getSquare(x,y) == '3' || msGame.getSquare(x,y) == '4' || msGame.getSquare(x,y) == '5' || msGame.getSquare(x,y) == '6' || msGame.getSquare(x,y) == '7' || msGame.getSquare(x,y) == '8') { msGame.setSquare(x,y, msGame.getCurPlayer()); repaint(); msGame.ComputerAI(x,y); } if(msGame.getSquare(x,y) == 'O'){ msGame.checkForGameEnd(); } } } }
package mstake2; import javax.swing.*; public class MSTake2 extends JFrame { // instance variables - replace the example below with your own private char curPlayer; private char[][] board; private int Mine; /** * Constructor for objects of class TicTacToe */ public MSTake2() { super("Mine Sweeper"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); board = new char[15][15]; // initialize board for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { board[i][j] = ' '; // blank char } } getContentPane().add(new MSP2(this)); pack(); curPlayer = 'O'; setLocationRelativeTo(null); setVisible(true); // Show the JFrame. } public boolean placeMines(){ if(curPlayer == 'O'){ randomPlacement(); curPlayer = 'X'; } return false; } public boolean randomPlacement(){ int x; int y; for(int i = 0; i < 14; i++){ x = (int) (Math.random()*11 + 2); y = (int) (Math.random()*11 + 2); if(board[x][y] == ' ' && board[x][y] != 'O') { board[x][y] = 'O'; if(i == 15){ return false; } } else if(board[x][y] == 'O'){ i = i - 1; } } for(int i = 1; i < 14; i++){ for(int j = 1; j < 14; j++){ Mine = 0; if(board[i][j]== ' '){ if(board[i-1][j-1] == 'O'){ Mine++; } if(board[i][j-1] == 'O'){ Mine++; } if(board[i+1][j-1] == 'O'){ Mine++; } if(board[i-1][j] == 'O'){ Mine++; } if(board[i+1][j] == 'O'){ Mine++; } if(board[i-1][j+1] == 'O'){ Mine++; } if(board[i][j+1] == 'O'){ Mine++; } if(board[i+1][j+1] == 'O'){ Mine++; } } if(board[i][j] == ' '){ if(Mine == 0){ board[i][j] = ' '; } if(Mine == 1){ board[i][j] = '1'; } if(Mine == 2){ board[i][j] = '2'; } if(Mine == 3){ board[i][j] = '3'; } if(Mine == 4){ board[i][j] = '4'; } if(Mine == 5){ board[i][j] = '5'; } if(Mine == 6){ board[i][j] = '6'; } if(Mine == 7){ board[i][j] = '7'; } if(Mine == 8){ board[i][j] = '8'; } } } } return true; } public void ComputerAI(int i, int j){ if(board[i][j]== 'X'){ if(board[i-1][j-1] == ' '){ board[i-1][j-1] = 'X'; } if(board[i][j-1] == ' '){ board[i][j-1] = 'X'; } if(board[i+1][j-1] == ' '){ board[i+1][j-1] = 'X'; } if(board[i-1][j] == ' '){ board[i-1][j] = 'X'; } if(board[i+1][j] == ' '){ board[i+1][j] = 'X'; } if(board[i-1][j+1] == ' '){ board[i-1][j+1] = 'X'; } if(board[i][j+1] == ' '){ board[i][j+1] = 'X'; } if(board[i+1][j+1] == ' '){ board[i+1][j+1] = 'X'; } } } public void resetBoard(){ for(int i = 0; i < 15; i++){ for(int j = 0; j < 15; j++){ board[i][j]=' '; } } } public char getCurPlayer() { return curPlayer; } public void switchPlayer() { if (curPlayer == 'X') { curPlayer = 'X'; } else { curPlayer = 'X'; } } public void setSquare(int x, int y, char c) { board[x][y] = c; } public char getSquare(int x, int y) { return board[x][y]; } public void printBoard() { for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { System.out.print(" " + board[i][j]); } System.out.println(); } } private boolean checkForWin(char p) { boolean win = false; // check row wins: for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { win = win || (board[i][j] == p); // check column wins: // win = win || (board[i][j] == p || board[i][j] == p && // board[i][j] != 'O'); } } return win; } private boolean checkFullBoard() { for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { if (board[i][j] == ' ') { return false; } } } return true; } public void checkForGameEnd(){ if(checkForWin('O')){ JOptionPane.showMessageDialog(this, "Game over, You Stepped on a Mine."); System.exit(0); } if (checkFullBoard()) { JOptionPane.showMessageDialog(this, "Game over"); System.exit(0); } } public static void main(String[] args) { MSTake2 newGame = new MSTake2(); //JOptionPane.showMessageDialog(newGame, "This is a test."); } }