Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

Problem unpainting squares to reveal underneath

$
0
0
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

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.");
    }
}


Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>