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