P003 -- Minesweeper

Please restrict discussions in this forum to project related topics.

P003 -- Minesweeper

Postby DrJump » Tue Mar 30, 2010 10:16 am

Have you ever played Minesweeper? It's a cute little game which comes within a certain Operating System which name we can't really remember. Well, the goal of the game is to find where are all the mines within a MxN field. To help you, the game shows a number in a square which tells you how many mines there are adjacent to that square. For instance, supose the following 4x4 field with 2 mines (which are represented by an * character):

Code: Select all
*...
....
.*..
....


If we would represent the same field placing the hint numbers described above, we would end up with:

Code: Select all
*100
2210
1*10
1110


As you may have already noticed, each square may have at most 8 adjacent squares.

The Input

The input will consist of an arbitrary number of fields. The first line of each field contains two integers n and m (0 < n,m <= 100) which stands for the number of lines and columns of the field respectively. The next n lines contains exactly m characters and represent the field. Each safe square is represented by an "." character (without the quotes) and each mine square is represented by an "*" character (also without the quotes). The first field line where n = m = 0 represents the end of input and should not be processed.
The Output

For each field, you must print the following message in a line alone:

Field #x:

Where x stands for the number of the field (starting from 1). The next n lines should contain the field with the "." characters replaced by the number of adjacent mines to that square. There must be an empty line between field outputs.
Sample Input

Code: Select all
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0


Sample Output

Code: Select all
Field #1:
*100
2210
1*10
1110

Field #2:
**100
33200
1*100
DrJump
 
Posts: 19
Joined: Sun Mar 07, 2010 6:08 pm

Re: P003 -- Minesweeper

Postby Kat Avila » Thu Sep 23, 2010 6:26 pm

This is what I got. :)


import java.util.Scanner;
/*
* KCCMain.java
* Programming shell to start us out with at King's Coding Club
*/

public class KCCMain
{
/* Scanner.java is in the Java Class Library and you can look it up to see how to use it
* but for brevity here are some of the methods:
*
* boolean hasNext() Returns true if this scanner has another token in its input
* boolean nextBoolean() Scans next token of the input into a boolean value and returns it
* double nextDouble() Scans next token of the input into a double value and returns it
* float nextFloat() Scans next token of the input into a float value and returns it
* int nextInt() Scans next token of the input into a int value and returns it
* String nextLine() Advances the scanner past the current line and
* returns the input that was skipped
*/
Scanner input;

public KCCMain()
{
input = new Scanner(System.in);
}

// entry point for running
public static void main(String args[])
{
KCCMain program = new KCCMain();
program.run();
}

// your solutions should begin in this method
public void run()
{
// your program here
boolean finished = false;
int count = 0;
do{
int rows = input.nextInt();
int cols = input.nextInt();
input.nextLine();
System.err.println("dimensions: " + rows + " " + cols);
if (rows == 0 && cols == 0){
finished = true;
}else{
count++;
char[][] field = new char[rows][cols];
for ( int i = 0; i < rows; i++){
String character = input.nextLine();
System.err.println(character);
for (int j = 0; j < cols; j++){
field[i][j] = character.charAt(j);

}
}
//print to check

//for (int i = 0; i < field.length; i++){
// for(int j = 0; j < field[i].length; j++){
// System.out.print(field[i][j]);
//}
//System.out.println();
//}
//print the actual field w/ numbers
int numbers[][] = new int[rows][cols];
for (int i = 0; i < rows; i++){
for (int j = 0; j < cols; j++){
if(field[i][j] == '*'){
numbers[i][j] = -1;
}else{
numbers[i][j] = 0;
}
}
}
for (int i = 0; i < rows; i++){
for (int j = 0; j < cols; j++){
if(numbers[i][j] == -1){
if ((i-1 >= 0 && i-1 < rows) && (j-1 >= 0 && j-1 < cols) && numbers[i-1][j-1] != -1) {
numbers[i-1][j-1]++;
}
if ((i-1 >= 0 && i-1 < rows) && numbers[i-1][j] != -1){
numbers[i-1][j]++;
}
if ((i-1 >= 0 && i-1 < rows) && (j+1 >= 0 && j+1 < cols) && numbers[i-1][j+1] != -1){
numbers[i-1][j+1]++;
}
if ((j-1 >= 0 && j-1 < cols) && numbers[i][j-1] != -1){
numbers[i][j-1]++;
}
if ((j+1 >= 0 && j+1 < cols) && numbers[i][j+1] != -1){
numbers[i][j+1]++;
}
if ((i+1 >= 0 && i+1 < rows) && (j-1 >= 0 && j-1 < cols) && numbers[i+1][j-1] != -1){
numbers[i+1][j-1]++;
}
if ((i+1 >= 0 && i+1 < rows) && numbers[i+1][j] != -1){
numbers[i+1][j]++;
}
if ((i+1 >= 0 && i+1 < rows) && (j+1 >= 0 && j+1 < cols) && numbers[i+1][j+1] != -1){
numbers[i+1][j+1]++;
}
}
}
}
System.out.println("Field #" + count);
for (int i = 0; i < numbers.length; i++){
for(int j = 0; j < numbers[i].length; j++){
if(numbers[i][j] == -1){
System.out.print('*');
}else{
System.out.print(numbers[i][j]);
}
}
System.out.println();
}
}
}while(finished == false);
}

// You can insert more classes or methods here if you want.
}
Kat Avila
 
Posts: 1
Joined: Tue Sep 07, 2010 12:23 pm


Return to Problems

Who is online

Users browsing this forum: No registered users and 1 guest

cron