Passage à PHP 8 bis
Fermé
Max747
Messages postés
264
Statut
Membre
-
jordane45 Messages postés 40050 Statut Modérateur -
jordane45 Messages postés 40050 Statut Modérateur -
Bonjour,
Revoici le script dans son intégralité jusqu'à la ligne 362.
Et le message d'erreur au format texte:
Fatal error: Array and string offset access syntax with curly braces is no longer supported in C:\wamp64\www\echecs\includes\chessgame.inc.php on line 554
Revoici le script dans son intégralité jusqu'à la ligne 362.
<?php
//console.log("chessgame.inc.php : OK");
// ------------------------------------------------------------------------- //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// Author: Dave Lerner <http://Dave-L.com> //
// ------------------------------------------------------------------------ //
// Adapted from Online Chess Club (OCC) version 1.0.10, which was written //
// by Michael Speck <http://lgames.sf.net> and published under the GNU //
// General Public License. //
// ------------------------------------------------------------------------ //
/**
* class ChessGame
*
* @package chess
* @subpackage game
*/
define("gsRunning" , 0);
define("gsMate" , 1);
define("gsStalemate" , 2);
define("gsCheck" , 3);
define('_MD_CHESS_ERROR', 'Error');
define('_MD_CHESS_FENBAD_LENGTH', 'invalid length');
define('_MD_CHESS_FENBAD_FIELD_COUNT', 'wrong number of fields');
define('_MD_CHESS_FENBAD_PP_INVALID', 'piece placement invalid');
define('_MD_CHESS_FENBAD_AC_INVALID', 'active color invalid');
define('_MD_CHESS_FENBAD_CA_INVALID', 'castling availability invalid');
define('_MD_CHESS_FENBAD_EP_INVALID', 'en passant target_square invalid');
define('_MD_CHESS_FENBAD_HC_INVALID', 'halfmove clock invalid');
define('_MD_CHESS_FENBAD_FN_INVALID', 'fullmove number invalid');
define('_MD_CHESS_FENBAD_MATERIAL', 'insufficient mating material');
define('_MD_CHESS_FENBAD_IN_CHECK', 'player to move cannot have opponent in check');
define('_MD_CHESS_FENBAD_CA_INCONSISTENT', 'castling availability inconsistent with piece placement');
define('_MD_CHESS_FENBAD_EP_COLOR', 'en passant target square wrong color');
define('_MD_CHESS_FENBAD_EP_NO_PAWN', 'en passant target square for nonexistent pawn');
/**
* The purpose of this class is to handle chess moves.
*
* An instantiation of this class comprises the data essential for handling chess
* moves in a specific game, and provides the requisite methods.
*
* - Input: Game state and proposed move.
* - Processing: Check the legality of the move, and update the game state if the move is legal.
* - Output: Indication of the move's legality, and the (possibly) updated game state.
*
* In addition to the above, there are utility methods for converting between Standard Algebraic
* Notation (SAN) and a notation similar to Long Algebraic Notation.
*
* @package chess
* @subpackage game
*/
class ChessGame {
/**
* Indicates whether object is valid.
*
* If empty string (''), indicates this is a valid object; otherwise contains an error message.
* Should be checked after creating an instance of this class.
*
* @var string $error
*/
var $error;
/**
* gamestate
*
* The game state is represented as an array with the following elements:
*
* - 'fen_piece_placement'
* - 'fen_active_color'
* - 'fen_castling_availability'
* - 'fen_en_passant_target_square'
* - 'fen_halfmove_clock'
* - 'fen_fullmove_number'
* - 'pgn_result'
* - 'pgn_fen'
* - 'pgn_movetext'
*
* The elements prefixed with 'fen_' are standard Forsyth-Edwards Notation (FEN) elements,
* and the elements prefixed with 'pgn_' are standard Portable Game Notation (PGN) elements.
*
* Each element is a string.
*
* @var array $gamestate
*/
var $gamestate;
/**
* board
*
* A 64-element array, constructed from fen_piece_placement, is used for handling moves.
* Its indices are related to the standard tile coordinates as follows:
*
* <pre>
* 8 | 56 57 58 59 60 61 62 63
* 7 | 48 49 50 51 52 53 54 55
* 6 | 40 41 42 43 44 45 46 47
* 5 | 32 33 34 35 36 37 38 39
* 4 | 24 25 26 27 28 29 30 31
* 3 | 16 17 18 19 20 21 22 23
* 2 | 8 9 10 11 12 13 14 15
* 1 | 0 1 2 3 4 5 6 7
* ------------------------
* a b c d e f g h
* </pre>
*
* For example, $board[17] is tile b3 and $board[55] is tile h7.
*
* @var array $board
*/
var $board;
/**
* for auto-completion of moves
* @var string $ac_move
*/
var $ac_move;
/**
* array of white's pieces
* @var array $w_figures
*/
var $w_figures;
/**
* array of black's pieces
* @var array $b_figures
*/
var $b_figures;
/**
* updated by handleMove, not used now but might be used in future
* @var string $last_move
*/
var $last_move;
/**
* updated by handleMove, not used now but might be used in future
* @var string $captured_piece
*/
var $captured_piece;
// --------------
// PUBLIC METHODS
// --------------
/**
* constructor
*
* If a failure occurs, $this->error is set to a string containing an error message;
* otherwise $this->error is set to an empty string.
*
* Example:
* <pre>
* $chessgame = new ChessGame($fen);
* if (!empty($chessgame->error)) {
* echo "'$fen' invalid: $chessgame->error\n";
* }
* </pre>
*
* @param mixed $param If $param is an array, an existing game is loaded using $param as the nine-element gamestate array described above.
* If $param is a non-empty string, a new game is created using $param as a FEN setup position.
* Otherwise, a new game is created using the standard starting position.
*/
function __construct($param = null)
{
// for now
$this->browsing_mode = 0;
if (is_array($param)) {
$this->gamestate = $param;
$this->error = '';
} elseif (is_string($param) and !empty($param)) {
$this->error = $this->init_gamestate($param);
} else {
$this->init_gamestate();
$this->error = '';
}
}
/**
* Handle a move.
*
* @param string $move
* @return array A two-element array:
* - $move_performed: true if the move was performed and the game state has been updated, false otherwise
* - $move_result_text: text message
*/
function move($move)
{
empty($this->error) or trigger_error(_MD_CHESS_ERROR, E_USER_ERROR);
return $this->handleMove($move);
}
/**
* get game state
*
* @return array
*/
//echo "Bonjour";
//echo "<br/>";
function gamestate()
{
empty($this->error) or trigger_error(_MD_CHESS_ERROR, E_USER_ERROR);
return $this->gamestate;
}
/*if (empty($this->error) === false)
{
trigger_error(_MD_JEU_ERROR, E_USER_ERROR);
}
*/
/*$x = $this->gamestate;
echo $x;
echo "<br/>";
exit ("Stop");*/
// ----------------------------------------------------------------
// PRIVATE METHODS - intended for use only by methods of this class
// ----------------------------------------------------------------
/**
* Initialize gamestate for a new game.
*
* If a non-empty string $fen is provided, the game is initialized using $fen as a FEN setup position.
* Otherwise the game is initialized using the standard starting position.
*
* @param string $fen
* @return string empty string on success, or error message on failure
*
* @access private
*/
function init_gamestate($fen = null)
{
$this->gamestate = array();
if (!empty($fen)) {
$setup = true;
} else {
$setup = false;
$fen = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1';
}
// check that data is not unreasonably short or long
if (strlen($fen) < 23 or strlen($fen) > 100) {
return _MD_CHESS_FENBAD_LENGTH; // invalid length
}
$fen_data = explode(' ', $fen);
if (count($fen_data) != 6) {
return _MD_CHESS_FENBAD_FIELD_COUNT; // wrong number of fields
}
$this->gamestate['fen_piece_placement'] = $fen_data[0];
$this->gamestate['fen_active_color'] = $fen_data[1];
$this->gamestate['fen_castling_availability'] = $fen_data[2];
$this->gamestate['fen_en_passant_target_square'] = $fen_data[3];
$this->gamestate['fen_halfmove_clock'] = $fen_data[4];
$this->gamestate['fen_fullmove_number'] = $fen_data[5];
$this->gamestate['pgn_fen'] = $setup ? $fen : null;
$this->gamestate['pgn_result'] = '*';
$this->gamestate['pgn_movetext'] = '*';
var_dump ($this->gamestate['fen_en_passant_target_square']);
if (!$this->fen_piece_placement_to_board())
{
return _MD_CHESS_FENBAD_PP_INVALID; // piece_placement invalid
}
elseif ($this->gamestate['fen_active_color'] != 'w' and $this->gamestate['fen_active_color'] != 'b')
{
return _MD_CHESS_FENBAD_AC_INVALID; // active_color invalid
}
// Since fen_piece_placement_to_board() checked $fen for the correct number of fields above, $castling_availability is non-empty.
elseif ($this->gamestate['fen_castling_availability'] != '-' and !preg_match('/^(?:K\w?)?(?:Q\w?)?(?:k\w?)?(?:q\w?)?$/', $this->gamestate['fen_castling_availability']))
{
return _MD_CHESS_FENBAD_CA_INVALID; // castling_availability invalid
}
elseif ($this->gamestate['fen_en_passant_target_square'] != '-' and !preg_match('/^[a-h][36]$/', $this->gamestate['fen_en_passant_target_square']))
{
return _MD_CHESS_FENBAD_EP_INVALID; // en_passant_target_square invalid
}
elseif (!preg_match('/^\d{0,4}$/', $this->gamestate['fen_halfmove_clock']))
{
return _MD_CHESS_FENBAD_HC_INVALID; // halfmove_clock invalid
}
elseif (!preg_match('/^\d{0,4}$/', $this->gamestate['fen_fullmove_number']) or $this->gamestate['fen_fullmove_number'] < 1)
{
return _MD_CHESS_FENBAD_FN_INVALID; // fullmove_number invalid
}
elseif ($this->insufficient_mating_material())
{
return _MD_CHESS_FENBAD_MATERIAL; // insufficient mating material
}
elseif (($this->gamestate['fen_active_color'] == 'w' and $this->kingIsUnderAttack('b', 'w'))
or ($this->gamestate['fen_active_color'] == 'b' and $this->kingIsUnderAttack('w', 'b')))
{
return _MD_CHESS_FENBAD_IN_CHECK; // player to move cannot have opponent in check
}
elseif ((strstr($this->gamestate['fen_castling_availability'], 'K') and ($this->board[ 4] != 'wK' or $this->board[ 7] != 'wR'))
or (strstr($this->gamestate['fen_castling_availability'], 'Q') and ($this->board[ 4] != 'wK' or $this->board[ 0] != 'wR'))
or (strstr($this->gamestate['fen_castling_availability'], 'k') and ($this->board[60] != 'bK' or $this->board[63] != 'bR'))
or (strstr($this->gamestate['fen_castling_availability'], 'q') and ($this->board[60] != 'bK' or $this->board[56] != 'bR')))
{
return _MD_CHESS_FENBAD_CA_INCONSISTENT; // castling availability inconsistent with piece placement
}
elseif ($this->gamestate['fen_en_passant_target_square'] != '-' && (
($this->gamestate['fen_en_passant_target_square'][1] == 3 && $this->gamestate['fen_active_color'] != 'b')
|| ($this->gamestate['fen_en_passant_target_square'][1] == 6 && $this->gamestate['fen_active_color'] != 'w')
))
{
return _MD_CHESS_FENBAD_EP_COLOR; // en passant target square wrong color
}
//elseif ($this->gamestate['fen_en_passant_target_square'] != '-' and $this->gamestate['fen_en_passant_target_square']{1} == 3
//and $this->board[$this->boardCoordToIndex($this->gamestate['fen_en_passant_target_square']{0} . '4')] != 'wP')
elseif ($this->gamestate['fen_en_passant_target_square'] != '-' and $this->gamestate['fen_en_passant_target_square'][1] == 3
and $this->board[$this->boardCoordToIndex($this->gamestate['fen_en_passant_target_square'][0] . '4')] != 'wP')
{
return _MD_CHESS_FENBAD_EP_NO_PAWN; // en passant target square for nonexistent pawn
}
//elseif ($this->gamestate['fen_en_passant_target_square'] != '-' and $this->gamestate['fen_en_passant_target_square']{1} == 6
//and $this->board[$this->boardCoordToIndex($this->gamestate['fen_en_passant_target_square']{0} . '5')] != 'bP')
elseif ($this->gamestate['fen_en_passant_target_square'] != '-' and $this->gamestate['fen_en_passant_target_square'][1] == 6
and $this->board[$this->boardCoordToIndex($this->gamestate['fen_en_passant_target_square'][0] . '5')] != 'bP')
{
return _MD_CHESS_FENBAD_EP_NO_PAWN; // en passant target square for nonexistent pawn
}
#echo "In " . __CLASS__ . '::' . __FUNCTION__ . "\n";#*#DEBUG#
#var_dump('gamestate', $this->gamestate);#*#DEBUG#
// save the current FEN to the board
$this->fen_piece_placement_to_board( );
return ''; // successful
}
Et le message d'erreur au format texte:
Fatal error: Array and string offset access syntax with curly braces is no longer supported in C:\wamp64\www\echecs\includes\chessgame.inc.php on line 554
Configuration: Windows / Firefox 93.0
A voir également:
- Passage à PHP 8 bis
- Clé windows 8 - Guide
- Mixcraft 8 - Télécharger - Création musicale
- Passage qwerty azerty - Guide
- Internet explorer 8 - Télécharger - Navigateurs
- Easy php - Télécharger - Divers Web & Internet