Jeu de Tableau Multidimensionnel-Java


Bonjour j'essaie de construire un petit jeu en Java mais j'ai de légères difficultés, j'utilise un tableau multidimensionnel et je le remplis de nombres à partir de 0. L'utilisateur choisit le numéro vers lequel il veut aller, puis ce numéro/cellule lui est appliqué 00, puis le tableau multidimensionnel s'affiche voici mon code (je suis une recrue);

import java.util.*;
public class showMap{

    private int rows;
    private int columns;
    private int counter = 0;
    private int counter1 = 0;
    private int sp1;
    private int sp2;
    private int passedval = 0;

    public showMap(){
        System.out.println("Enter Height");
        Scanner input = new Scanner(System.in);
        int i = input.nextInt();

        System.out.println("Enter Width");
        int x = input.nextInt();

        showMap(createaMap(i,x));

        System.out.println("You Start At 0");
        System.out.println("Pick the number you want to go to");

        passedval = input.nextInt();

        //spliting(passedval);

        showMap(createaMap(i,x));


    }
    public int[][] createaMap(int x,int y){
        rows = x;
        columns = y;

        int[][] map = new int[rows][columns];

        return map;
    }


    public int[][] showMap(int[][] maps)
    {
    if(passedval == 0)
        {
            for(int x=0;x<rows;x++)
            {
                for(int y=0;y<columns;y++)
                {
                    maps[x][y] = counter;
                    counter++;
                }
            }
        }else
            {
                for(int q=0;q<rows;q++)
                {
                    for(int x=0;x<columns;x++)
                    { //PROBLEM HERE!

                        if(maps[q][x] == passedval)
                        {
                            maps[q][x]= 00;
                            sp1 = q;
                            sp2 = x;
                        }
                    }
                }
            }

            for(int q=0;q<rows;q++)
            {
                for(int x=0;x<columns;x++)
                {
                    System.out.printf("%-2d",maps[q][x]);
                    System.out.print("|");
                }
                System.out.println("");
            }

            return maps;
    }

}

Voulez ressembler?

O|1|2|3|4|
5|6|7|8|9|

Sélectionnez un nombre? - 1

O|00|2|3|4|
5|6|7|8|9|
Author: Madhawa Priyashantha, 2015-07-01

1 answers

J'ai d'abord cassé votre programme en petits morceaux:

D'abord, vous créez votre carte:

private static MapData createMap( Scanner scanner )
{
    System.out.println( "Enter Height" );
    int rows = scanner.nextInt();

    System.out.println( "Enter Width" );
    int columns = scanner.nextInt();

    int[][] map = new int[rows][columns];
    MapData data = new MapData( rows, columns, map );
    return data;
}

MapData est un simple objet de stockage:

public class MapData
{
    private int     mapRows;
    private int     mapColumns;
    private int[][] map;

    public MapData( int mapRows, int mapColumns, int[][] map )
    {
         this.mapRows = mapRows;
         this.mapColumns = mapColumns;
         this.map = map;
    }

    public int getMapRows()
    {
         return mapRows;
    }

    public int getMapColumns()
    {
        return mapColumns;
    }

    public int[][] getMap()
    {
        return map;
    }
}

Ensuite, vous l'initialisez:

private static void initializeMap( MapData mapData )
{
    int rows = mapData.getMapRows();
    int columns = mapData.getMapColumns();
    int[][] map = mapData.getMap();

    int counter = 0;
    for ( int x = 0; x < rows; x++ )
    {
        for ( int y = 0; y < columns; y++ )
        {
             map[x][y] = counter;
             counter++;
        }
    }
}

Si vous voulez faire un pas, vous mettez à jour votre carte:

private static void takeAStep( Scanner scanner, MapData mapData )
{
    System.out.println( "Pick the number you want to go to" );
    int steppedTile = scanner.nextInt();
    updateMap( mapData, steppedTile );
}

private static void updateMap( MapData mapData, int steppedTile )
{
    int rows = mapData.getMapRows();
    int columns = mapData.getMapColumns();
    int[][] map = mapData.getMap();

    for ( int q = 0; q < rows; q++ )
    {
        for ( int x = 0; x < columns; x++ )
        {
            if ( map[q][x] == steppedTile )
            {
                map[q][x] = 0;
            }
        }
   }
}

Et vous voulez dessiner la carte:

private static void drawMap( MapData mapData )
{
    int rows = mapData.getMapRows();
    int columns = mapData.getMapColumns();
    int[][] map = mapData.getMap();

    for ( int q = 0; q < rows; q++ )
    {
        for ( int x = 0; x < columns; x++ )
        {
            System.out.printf( "%-2d", map[q][x] );
            System.out.print( "|" );
        }
            System.out.println( "" );
    }
}

Maintenant, vous pouvez appeler les méthodes dans l'ordre que vous voulez:

public static void main( String[] args )
{
    Scanner scanner = new Scanner( System.in );
    MapData mapData = createMap( scanner );

    initializeMap( mapData );
    drawMap( mapData );
    System.out.println();
    System.out.println( "You Start At 0" );

    takeAStep( scanner, mapData );
    drawMap( mapData );
    System.out.println();

    takeAStep( scanner, mapData );
    drawMap( mapData );
}

Comme le programme est, j'obtiens la sortie suivante:

Enter Height
2
Enter Width
4
0 |1 |2 |3 |
4 |5 |6 |7 |

You Start At 0
Pick the number you want to go to
2
0 |1 |0 |3 |
4 |5 |6 |7 |

Pick the number you want to go to
5
0 |1 |0 |3 |
4 |0 |6 |7 |

À mes yeux, votre logique est bonne. À casser votre le code dans de petits modules aide beaucoup à garder une trace de ce qui se passe.

Si vous voulez imprimer un "00" au lieu d'un 0 - vous pouvez penser à utiliser un tableau de chaînes au lieu de int.

 1
Author: Rhayene, 2015-07-03 09:39:38