mirror of
https://github.com/danbee/chess
synced 2025-03-04 08:39:06 +00:00
Render the board correctly for the black player
This commit is contained in:
parent
03b974be9e
commit
2f1411f075
@ -2,7 +2,7 @@ import React from "react";
|
|||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import $ from "jquery";
|
import $ from "jquery";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { setBoard, setGameId } from "../store/actions";
|
import { setBoard, setPlayer, setGameId } from "../store/actions";
|
||||||
|
|
||||||
import ChessBoardSquare from "./chess-board-square";
|
import ChessBoardSquare from "./chess-board-square";
|
||||||
|
|
||||||
@ -13,7 +13,10 @@ class ChessBoard extends React.Component {
|
|||||||
store.dispatch(setGameId(gameId));
|
store.dispatch(setGameId(gameId));
|
||||||
|
|
||||||
$.ajax({ method: "GET", url: `/api/games/${gameId}` })
|
$.ajax({ method: "GET", url: `/api/games/${gameId}` })
|
||||||
.then((data) => store.dispatch(setBoard(data)));
|
.then((data) => {
|
||||||
|
store.dispatch(setBoard(data.board));
|
||||||
|
store.dispatch(setPlayer(data.player));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBoard() {
|
getBoard() {
|
||||||
@ -21,11 +24,16 @@ class ChessBoard extends React.Component {
|
|||||||
return store.getState().board;
|
return store.getState().board;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getPlayer() {
|
||||||
|
const { store } = this.props;
|
||||||
|
return store.getState().player;
|
||||||
|
}
|
||||||
|
|
||||||
renderFiles(rankId) {
|
renderFiles(rankId) {
|
||||||
const { store } = this.props;
|
const { store } = this.props;
|
||||||
const rank = this.getBoard()[rankId];
|
const rank = this.getBoard()[rankId];
|
||||||
|
|
||||||
return _.map(Object.keys(rank).sort(), (fileId) => {
|
return _.map(this.files(rank), (fileId) => {
|
||||||
return (
|
return (
|
||||||
<ChessBoardSquare
|
<ChessBoardSquare
|
||||||
file={fileId}
|
file={fileId}
|
||||||
@ -41,7 +49,7 @@ class ChessBoard extends React.Component {
|
|||||||
renderRanks() {
|
renderRanks() {
|
||||||
const board = this.getBoard();
|
const board = this.getBoard();
|
||||||
|
|
||||||
return _.map(Object.keys(board).reverse(), (rankId) => {
|
return _.map(this.ranks(), (rankId) => {
|
||||||
return (
|
return (
|
||||||
<tr className="board-rank" key={rankId}>
|
<tr className="board-rank" key={rankId}>
|
||||||
{this.renderFiles(rankId)}
|
{this.renderFiles(rankId)}
|
||||||
@ -50,6 +58,29 @@ class ChessBoard extends React.Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
files(rank) {
|
||||||
|
const player = this.getPlayer();
|
||||||
|
|
||||||
|
switch (player) {
|
||||||
|
case 'white':
|
||||||
|
return Object.keys(rank).sort();
|
||||||
|
case 'black':
|
||||||
|
return Object.keys(rank).sort().reverse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ranks() {
|
||||||
|
const board = this.getBoard();
|
||||||
|
const player = this.getPlayer();
|
||||||
|
|
||||||
|
switch (player) {
|
||||||
|
case 'white':
|
||||||
|
return Object.keys(board).reverse();
|
||||||
|
case 'black':
|
||||||
|
return Object.keys(board);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<table className="board">
|
<table className="board">
|
||||||
|
|||||||
@ -10,6 +10,11 @@ const chessBoardReducer = (state = defaultState, action) => {
|
|||||||
.set("selectedSquare", null)
|
.set("selectedSquare", null)
|
||||||
.toJS();
|
.toJS();
|
||||||
|
|
||||||
|
case "SET_PLAYER":
|
||||||
|
return Immutable.fromJS(state)
|
||||||
|
.set("player", action.player)
|
||||||
|
.toJS();
|
||||||
|
|
||||||
case "SET_GAME_ID":
|
case "SET_GAME_ID":
|
||||||
return Immutable.fromJS(state)
|
return Immutable.fromJS(state)
|
||||||
.set("gameId", action.gameId)
|
.set("gameId", action.gameId)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const SET_BOARD = "SET_BOARD";
|
const SET_BOARD = "SET_BOARD";
|
||||||
|
const SET_PLAYER = "SET_PLAYER";
|
||||||
const SET_GAME_ID = "SET_GAME_ID";
|
const SET_GAME_ID = "SET_GAME_ID";
|
||||||
const SELECT_PIECE = "SELECT_PIECE";
|
const SELECT_PIECE = "SELECT_PIECE";
|
||||||
|
|
||||||
@ -9,6 +10,13 @@ export const setBoard = (board) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const setPlayer = (player) => {
|
||||||
|
return {
|
||||||
|
type: SET_PLAYER,
|
||||||
|
player: player
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const setGameId = (gameId) => {
|
export const setGameId = (gameId) => {
|
||||||
return {
|
return {
|
||||||
type: SET_GAME_ID,
|
type: SET_GAME_ID,
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
const defaultState = {
|
const defaultState = {
|
||||||
selectedSquare: null,
|
selectedSquare: null,
|
||||||
|
|
||||||
|
player: "white",
|
||||||
|
turn: "white",
|
||||||
|
|
||||||
board: {
|
board: {
|
||||||
8: { a: null, b: null, c: null, d: null, e: null, f: null, g: null, h: null },
|
8: { a: null, b: null, c: null, d: null, e: null, f: null, g: null, h: null },
|
||||||
7: { a: null, b: null, c: null, d: null, e: null, f: null, g: null, h: null },
|
7: { a: null, b: null, c: null, d: null, e: null, f: null, g: null, h: null },
|
||||||
|
|||||||
@ -14,7 +14,7 @@ defmodule ChessWeb.Api.GameController do
|
|||||||
|> Repo.get!(id)
|
|> Repo.get!(id)
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> json(Board.transform(game.board))
|
|> json(game_attrs(conn, game))
|
||||||
end
|
end
|
||||||
|
|
||||||
def update(conn, %{"id" => id, "move" => move_params}) do
|
def update(conn, %{"id" => id, "move" => move_params}) do
|
||||||
@ -35,6 +35,21 @@ defmodule ChessWeb.Api.GameController do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp game_attrs(conn, game) do
|
||||||
|
%{
|
||||||
|
board: Board.transform(game.board),
|
||||||
|
player: player(conn, game)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp player(conn, game) do
|
||||||
|
if game.user_id == current_user(conn).id do
|
||||||
|
"white"
|
||||||
|
else
|
||||||
|
"black"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp new_board(board, move_params) do
|
defp new_board(board, move_params) do
|
||||||
[from_file, from_rank] = move_params["from"]
|
[from_file, from_rank] = move_params["from"]
|
||||||
[to_file, to_rank] = move_params["to"]
|
[to_file, to_rank] = move_params["to"]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user