mirror of https://gitee.com/openkylin/batik.git
602 lines
25 KiB
XML
602 lines
25 KiB
XML
![]() |
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<!--
|
||
|
|
||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||
|
contributor license agreements. See the NOTICE file distributed with
|
||
|
this work for additional information regarding copyright ownership.
|
||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||
|
(the "License"); you may not use this file except in compliance with
|
||
|
the License. You may obtain a copy of the License at
|
||
|
|
||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, software
|
||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
See the License for the specific language governing permissions and
|
||
|
limitations under the License.
|
||
|
|
||
|
-->
|
||
|
|
||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
|
||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||
|
<svg width="800" height="600" viewBox="0 0 800 600"
|
||
|
onload="loadHandler(evt)"
|
||
|
xmlns="http://www.w3.org/2000/svg"
|
||
|
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
|
|
||
|
<script type="text/ecmascript" xlink:href="script/util.js"/>
|
||
|
<script type="text/ecmascript" xlink:href="script/board.js"/>
|
||
|
<script type="text/ecmascript" xlink:href="script/deck.js"/>
|
||
|
<script type="text/ecmascript" xlink:href="script/card.js"/>
|
||
|
<script type="text/ecmascript" xlink:href="script/pile.js"/>
|
||
|
<script type="text/ecmascript"><![CDATA[
|
||
|
var svgns = "http://www.w3.org/2000/svg";
|
||
|
var xlinkns = "http://www.w3.org/1999/xlink";
|
||
|
var cg = document.getElementById("cards");
|
||
|
var moveGroup = document.getElementById("move");
|
||
|
var dragGroup = document.getElementById("drag");
|
||
|
var root = document.getRootElement();
|
||
|
var allowDrag = true;
|
||
|
|
||
|
var BOARD = new Board(cg, moveGroup);
|
||
|
BOARD.setNotifyMoveDone(towersMoveDone);
|
||
|
|
||
|
var DECK_PILES = new Array();
|
||
|
DECK_PILES[0] = new Pile(BOARD, 2.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
DECK_PILES[1] = new Pile(BOARD, 82.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
DECK_PILES[2] = new Pile(BOARD, 642.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
DECK_PILES[3] = new Pile(BOARD, 722.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
|
||
|
var HOLD_PILES = new Array();
|
||
|
HOLD_PILES[0] = new Pile(BOARD, 242.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
HOLD_PILES[1] = new Pile(BOARD, 322.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
HOLD_PILES[2] = new Pile(BOARD, 402.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
HOLD_PILES[3] = new Pile(BOARD, 482.5, 5, 75, 105, 0, 0, 0, 0);
|
||
|
|
||
|
var piles;
|
||
|
|
||
|
function loadHandler(evt) {
|
||
|
getURL("cards/default.svg", setupCards);
|
||
|
}
|
||
|
|
||
|
function setupCards(result) {
|
||
|
if (!result.content)
|
||
|
return;
|
||
|
var doc = parseXML(result.content, document);
|
||
|
var fc;
|
||
|
for (fc=doc.firstChild; fc; fc = fc.nextSibling) {
|
||
|
if (fc.nodeName == "svg") break;
|
||
|
}
|
||
|
if (fc.nodeName != "svg") return;
|
||
|
for (fc=fc.firstChild; fc; fc = fc.nextSibling) {
|
||
|
if (fc.nodeName == "defs") break;
|
||
|
}
|
||
|
if (fc.nodeName != "defs") return;
|
||
|
root.appendChild(fc);
|
||
|
init();
|
||
|
}
|
||
|
|
||
|
function init() {
|
||
|
var deck = new Deck(document, 1, "", 75, 105);
|
||
|
deck.shuffle();
|
||
|
DECK_PILES[0].suite = SUITE_DIAMOND;
|
||
|
DECK_PILES[0].setDragCheck(deckDragCheck);
|
||
|
DECK_PILES[0].setDropCheck(deckDropCheck);
|
||
|
DECK_PILES[1].suite = SUITE_CLUB;
|
||
|
DECK_PILES[1].setDragCheck(deckDragCheck);
|
||
|
DECK_PILES[1].setDropCheck(deckDropCheck);
|
||
|
DECK_PILES[2].suite = SUITE_HEART;
|
||
|
DECK_PILES[2].setDragCheck(deckDragCheck);
|
||
|
DECK_PILES[2].setDropCheck(deckDropCheck);
|
||
|
DECK_PILES[3].suite = SUITE_SPADE;
|
||
|
DECK_PILES[3].setDragCheck(deckDragCheck);
|
||
|
DECK_PILES[3].setDropCheck(deckDropCheck);
|
||
|
|
||
|
for (var i=0; i<4; i++) {
|
||
|
HOLD_PILES[i].setDragCheck(holdDragCheck);
|
||
|
HOLD_PILES[i].setDropCheck(holdDropCheck);
|
||
|
}
|
||
|
HOLD_PILES[0].addCard(deck.dealCard(true));
|
||
|
HOLD_PILES[3].addCard(deck.dealCard(true));
|
||
|
|
||
|
piles = new Array();
|
||
|
for (var i=0; i<10; i++) {
|
||
|
piles[i] = new Pile(BOARD, 2.5+80*i, 120, 75, 105, 0, 25, 0, 0);
|
||
|
piles[i].setDragCheck(dragCheck);
|
||
|
piles[i].setDropCheck(dropCheck);
|
||
|
}
|
||
|
|
||
|
for (var y=0; y<5; y++) {
|
||
|
for (var x=0; x<10; x++) {
|
||
|
piles[x].addCard(deck.dealCard(true));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
towersMoveDone();
|
||
|
}
|
||
|
|
||
|
function dragCheck(pile, card, index) {
|
||
|
if (!allowDrag) return false;
|
||
|
|
||
|
var sz = pile.size();
|
||
|
// Not enough free hold spots for drag.
|
||
|
if ((sz - index) > (freeHold()+1))
|
||
|
return false;
|
||
|
|
||
|
var prevCard = card;
|
||
|
for (var i=index+1; i<sz; i++) {
|
||
|
var c = pile.checkCard(i);
|
||
|
if ((!prevCard.suiteMatch(c)) ||
|
||
|
(!prevCard.valueOneLower(c)))
|
||
|
return false;
|
||
|
prevCard = c;
|
||
|
}
|
||
|
return dragGroup;
|
||
|
}
|
||
|
|
||
|
function dropCheck(fromPile, toPile, cards) {
|
||
|
var dragBottomCard = cards[0];
|
||
|
var pileTopCard = toPile.checkTopCard();
|
||
|
if (!pileTopCard) {
|
||
|
if (dragBottomCard.getValue() != 13)
|
||
|
return false;
|
||
|
} else if ((!pileTopCard.suiteMatch(dragBottomCard)) ||
|
||
|
(!pileTopCard.valueOneLower(dragBottomCard))) {
|
||
|
return false;
|
||
|
}
|
||
|
for (var i=0; i<cards.length; i++) {
|
||
|
toPile.addCard(cards[i]);
|
||
|
}
|
||
|
return new SimpleMoveInfo(cards, fromPile, cards, toPile);
|
||
|
}
|
||
|
|
||
|
function freeHold() {
|
||
|
var count = 0;
|
||
|
for (var i=0; i<4; i++) {
|
||
|
if (HOLD_PILES[i].size() == 0) count++;
|
||
|
}
|
||
|
return count;
|
||
|
}
|
||
|
|
||
|
function holdDragCheck(pile, card, index) {
|
||
|
if (!allowDrag) return false;
|
||
|
return dragGroup;
|
||
|
}
|
||
|
|
||
|
function holdDropCheck(fromPile, toPile, cards) {
|
||
|
if ((toPile.cards.length == 0) && (cards.length == 1)) {
|
||
|
toPile.addCard(cards[0]);
|
||
|
return new SimpleMoveInfo(cards, fromPile, cards, toPile);
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function deckDragCheck(pile, card, index) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function deckDropCheck(fromPile, toPile, cards) {
|
||
|
if (toPile.suite != cards[0].suite) {
|
||
|
return false;
|
||
|
}
|
||
|
var top = toPile.checkTopCard();
|
||
|
if (top == null) {
|
||
|
if (cards[cards.length-1].getValue() != 1)
|
||
|
return false;
|
||
|
} else {
|
||
|
if (! top.valueOneHigher(cards[cards.length-1]))
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Success!
|
||
|
var toCards = new Array();
|
||
|
for (var i=cards.length-1; i>=0; i--) {
|
||
|
toCards.push(cards[i]);
|
||
|
toPile.addCard(cards[i]);
|
||
|
}
|
||
|
return new SimpleMoveInfo(cards, fromPile, toCards, toPile);
|
||
|
}
|
||
|
|
||
|
function towersMoveDone() {
|
||
|
for (var i=0; i<14; i++) {
|
||
|
var pile;
|
||
|
if (i<10) {
|
||
|
pile = piles[i];
|
||
|
} else {
|
||
|
pile = HOLD_PILES[i-10];
|
||
|
}
|
||
|
var c = pile.checkTopCard();
|
||
|
while (c != null) {
|
||
|
var suite = c.getSuite();
|
||
|
var suitePile = DECK_PILES[suite-1];
|
||
|
var spc = suitePile.checkTopCard();
|
||
|
if (spc == null) {
|
||
|
if (c.getValue() != 1)
|
||
|
break;
|
||
|
} else if (!spc.valueOneHigher(c)) {
|
||
|
break;
|
||
|
}
|
||
|
var mi1 = BOARD.getMoveInfo();
|
||
|
var cs = new Array();
|
||
|
cs.push(c);
|
||
|
var mi2 = new SimpleMoveInfo(cs, pile, cs, suitePile);
|
||
|
var mi = new MultiMoveInfo(mi1, mi2);
|
||
|
BOARD.setMoveInfo(mi);
|
||
|
|
||
|
suitePile.moveCardTo(c, 40);
|
||
|
setTimeout("towersMoveDone()", 150);
|
||
|
allowDrag = false;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
allowDrag = true;
|
||
|
|
||
|
for (var i=0; i<10; i++) {
|
||
|
var pile = piles[i];
|
||
|
if (pile.checkTopCard() != null) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOARD.won();
|
||
|
}
|
||
|
|
||
|
function showMore() {
|
||
|
var moreG = document.getElementById("more");
|
||
|
if (!moreG) return;
|
||
|
var style = moreG.style;
|
||
|
if (style.getPropertyValue("display") == "inline") {
|
||
|
hideMore();
|
||
|
return;
|
||
|
}
|
||
|
style.setProperty("display", "inline", "");
|
||
|
style.setProperty("pointer-events", "fill", "");
|
||
|
moreG.addEventListener("click", hideMore, false);
|
||
|
}
|
||
|
|
||
|
function hideMore() {
|
||
|
var moreG = document.getElementById("more");
|
||
|
if (!moreG) return;
|
||
|
moreG.removeEventListener("click", hideMore, false);
|
||
|
moreG.style.setProperty("pointer-events", "none", "");
|
||
|
moreG.style.setProperty("display", "none", "");
|
||
|
}
|
||
|
|
||
|
]]></script>
|
||
|
|
||
|
<g id="background" style="pointer-events:none;">
|
||
|
<rect x="0" y="0" width="100%" height="100%" fill="#080" pointer-events="fill"/>
|
||
|
<rect rx="6" ry="6" x="7.5" y="5" width="65" height="104"
|
||
|
fill="white" stroke="black"/>
|
||
|
<g transform="translate(7.5, 5)">
|
||
|
<path fill="#FF0000" d="M49.662,52.177L32.643,78.178L15.625,52.177
|
||
|
l17.019-26.001L49.662,52.177z"/>
|
||
|
<path fill="none" stroke="#FFFFFF" stroke-width="2"
|
||
|
d="M32.643,32.567c3.657,5.587,11.083,16.932,12.836,19.61
|
||
|
c-1.753,2.678-9.179,14.022-12.836,19.61
|
||
|
c-3.657-5.588-11.083-16.933-12.836-19.61
|
||
|
C21.56,49.499,28.986,38.154,32.643,32.567z
|
||
|
M32.643,32.567c3.657,5.587,11.083,16.932,12.836,19.61
|
||
|
c-1.753,2.678-9.179,14.022-12.836,19.61
|
||
|
c-3.657-5.588-11.083-16.933-12.836-19.61
|
||
|
C21.56,49.499,28.986,38.154,32.643,32.567z"/>
|
||
|
<path fill="#FFFFFF" d="M29.194,45.139
|
||
|
c0,0,1.726-2.635,3.449-5.269c1.724,2.634,6.388,9.758,8.056,12.306
|
||
|
c-1.6,2.442-4.95,7.563-8.056,12.307
|
||
|
c-3.105-4.744-6.456-9.864-8.056-12.307
|
||
|
C26.255,49.629,29.194,45.139,29.194,45.139z"/>
|
||
|
<path fill="#FFFFFF" d="M29.194,45.139c0,0,1.726-2.635,3.449-5.269
|
||
|
c1.724,2.634,6.388,9.758,8.056,12.306
|
||
|
c-1.6,2.442-4.95,7.563-8.056,12.307
|
||
|
c-3.105-4.744-6.456-9.864-8.056-12.307
|
||
|
C26.255,49.629,29.194,45.139,29.194,45.139z
|
||
|
M29.194,45.139c0,0,1.726-2.635,3.449-5.269
|
||
|
c1.724,2.634,6.388,9.758,8.056,12.306
|
||
|
c-1.6,2.442-4.95,7.563-8.056,12.307
|
||
|
c-3.105-4.744-6.456-9.864-8.056-12.307
|
||
|
C26.255,49.629,29.194,45.139,29.194,45.139z"/>
|
||
|
<path d="M25.587,52.177c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S25.587,51.625,25.587,52.177z"/>
|
||
|
<path d="M33.643,39.871c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S33.643,39.318,33.643,39.871z"/>
|
||
|
<path d="M41.699,52.177c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S41.699,51.625,41.699,52.177z"/>
|
||
|
<path d="M33.643,64.483c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S33.643,63.932,33.643,64.483z"/>
|
||
|
<path d="M29.106,57.552c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S29.106,57,29.106,57.552z"/>
|
||
|
<path d="M38.18,57.552c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S38.18,57,38.18,57.552z"/>
|
||
|
<path d="M38.18,46.802c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S38.18,46.25,38.18,46.802z"/>
|
||
|
<path d="M29.105,46.802c0,0.552-0.447,1-1,1s-1-0.448-1-1
|
||
|
s0.447-1,1-1S29.105,46.25,29.105,46.802z"/>
|
||
|
<path d="M33.643,78.178c0,0.551-0.447,1-1,1s-1-0.449-1-1
|
||
|
c0-0.553,0.447-1,1-1S33.643,77.625,33.643,78.178z"/>
|
||
|
<path d="M50.662,52.177c0,0.551-0.447,1-1,1s-1-0.449-1-1
|
||
|
c0-0.553,0.447-1,1-1S50.662,51.624,50.662,52.177z"/>
|
||
|
<path d="M33.643,26.176c0,0.551-0.447,1-1,1s-1-0.449-1-1
|
||
|
c0-0.553,0.447-1,1-1S33.643,25.623,33.643,26.176z"/>
|
||
|
<path d="M16.625,52.177c0,0.551-0.447,1-1,1s-1-0.449-1-1
|
||
|
c0-0.553,0.447-1,1-1S16.625,51.624,16.625,52.177z"/>
|
||
|
</g>
|
||
|
<rect rx="6" ry="6" x="87.5" y="5" width="65" height="104"
|
||
|
fill="white" stroke="black"/>
|
||
|
<g transform="translate(87.5, 5)">
|
||
|
<path d="M29.224,57.547c0,7.585-3.034,14.412-8.344,14.412v1.517h24.273
|
||
|
v-1.517c-6.068,0-8.345-6.827-8.345-14.412
|
||
|
c2.774,3.661,7.948,4.469,11.707,1.829
|
||
|
c3.856-2.709,4.787-8.032,2.078-11.888s-8.032-4.787-11.889-2.078
|
||
|
c3.287-3.325,3.287-8.675,0-12c-3.313-3.351-8.717-3.382-12.068-0.068
|
||
|
c-3.351,3.313-3.382,8.717-0.068,12.068
|
||
|
c-3.759-2.641-8.933-1.832-11.706,1.829
|
||
|
c-2.847,3.756-2.109,9.108,1.647,11.955
|
||
|
c3.756,2.847,9.108,2.108,11.955-1.647"/>
|
||
|
<path fill="#FFFFFF" d="M25.282,52.542c0,2.139-1.734,3.873-3.873,3.873
|
||
|
s-3.873-1.734-3.873-3.873s1.734-3.873,3.873-3.873
|
||
|
S25.282,50.403,25.282,52.542z"/>
|
||
|
<path fill="#FFFFFF" d="M47.532,52.542c0,2.139-1.734,3.873-3.873,3.873
|
||
|
s-3.873-1.734-3.873-3.873s1.734-3.873,3.873-3.873
|
||
|
S47.532,50.403,47.532,52.542z"/>
|
||
|
<path fill="#FFFFFF" d="M36.579,39.411c0,2.139-1.734,3.873-3.873,3.873
|
||
|
s-3.873-1.734-3.873-3.873s1.734-3.873,3.873-3.873
|
||
|
S36.579,37.272,36.579,39.411z"/>
|
||
|
</g>
|
||
|
|
||
|
<rect rx="6" ry="6" x="647.5" y="5" width="65" height="104"
|
||
|
fill="white" stroke="black"/>
|
||
|
<g transform="translate(647.5, 5)">
|
||
|
<path fill="#FF0000" d="M13.143,42.426
|
||
|
c0-6.118,3.822-11.088,8.411-11.088c6.118,0,11.089,4.971,11.089,11.088
|
||
|
c0-6.118,4.971-11.088,11.089-11.088c4.588,0,8.412,4.971,8.412,11.088
|
||
|
c0,8.03-16.824,17.207-19.501,30.589
|
||
|
C29.966,59.633,13.143,50.456,13.143,42.426z"/>
|
||
|
<path fill="none" stroke="#000" stroke-width="2" stroke-linecap="round"
|
||
|
stroke-miterlimit="7" stroke-dasharray="0 6.139"
|
||
|
d="M32.643,30.822c-2.89-2.762-6.784-4.484-11.089-4.484
|
||
|
c-7.395,0-13.411,7.217-13.411,16.088c0,5.695,4.452,10.55,9.166,15.69
|
||
|
c4.35,4.741,9.278,10.116,10.431,15.88c0.468,2.337,2.52,4.02,4.903,4.02
|
||
|
s4.436-1.683,4.903-4.02c1.152-5.764,6.082-11.139,10.431-15.88
|
||
|
c4.714-5.14,9.167-9.995,9.167-15.69c0-8.871-6.017-16.088-13.412-16.088
|
||
|
C39.427,26.338,35.533,28.06,32.643,30.822z"/>
|
||
|
<path d="M32.643,53.509c-0.749-2.514-1.698-4.628-4.891-7.82
|
||
|
c-2.132-2.132-3.111-4.239-3.111-6.42c0-1.104-0.896-2-2-2
|
||
|
s-2,0.896-2,2c0,4.18,2.668,6.36,5.021,8.285
|
||
|
c2.562,2.094,5.259,5.044,5.909,9.791
|
||
|
c0.266,1.938,0.411,4.157,1.071,4.817
|
||
|
c0.66-0.66,0.806-2.879,1.071-4.817
|
||
|
c0.65-4.747,3.348-7.697,5.909-9.791c2.354-1.924,5.021-4.105,5.021-8.285
|
||
|
c0-1.104-0.896-2-2-2s-2,0.896-2,2c0,2.182-0.979,4.289-3.111,6.42
|
||
|
C34.341,48.881,33.392,50.995,32.643,53.509z"/>
|
||
|
<path fill="#FFFFFF" d="M43.77,39.268
|
||
|
c0,0.621-0.504,1.125-1.125,1.125s-1.125-0.504-1.125-1.125
|
||
|
s0.504-1.125,1.125-1.125S43.77,38.647,43.77,39.268z"/>
|
||
|
<path fill="#FFFFFF" d="M23.766,39.268
|
||
|
c0,0.621-0.504,1.125-1.125,1.125s-1.125-0.504-1.125-1.125
|
||
|
s0.504-1.125,1.125-1.125S23.766,38.647,23.766,39.268z"/>
|
||
|
</g>
|
||
|
<rect rx="6" ry="6" x="727.5" y="5" width="65" height="104"
|
||
|
fill="white" stroke="black"/>
|
||
|
<g transform="translate(727.5, 5)">
|
||
|
<path fill="#000" d="M49.723,52.583c1.456,1.402,2.322,3.306,2.421,5.325
|
||
|
c0.213,4.374-3.159,8.093-7.532,8.306
|
||
|
c-4.374,0.214-8.092-3.158-8.306-7.532
|
||
|
c0,9.352,2.439,13.417,8.132,13.417v1.627H20.856v-1.627
|
||
|
c5.692,0,8.132-4.065,8.132-13.417c-0.099,2.02-0.965,3.924-2.421,5.325
|
||
|
c-3.154,3.037-8.173,2.941-11.21-0.213
|
||
|
c-3.036-3.155-2.94-8.174,0.214-11.21
|
||
|
c3.253-3.253,11.384-9.758,17.076-21.955
|
||
|
C38.339,42.826,46.47,49.331,49.723,52.583z"/>
|
||
|
<path fill="#FFF" d="M25.115,58.682c0,2.139-1.734,3.873-3.873,3.873
|
||
|
s-3.873-1.734-3.873-3.873s1.734-3.873,3.873-3.873
|
||
|
S25.115,56.543,25.115,58.682z"/>
|
||
|
<path fill="#FFF" d="M48.485,58.682c0,2.139-1.734,3.873-3.873,3.873
|
||
|
s-3.873-1.734-3.873-3.873s1.734-3.873,3.873-3.873
|
||
|
S48.485,56.543,48.485,58.682z"/>
|
||
|
<path fill="#F00" d="M21.631,52.328
|
||
|
c3.035-2.934,7.202-11.569,11.016-17.667
|
||
|
c3.836,6.134,8.028,14.783,11.068,17.718
|
||
|
c-3.042,0.432-5.398,3.015-5.469,6.157
|
||
|
c0-12.762-1.508-17.526-5.6-21.618
|
||
|
c-4.092,4.092-5.039,8.856-5.039,21.632
|
||
|
C27.54,55.229,24.919,52.528,21.631,52.328z"/>
|
||
|
</g>
|
||
|
|
||
|
<g transform="translate(242.5, 5)" clip-path="url(#castleClip)">
|
||
|
<linearGradient id="sky" x1=".5" y1="1" x2=".5" y2="0">
|
||
|
<stop offset="0.5" style="stop-color:#8E7BFF"/>
|
||
|
<stop offset="1" style="stop-color:#810062"/>
|
||
|
</linearGradient>
|
||
|
<linearGradient id="castle" x1="0" y1=".5" x2="1" y2=".5">
|
||
|
<stop offset="0" style="stop-color:#898989"/>
|
||
|
<stop offset="0.3" style="stop-color:#A7A9A9"/>
|
||
|
<stop offset="1" style="stop-color:#898989"/>
|
||
|
</linearGradient>
|
||
|
<clipPath id="castleClip">
|
||
|
<rect rx="6" ry="6" x=".5" y=".5" width="74" height="105"/>
|
||
|
<rect rx="6" ry="6" x="80.5" y=".5" width="74" height="105"/>
|
||
|
<rect rx="6" ry="6" x="160.5" y=".5" width="74" height="105"/>
|
||
|
<rect rx="6" ry="6" x="240.5" y=".5" width="74" height="105"/>
|
||
|
</clipPath>
|
||
|
|
||
|
<rect fill="url(#sky)" x=".5" y=".5" width="315" height="105"/>
|
||
|
<g fill="#FFFFA9">
|
||
|
<path d="M10,39h-1v-1h1z"/>
|
||
|
<path d="M18,16h-1v-1h1z"/>
|
||
|
<path d="M33,25h-1v-1h1z"/>
|
||
|
<path d="M46,12h-1v-1h1z"/>
|
||
|
<path d="M59,31h-1v-1h1z"/>
|
||
|
<path d="M92,18h-1v-1h1z"/>
|
||
|
<path d="M99,29h-1v-1h1z"/>
|
||
|
<path d="M127,37h-1v-1h1z"/>
|
||
|
<path d="M140,10h-1v-1h1z"/>
|
||
|
<path d="M182,15h-1v-1h1z"/>
|
||
|
<path d="M224,20h-1v-1h1z"/>
|
||
|
<path d="M230,39h-1v-1h1z"/>
|
||
|
<path d="M253,46h-1v-1h1z"/>
|
||
|
<path d="M254,15h-1v-1h1z"/>
|
||
|
<path d="M262,32h-1v-1h1z"/>
|
||
|
<path d="M274,20h-1v-1h1z"/>
|
||
|
<path d="M280,43h-1v-1h1z"/>
|
||
|
<path d="M291,27h-1v-1h1z"/>
|
||
|
<path d="M312,39h-1v-1h1z"/>
|
||
|
</g>
|
||
|
<path fill="#C3C7D8"
|
||
|
d="M127.333,50.667c0,10.494-8.506,19-19,19s-19-8.506-19-19
|
||
|
s8.506-19,19-19S127.333,40.173,127.333,50.667z"/>
|
||
|
|
||
|
<path fill="#FFFFFF" stroke="#000000"
|
||
|
d="M257.11,68.541c-30.157-7.08-27.901-22.959-77.54-22.959
|
||
|
c-27.382,0-61.187,9.457-71.545,16.265
|
||
|
c-7.651-4.001-17.214-7.379-29.618-9.288
|
||
|
c-25.283-3.89-54.651,0-77.907,11.627V105.5h315
|
||
|
V71.163C286.928,72.842,269.354,71.415,257.11,68.541z"/>
|
||
|
<path fill="none" stroke="#000000"
|
||
|
d="M0.5,64.186c23.256-11.627,52.624-15.518,77.907-11.627
|
||
|
c30.232,4.651,43.604,18.023,53.488,27.907"/>
|
||
|
<path fill="none" stroke="#000000"
|
||
|
d="M108.025,61.846c10.358-6.808,44.163-16.265,71.545-16.265
|
||
|
c69.789,0,36.976,31.396,135.93,25.582"/>
|
||
|
|
||
|
<g fill="url(#castle)" stroke="#000">
|
||
|
<path d="M177.5,50h-7V27.5h7V50z"/>
|
||
|
<path fill="#898989" d="M201,50h-23.5V34H201V50z"/>
|
||
|
<path d="M208,50h-7V27.5h7V50z"/>
|
||
|
<path fill="#9E6D5C"
|
||
|
d="M191.922,50c0,0,0-4.658,0-6s0-3.704-2.672-5.409
|
||
|
c-2.672,1.705-2.672,4.066-2.672,5.409s0,6,0,6"/>
|
||
|
<g stroke-width="0.5">
|
||
|
<path d="M178.485,21.22v1.93h-1.409v-1.93h-2.227v1.93h-1.485v-1.93
|
||
|
h-2.227v1.93h-1.559v-1.93h-2.227v1.93h1.147v4.35h11
|
||
|
v-4.35h1.212v-1.93H178.485z"/>
|
||
|
<path d="M208.985,21.22v1.93h-1.409v-1.93h-2.227v1.93h-1.485v-1.93
|
||
|
h-2.227v1.93h-1.559v-1.93h-2.227v1.93H199v4.35h11v-4.35h1.212
|
||
|
v-1.93H208.985z"/>
|
||
|
<path fill="#9B9B49"
|
||
|
d="M205.836,39.056c0,0,0-2.329,0-3s0-1.852-1.336-2.705
|
||
|
c-1.336,0.853-1.336,2.033-1.336,2.705s0,3,0,3H205.836z"/>
|
||
|
<path fill="#9B9B49"
|
||
|
d="M175.336,39.056c0,0,0-2.329,0-3s0-1.852-1.336-2.705
|
||
|
c-1.336,0.853-1.336,2.033-1.336,2.705s0,3,0,3H175.336z"/>
|
||
|
</g>
|
||
|
</g>
|
||
|
</g>
|
||
|
|
||
|
<g fill="none" stroke="white" stroke-width="1">
|
||
|
<rect rx="6" ry="6" x="7.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="87.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="167.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="247.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="327.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="407.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="487.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="567.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="647.5" y="120" width="64" height="104"/>
|
||
|
<rect rx="6" ry="6" x="727.5" y="120" width="64" height="104"/>
|
||
|
</g>
|
||
|
|
||
|
<text x="10" y="560" fill="white" font-size="20">z/Z <tspan x="45"
|
||
|
>- Undo move</tspan></text>
|
||
|
<rect fill="none" stroke="none"
|
||
|
pointer-events="fill" onclick="BOARD.undoMove()"
|
||
|
x="0" y="540" width="170" height="22"/>
|
||
|
|
||
|
<text x="10" y="580" fill="white" font-size="20">r/R <tspan x="45"
|
||
|
>- Redo move</tspan></text>
|
||
|
<rect fill="none" stroke="none"
|
||
|
pointer-events="fill" onclick="BOARD.redoMove()"
|
||
|
x="0" y="562" width="170" height="22"/>
|
||
|
<text x="790" y="580" fill="white" font-size="20" text-anchor="end"
|
||
|
>? - Get Help</text>
|
||
|
<rect fill="none" stroke="none"
|
||
|
pointer-events="fill" onclick="BOARD.showHelp()"
|
||
|
x="675" y="560" width="125" height="25"/>
|
||
|
</g>
|
||
|
|
||
|
<g id="cards"/>
|
||
|
|
||
|
<g id="move" style="pointer-events:none; opacity: 0.75;">
|
||
|
<g id="drag" style="pointer-events:none; opacity: 0.75;"/>
|
||
|
</g>
|
||
|
|
||
|
<g id="win" style="display:none; pointer-events:none; ">
|
||
|
<rect x="0" y="115" width="800" height="485" fill="#008"
|
||
|
fill-opacity="0.75"/>
|
||
|
<text x="50%" y="50%" text-anchor="middle"
|
||
|
font-size="72" fill="white">Completed!!!</text>
|
||
|
</g>
|
||
|
|
||
|
<g id="help" style="display:none; pointer-events:none; ">
|
||
|
<rect x="0" y="115" width="800" height="485" fill="#008"
|
||
|
fill-opacity="0.85"/>
|
||
|
<text x="50%" y="160" font-size="36" fill="white" text-anchor="middle"
|
||
|
>Towers du Alice</text>
|
||
|
<text x="50" y="190" font-size="18" fill="white"
|
||
|
>This is a solitare game, as with most
|
||
|
<tspan x="50" dy="1.2em">the basic rules are very simple.</tspan>
|
||
|
|
||
|
<tspan x="50" dy="2em">The main playing field is ten colums of</tspan>
|
||
|
<tspan x="50" dy="1.2em">five cards each. Above the playing field</tspan>
|
||
|
<tspan x="50" dy="1.2em">to either side are four 'deck' piles, one</tspan>
|
||
|
<tspan x="50" dy="1.2em">for each suite, etween these are the</tspan>
|
||
|
<tspan x="50" dy="1.2em">four Towers.</tspan>
|
||
|
|
||
|
<tspan x="50" dy="2em">To start most cards are delt into the</tspan>
|
||
|
<tspan x="50" dy="1.2em">playing field. The last two cards are</tspan>
|
||
|
<tspan x="50" dy="1.2em">placed in two of the Towers.</tspan>
|
||
|
|
||
|
<tspan x="50" dy="2em">In the main playing field only a card of</tspan>
|
||
|
<tspan x="50" dy="1.2em">the same suite and one lower value can</tspan>
|
||
|
<tspan x="50" dy="1.2em">be placed on another card in the</tspan>
|
||
|
<tspan x="50" dy="1.2em">playing field. You are only allowed to</tspan>
|
||
|
<tspan x="50" dy="1.2em">'pick up' one card at a time. As a</tspan>
|
||
|
<tspan x="50" dy="1.2em">convieniece the game will allow you</tspan>
|
||
|
<tspan x="50" dy="1.2em">to 'pick up' runs of cards if you have</tspan>
|
||
|
|
||
|
<tspan x="425" y="190">enough open Towers that you could</tspan>
|
||
|
<tspan x="425" dy="1.2em">have moved the lower cards into first.</tspan>
|
||
|
|
||
|
<tspan x="425" dy="2em">The Towers are your most important</tspan>
|
||
|
<tspan x="425" dy="1.2em">asset in the game. Each Tower can hold</tspan>
|
||
|
<tspan x="425" dy="1.2em">one card. You can put any card you want</tspan>
|
||
|
<tspan x="425" dy="1.2em">at any time, you can also remove cards</tspan>
|
||
|
<tspan x="425" dy="1.2em">from the towers at any time.</tspan>
|
||
|
|
||
|
<tspan x="425" dy="2em">The game will automatically clear cards</tspan>
|
||
|
<tspan x="425" dy="1.2em">to the deck when possible. Unlike</tspan>
|
||
|
<tspan x="425" dy="1.2em">traditional Solitare this is never</tspan>
|
||
|
<tspan x="425" dy="1.2em">a bad move.</tspan>
|
||
|
|
||
|
<tspan x="425" dy="2em">This game includes Undo/Redo, this</tspan>
|
||
|
<tspan x="425" dy="1.2em">should pose no ethical dilema as all</tspan>
|
||
|
<tspan x="425" dy="1.2em">cards are visible from the start.</tspan>
|
||
|
<tspan x="425" dy="2em"
|
||
|
>Get comfortable with Undo,</tspan>
|
||
|
<tspan x="425" dy="1.2em">you will use it often.</tspan>
|
||
|
</text>
|
||
|
|
||
|
<rect x="675" y="555" width="115" height="35" rx="3" ry="3"
|
||
|
fill="#001473" stroke="white" stroke-width="2" onclick="showMore()"/>
|
||
|
<text x="732.5" y="580" fill="white" font-size="20" text-anchor="middle"
|
||
|
pointer-events="none" >More Info</text>
|
||
|
</g>
|
||
|
|
||
|
<g id="more" style="display:none; pointer-events:none; ">
|
||
|
<rect x="0" y="115" width="800" height="485" fill="#001473" />
|
||
|
<text x="50%" y="160" font-size="36" fill="white" text-anchor="middle"
|
||
|
>Towers du Alice</text>
|
||
|
<text x="50%" y="190" font-size="18" fill="white" text-anchor="middle"
|
||
|
>Art Cabral, author of the popular Seahaven Towers<tspan font-size=".6em" baseline-shift="6">(TM)</tspan>
|
||
|
<tspan x="50%" dy="1.2em">game, has assigned a proper name to the card game,</tspan>
|
||
|
<tspan x="50%" dy="1.2em">naming it after its discoverer, Alice Drennen.</tspan>
|
||
|
<tspan x="50%" dy="1.2em">Art Cabral's product will still be called Seahaven Towers<tspan font-size=".6em" baseline-shift="6">(TM)</tspan>,</tspan>
|
||
|
|
||
|
<tspan x="50%" dy="1.2em">but the solitaire card game itself will be named</tspan>
|
||
|
<tspan x="50%" dy="1.2em">"Towers du Alice."</tspan>
|
||
|
</text>
|
||
|
</g>
|
||
|
|
||
|
</svg>
|