package com.charlesmadere.android.classygames;
import android.content.res.Resources;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.charlesmadere.android.classygames.models.Person;
import com.charlesmadere.android.classygames.models.games.Coordinate;
import com.charlesmadere.android.classygames.models.games.GenericPiece;
import com.charlesmadere.android.classygames.models.games.Position;
import com.charlesmadere.android.classygames.models.games.checkers.Board;
import com.charlesmadere.android.classygames.models.games.checkers.Piece;
import com.charlesmadere.android.classygames.views.PositionView;
import org.json.JSONException;
import org.json.JSONObject;
public final class CheckersGameFragment extends GenericGameFragment
{
/**
* Bitmap representing the opponent's normal piece.
*/
private BitmapDrawable opponentNormal;
/**
* Bitmap representing the opponent's king piece.
*/
private BitmapDrawable opponentKing;
/**
* Bitmap representing the player's normal piece.
*/
private BitmapDrawable playerNormal;
/**
* Bitmap representing the player's king piece.
*/
private BitmapDrawable playerKing;
public static CheckersGameFragment newInstance(final String gameId, final byte whichGame, final Person person)
{
final Bundle arguments = prepareArguments(gameId, whichGame, person);
final CheckersGameFragment fragment = new CheckersGameFragment();
fragment.setArguments(arguments);
return fragment;
}
@Override
protected void createOptionsMenu(final Menu menu, final MenuInflater inflater)
{
}
@Override
protected boolean optionsItemSelected(final MenuItem item)
{
return super.onOptionsItemSelected(item);
}
@Override
protected void flush(final GenericPiece piece, final PositionView positionView)
{
switch (piece.getType())
{
case Piece.TYPE_NORMAL:
if (piece.isTeamPlayer())
{
positionView.setImageDrawable(playerNormal);
}
else
{
positionView.setImageDrawable(opponentNormal);
}
break;
case Piece.TYPE_KING:
if (piece.isTeamPlayer())
{
positionView.setImageDrawable(playerKing);
}
else
{
positionView.setImageDrawable(opponentKing);
}
break;
}
}
@Override
protected String getDefaultPlayersPieceColor()
{
return getString(R.string.green);
}
@Override
protected String getDefaultOpponentsPieceColor()
{
return getString(R.string.orange);
}
@Override
protected int getGameView()
{
return R.layout.checkers_and_chess_game_fragment;
}
@Override
protected int getLoadingText()
{
return R.string.loading_checkers_game_against_x;
}
@Override
protected int getSettingsKeyForPlayersPieceColor()
{
return R.string.settings_key_players_checkers_piece_color;
}
@Override
protected int getSettingsKeyForOpponentsPieceColor()
{
return R.string.settings_key_opponents_checkers_piece_color;
}
@Override
protected void initNewBoard() throws JSONException
{
board = new Board();
}
@Override
protected void loadBluePieceResources(final Resources res, final boolean isPlayersColor)
{
if (isPlayersColor)
{
playerNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_blue);
playerKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_blue);
}
else
{
opponentNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_blue);
opponentKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_blue);
}
}
@Override
protected void loadGreenPieceResources(final Resources res, final boolean isPlayersColor)
{
if (isPlayersColor)
{
playerNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_green);
playerKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_green);
}
else
{
opponentNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_green);
opponentKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_green);
}
}
@Override
protected void loadOrangePieceResources(final Resources res, final boolean isPlayersColor)
{
if (isPlayersColor)
{
playerNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_orange);
playerKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_orange);
}
else
{
opponentNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_orange);
opponentKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_orange);
}
}
@Override
protected void loadPinkPieceResources(final Resources res, final boolean isPlayersColor)
{
if (isPlayersColor)
{
playerNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_pink);
playerKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_pink);
}
else
{
opponentNormal = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_normal_pink);
opponentKing = (BitmapDrawable) res.getDrawable(R.drawable.piece_checkers_king_pink);
}
}
@Override
protected void onBoardClick(final PositionView positionCurrent)
{
if (board.isBoardLocked())
{
clearSelectedPositions();
}
else
{
final Coordinate coordinateCurrent = positionCurrent.getCoordinate();
final Position current = board.getPosition(coordinateCurrent);
if (current.hasPiece() && current.getPiece().isTeamPlayer())
{
positionCurrent.select();
}
else
{
clearSelectedPositions();
}
}
}
@Override
protected void onBoardClick(final PositionView positionPrevious, final PositionView positionCurrent)
{
if (!board.isBoardLocked())
{
final Coordinate coordinatePrevious = positionPrevious.getCoordinate();
final Position previous = board.getPosition(coordinatePrevious);
positionPrevious.unselect();
final Coordinate coordinateCurrent = positionCurrent.getCoordinate();
final Position current = board.getPosition(coordinateCurrent);
if (current.hasPiece())
{
clearSelectedPositions();
}
else
{
positionCurrent.select();
if (board.move(previous, current))
{
flush();
getSherlockActivity().supportInvalidateOptionsMenu();
if (board.isBoardLocked())
{
clearSelectedPositions();
}
}
else
{
clearSelectedPositions();
}
}
}
}
@Override
protected void resumeOldBoard(final JSONObject boardJSON) throws JSONException
{
board = new Board(boardJSON);
}
}