"; } include (ROOT . "/ads/adlocale.php"); $ad["shogi"] = "\n"; $ad["xiangqi"] = "\n"; $ad["play"] = "\n"; $ad["hexchessglinski"] = "\n"; function showad ($itemid, $type, $linkid) { global $ad, $bot, $mobile, $adlocale; if ($bot) return; $linkid = strtolower($linkid); if (($linkid == "chessrules") && (!empty($ad["chessbooks"]))) weightad ("chessbooks", 15); if (isset($ad[$itemid])) weightad ($itemid, 15); elseif (isset($ad[$linkid])) weightad($linkid, 10); if ($type == "Game") { $ad["fav"] = "\n"; weightad ("fav", 5); } else weightad ("play", 5); if (!empty($itemid) && ($type == "override")) $key = $itemid; else $key = array_rand($ad); // echo "
"; // print_r($ad); // echo $linkid; // echo "
"; if ($mobile) printf ("
"); else printf ("
"); echo $ad[$key]; echo "
\n"; } if (!$googleokay) { } elseif ($mobile) { $ad["google"] = << AD; weightad("google", 6); } else { /* $ad["google"] = << AD; */ $ad["google"] = << ADZ; } $adtype = ($mobile) ? "mobile" : "banner"; // include_once ROOT . "/ads/staunton-{$adtype}-ads.php"; if ($itemid != "HomepageofTheChe") { if ($adlocale) { include_once ROOT . "/ads/{$localename[$adlocale]}-{$adtype}-ads.php"; } elseif ($googleokay) weightad ("google", 5); } echo ""; ?> id = $row["ItemID"]; $this->text = get_field("LinkText", "IndexEntry", "ItemID", $this->id); if (empty($this->text)) $this->text = $row["Summary"]; /* if (fnmatch("*.php*", $this->url)) $this->type = "script"; elseif ((substr($this->url, -1) == "/") || (substr($this->url, -11) == "/index.html")) $this->type = "index"; else */ $this->type = $row["Type"]; $this->membersubmitted = $row["IsMemberSubmitted"]; $this->locked = $row["IsLocked"]; $this->featured = $row["IsPrimary"]; $this->url = make_link_url($row, true); /* if ($this->membersubmitted) $this->url = "/index/msdisplay.php?itemid={$this->id}"; elseif (($this->type == "Zillions") && fnmatch("*.zip", $row["URL"])) $this->url = "/index/zillions.php?itemid={$this->id}"; elseif (fnmatch("https://*", $row["URL"])) $this->url = "/index/external.php?itemid={$this->id}"; else $this->url = $row["URL"]; */ if ($this->type == "Jocly") $this->text .= " with Jocly"; elseif ($this->type == "Zillions") $this->text .= " with Zillions-of-Games"; elseif ($this->type == "Game") $this->text = "Rules of " . $this->text; elseif (($this->type == "PBM") && empty($row["IsLink"])) $this->text .= " on Game Courier"; } else { $this->id = $id; $this->url = $u; $this->text = $txt; $this->type = $typ; $this->membersubmitted = 0; $this->locked = 0; } $this->icon = get_icon($this->type, $this->membersubmitted, $this->locked); } public function __toString () { $icon = "icon}\" ALIGN=\"LEFT\" WIDTH=16 HEIGHT=16>"; if (strncmp($this->url, "http", 4) == 0) return sprintf ("
  • %s %s
  • \n", $icon, $this->url, $this->text); elseif (strncmp($this->url, "play/", 5) == 0) return sprintf ("
  • %s %s
  • \n", $icon, substr($this->url, 5), $this->text); else return sprintf ("
  • %s %s
  • \n", $icon, $this->url, $this->text); } } function linkcmp ($a, $b) { $cmp = strcmp($a->type, $b->type); if ($cmp == 0) $cmp = strnatcmp($a->text, $b->text); return $cmp; } function maxlen ($ra) { $len = 0; foreach ($ra as $link) { $len = max($len, strlen($link->text)); } return $len; } class personlink { public $personid; public $dispname; public $lastname; public $firstname; public function __construct ($u) { if (is_array($u)) { //should always be an array? $row = $u; $this->personid = $row["PersonID"]; $this->lastname = $row["LastName"]; $this->firstname= $row["FirstName"]; $this->dispname = $this->firstname . " " . $this->lastname; if ($this->dispname ==" ") { $this->dispname = $this->personid; } } } public function __toString () { $icon = sprintf (""); return sprintf ("
  • %s %s
  • \n", $icon, $this->personid, $this->dispname); } } function personlinkcmp ($a, $b) { $cmp = strcasecmp($a->lastname, $b->lastname); if ($cmp == 0) { $cmp = strcasecmp($a->firstname, $b->firstname); if ($cmp == 0) { $cmp = strcasecmp($a->dispname, $b->dispname); } } return $cmp; } function personmaxlen ($ra) { $len = 0; foreach ($ra as $link) { $len = max($len, strlen($link->dispname)); } return $len; } $prime = $second = $followers = $remote = $cat = $external = $favorites = $favedby = array(); if ($itemid) { if ($row = table_row("Item", "ItemID", $itemid)) { $type = $row["Type"]; $chessv = $row["Chessv"]; $categories = $row["Categories"]; $authorid = $row["AuthorID"]; $inventorid = $row["InventorID"]; $authorid2 = $row["AuthorID2"]; $inventorid2= $row["InventorID2"]; $linkid = $row["LinkItemID"]; $linkid2 = $row["LinkItemID2"]; $summary = $row["Summary"]; $featured = $row["IsPrimary"]; $membersubmitted = $row["IsMemberSubmitted"]; $locked = $row["IsLocked"]; if ($linkid != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID=:group"); $stmt->bindValue(":group", $linkid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $prime[] = new link ($row); } } usort ($prime, "linkcmp"); } $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID2=:group"); $stmt->bindValue(":group", $linkid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $followers[] = new link ($row); } } usort ($followers, "linkcmp"); } } if ($linkid2 != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID=:group"); $stmt->bindValue(":group", $linkid2); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $second[] = new link ($row); } } usort ($second, "linkcmp"); } $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID2 = :group2 AND LinkItemID != :group"); $stmt->bindValue(":group", $linkid); $stmt->bindValue(":group2", $linkid2); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $remote[] = new link ($row); } } usort ($remote, "linkcmp"); } } /* if ($inventorid != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE InventorID=? OR InventorID2=? ORDER BY Summary"); if ($stmt->execute(array($inventorid, $inventorid))) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["IsDeleted"] == 0) && ($row["IsHidden"] == 0) && ($row["IsBrokenLink"] == 0) && ($row["Type"] == "Game") && ($row["ItemID"] != $itemid)) $inventions[] = new link ($row); } } // usort ($inventions, "linkcmp"); } if ($inventorid2 != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE InventorID=? OR InventorID2=? ORDER BY Summary"); if ($stmt->execute(array($inventorid2, $inventorid2))) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["IsDeleted"] == 0) && ($row["IsHidden"] == 0) && ($row["IsBrokenLink"] == 0) && ($row["Type"] == "Game") && ($row["ItemID"] != $itemid)) $inventions2[] = new link ($row); } } // usort ($inventions2, "linkcmp"); } */ if (!empty($categories)) { $catarray = explode(",", $categories); foreach ($catarray as $c) { $cat[] = new link ("index/mainquery.php?type=Any&category={$c}&orderby=LinkText&displayauthor=1&displayinventor=1", ucfirst($c), "script"); } } if (!empty($external)) usort ($external, "linkcmp"); } } else { $type = ""; } $fav = false; $stmt = $dbh->prepare("SELECT * FROM Item JOIN Favorites ON Item.ItemID = Favorites.ItemID WHERE Favorites.PersonID = :personid ORDER BY Summary"); $stmt->bindValue(":personid", $personid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // if (($row["IsDeleted"] == 0) && ($row["IsHidden"] == 0) && ($row["IsBrokenLink"] == 0) && ($row["Type"] == "Game")) $favorites[] = new link ($row); if ($itemid == $row["ItemID"]) $fav = true; } } $stmt = $dbh->prepare("SELECT * FROM Person JOIN Favorites ON Person.PersonID = Favorites.PersonID WHERE Favorites.ItemID = :itemid ORDER BY LastName"); $stmt->bindValue(":itemid", $itemid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $favedby[] = new personlink ($row); } } ?>
    The Chess Variant Pages
    Custom Search
    if (window.canShowAds === undefined) document.writeln("

    Ad Blocker Detected! Please check out our Advertising policy for reasons to unblock this site, and please check out our affiliate links to Amazon and eBay in the Shop menu below.

    "); TXT; echo "
    "; } ?> "; if (!isset($itemid)) showad("","",""); elseif (!isset($type)) showad($itemid, "", ""); elseif (!isset($linkid)) showad($itemid, $type, ""); else showad($itemid, $type, $linkid); } ?>


    Custom Search
    %s. ", $inventorid, personid2name($inventorid)); elseif ((($authorid == $inventorid) || ($authorid == $inventorid2)) && empty($authorid2) && !empty($inventorid2)) $byline = sprintf ("This page is written by one of the game's inventor, %s. ", $authorid, personid2name($authorid)); elseif ((($authorid == $inventorid) || ($authorid == $inventorid2)) && (($authorid2 == $inventorid) || ($authorid2 == $inventorid2))) $byline = sprintf ("This page is written by both of the game's inventors, %s and %s. ", $inventorid, personid2name($inventorid), $inventorid2, personid2name($inventorid2)); if (is_favorite($inventorid, $itemid)) { if (!empty($inventorid2)) { if (is_favorite($inventorid2, $itemid)) $byline .= "This game is a favorite of both of its inventors."; else $byline .= sprintf("This game is a favorite of one of its inventors, %s.", $inventorid, personid2name($inventorid)); } else $byline .= "This game is a favorite of its inventor."; } if (!empty($byline)) echo "
    {$byline}


    "; } elseif (!empty($type) && ($type == "Piececlopedia")) printf ("

    The Piececlopedia is intended as a scholarly reference concerning the history and naming conventions of pieces used in Chess variants. But it is not a set of standards concerning what you must call pieces in newly invented games.
    "); } $itemid = $originalid; // Change back for scripts that use $itemid if (!empty($featured) && ($type == "Game")) echo "

    This is one of our Featured Games. Click the link to check out our others.

    \n"; $ruri = getenv("REQUEST_URI"); if ((fnmatch("*/erf/*", $ruri) || fnmatch("*/coffeecc/*", $ruri))): ?>

    Recent versions of Chrome, Firefox, and Edge do not support Java. Internet Explorer and Safari should still support it. Besides that, recent versions of Java will block this script unless you add https://www.chessvariants.com to your Java exceptions list. You should find this in the Security tab of your Java control panel.

    The Chess Variant PagesThe Chess Variant Pages

    Discover and Play Numerous Games Similar to Chess

    Chess has its origins in the Arabian game of Shatranj, which goes back to the Indian game of Chaturanga.

    It is also related to Xiangqi in China, to Janggi in Korea, and to Shogi in Japan.

    Many other games have been inspired by or based on Chess and its relatives. All of these games are similar to Chess yet also different from it in various ways.

    Thanks to computers and the internet, it is now possible to play several of these Chess variants without physical boards and pieces. This website – The Chess Variant Pages – is here for cataloging, discussing, and playing the many games that are based on, related to, or similar enough to Chess.

    Play

    Game Courier Zillions-of-Games ChessV Fairy-Max