0

定数

public final int DIMENSIONS = 4;
public final int MOVE_RIGHT = 1;
public final int MOVE_LEFT = 2;
public final int MOVE_UP = 3;
public final int MOVE_DOWN = 4;

主要

PuzzleFrame board;

void setup(){
  size(401,401);
  board = new PuzzleFrame();
  background(100);
}

void draw(){
  background(100);
  board.draw();
}

void keyPressed()
{
  if(key == CODED)
  {
    if(keyCode == RIGHT) board.moveTile(MOVE_RIGHT);
    if(keyCode == LEFT) board.moveTile(MOVE_LEFT);
    if(keyCode == UP) board.moveTile(MOVE_UP);
    if(keyCode == DOWN) board.moveTile(MOVE_DOWN);
  }
}

パズルフレームを作成するクラス

class PuzzleFrame{
  private Tile[][] puzzleFrame;
  private Tile[][] solvedPuzzleFrame;

  public PuzzleFrame()
  {
    puzzleFrame = new Tile[DIMENSIONS][DIMENSIONS];
    solvedPuzzleFrame = new Tile[DIMENSIONS][DIMENSIONS];
    int tileNumber = 1;
    for(int i = 0; i < DIMENSIONS; i++)
    {
      for(int j = 0; j < DIMENSIONS; j++)
      {
        puzzleFrame[i][j] = new Tile(tileNumber, j*100, i*100);
        solvedPuzzleFrame[i][j] = new Tile(tileNumber, j*100, i*100);
        tileNumber++;
      }
    }
  }

  public void draw()
  {
    for(int i = 0; i < DIMENSIONS; i++)
    {
      for(int j = 0; j < DIMENSIONS; j++)
      {
        puzzleFrame[i][j].draw();
      }
    }
  }

  public void moveTile(int side)
  {
    if(isMoveAllowed(side))
    {
      switch(side)
      {
        case MOVE_RIGHT:
        {
          for(int i = 0; i < DIMENSIONS; i++)
          {
            for(int j = 0; j < DIMENSIONS; j++)
            {
              if(puzzleFrame[i][j].getTileNumber() == DIMENSIONS*DIMENSIONS)
              {
                Tile tempTile = puzzleFrame[i][j];
                puzzleFrame[i][j] = puzzleFrame[i][j-1];
                puzzleFrame[i][j-1] = tempTile;
                System.out.println("right");
                break;
              }
            }
          }
          break;          
        }
      }
    }
  }

  private boolean isMoveAllowed(int side)
  {
    switch(side)
    {
      case MOVE_RIGHT:
      {
        for(int i = 0; i < DIMENSIONS; i++)
        {
          for(int j = 0; j < DIMENSIONS; j++)
          {
            if(puzzleFrame[i][j].getTileNumber() == DIMENSIONS*DIMENSIONS)
            {
              if(j > 0) return true;
            }
          }
        }
        break;
      }
    }
    return false;
  }

}

パズルフレームを作成するために使用されるタイルクラス

class Tile{

  private final int mTileNumber;
  private final int width = 100;
  private final int height = 100;
  private String number = "";
  private int xpos;
  private int ypos;
  private int xOffSet;
  private int yOffSet;

  public Tile(int tileNumber, int xpos, int ypos)
  {
    mTileNumber = tileNumber;
    number += tileNumber;
    textSize(64);
    this.xpos = xpos; this.ypos = ypos;
    xOffSet = 30;
    yOffSet = 70;
    if(mTileNumber >= 10)
    {
      xOffSet = 10;
    }
  }

  public void draw()
  {
    if(mTileNumber == DIMENSIONS*DIMENSIONS)
    {
    }
    else
    {
      strokeWeight(2);
      fill(255);
      rect(xpos, ypos, width, height);
      fill(0);
      text(number, xpos+xOffSet, ypos+yOffSet);
    }
  }

  public int getTileNumber()
  {
    return mTileNumber;
  }
}

15パズルゲームを作ろうとしていますが、右矢印キーを押すと、puzzleFrame配列の内容が変わりますが(デバッガーを介してEclipseでチェックしました)、描画された画像の処理は同じままです。今のところ、私のコードはタイルを右にスライドできる関数のみで構成されています。配列の内容が変わっても画像が変わらない理由は正直わかりません。

4

1 に答える 1

0

これで質問に答えられないことはわかっていますが、割り当て中にTileクラスでコンパイラエラーを回避するにはどうすればよいですか。mTileNumber= tileNumber mTileNumberを最終変数として宣言したので、何にも再割り当てできません。

于 2013-03-23T22:26:45.227 に答える