mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:32:56 +00:00
[spider]
- Check for completed stack after dealing cards by installing one function to do this in call three cases, bug #4886 - Fix and simplify drop rules (only by number) and validation rules (by number and type) for two and four color games - Fix typo in Polish Translation svn path=/trunk/; revision=43441
This commit is contained in:
parent
26a8c4b69a
commit
3a38bb048a
2 changed files with 62 additions and 76 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* PROJECT: Spider Solitaire
|
* PROJECT: Spider Solitaire
|
||||||
* LICENSE: See COPYING in top level directory
|
* LICENSE: See COPYING in top level directory
|
||||||
* FILE: base/applications/games/spider/lang/en-US.rc
|
* FILE: base/applications/games/spider/lang/pl-PL.rc
|
||||||
* PURPOSE: Polish Language File for Spider Solitaire
|
* PURPOSE: Polish Language File for Spider Solitaire
|
||||||
* TRANSLATOR: Maciej Bialas
|
* TRANSLATOR: Maciej Bialas
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -98,13 +98,44 @@ void NewGame(void)
|
||||||
fGameStarted = false;
|
fGameStarted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool stackLookingGood(const CardStack &mystack, int numChecks)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < numChecks; i++)
|
||||||
|
{
|
||||||
|
if (mystack[i].LoVal() != mystack[i + 1].LoVal() - 1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (mystack[i].Suit() != mystack[i + 1].Suit())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Card to be turned from a stack */
|
||||||
|
void TurnStackCard(CardRegion &stackobj)
|
||||||
|
{
|
||||||
|
int numfacedown;
|
||||||
|
|
||||||
|
stackobj.GetFaceDirection(&numfacedown);
|
||||||
|
if (stackobj.NumCards() <= numfacedown)
|
||||||
|
{
|
||||||
|
if (numfacedown > 0) numfacedown--;
|
||||||
|
stackobj.SetFaceDirection(CS_FACE_DOWNUP, numfacedown);
|
||||||
|
stackobj.Redraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Click on the deck */
|
/* Click on the deck */
|
||||||
void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int NumDragCards)
|
void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int NumDragCards)
|
||||||
{
|
{
|
||||||
CardStack temp, fakeDeck = pDeck->GetCardStack();
|
CardStack temp, fakeDeck = pDeck->GetCardStack();
|
||||||
fGameStarted = true;
|
fGameStarted = true;
|
||||||
int i;
|
int i, j, facedown, faceup;
|
||||||
|
|
||||||
if (fakeDeck.NumCards() != 0 && deck.NumCards() != 0)
|
if (fakeDeck.NumCards() != 0 && deck.NumCards() != 0)
|
||||||
{
|
{
|
||||||
/* Add one card to every stack */
|
/* Add one card to every stack */
|
||||||
|
@ -112,6 +143,25 @@ void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int NumDragCards)
|
||||||
{
|
{
|
||||||
temp = pStack[i]->GetCardStack();
|
temp = pStack[i]->GetCardStack();
|
||||||
temp.Push(deck.Pop());
|
temp.Push(deck.Pop());
|
||||||
|
|
||||||
|
/* Check if we accidentally finished a row */
|
||||||
|
pStack[i]->GetFaceDirection(&facedown);
|
||||||
|
faceup = temp.NumCards() - facedown;
|
||||||
|
if (faceup >= NUM_ONECOLOR_CARDS)
|
||||||
|
{
|
||||||
|
/* Check stack finished, remove cards if so */
|
||||||
|
if (stackLookingGood(temp, NUM_ONECOLOR_CARDS - 1))
|
||||||
|
{
|
||||||
|
for (j = 0; j < NUM_ONECOLOR_CARDS; j++)
|
||||||
|
{
|
||||||
|
temp.RemoveCard(0);
|
||||||
|
}
|
||||||
|
cardsFinished += NUM_ONECOLOR_CARDS;
|
||||||
|
pStack[i]->SetCardStack(temp);
|
||||||
|
/* Turn now topmost card */
|
||||||
|
TurnStackCard(*pStack[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
pStack[i]->SetCardStack(temp);
|
pStack[i]->SetCardStack(temp);
|
||||||
}
|
}
|
||||||
/* Remove one card from the fake ones */
|
/* Remove one card from the fake ones */
|
||||||
|
@ -124,7 +174,7 @@ void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int NumDragCards)
|
||||||
/* Cards dragged from a stack */
|
/* Cards dragged from a stack */
|
||||||
bool CARDLIBPROC StackDragProc(CardRegion &stackobj, int numDragCards)
|
bool CARDLIBPROC StackDragProc(CardRegion &stackobj, int numDragCards)
|
||||||
{
|
{
|
||||||
int numfacedown, numcards, i;
|
int numfacedown, numcards;
|
||||||
|
|
||||||
stackobj.GetFaceDirection(&numfacedown);
|
stackobj.GetFaceDirection(&numfacedown);
|
||||||
numcards = stackobj.NumCards();
|
numcards = stackobj.NumCards();
|
||||||
|
@ -134,30 +184,9 @@ bool CARDLIBPROC StackDragProc(CardRegion &stackobj, int numDragCards)
|
||||||
{
|
{
|
||||||
const CardStack &mystack = stackobj.GetCardStack();
|
const CardStack &mystack = stackobj.GetCardStack();
|
||||||
/* Don't allow to drag unsuited cards */
|
/* Don't allow to drag unsuited cards */
|
||||||
for (i = 0; i < numDragCards - 1; i++)
|
if (!stackLookingGood(mystack, numDragCards - 1))
|
||||||
{
|
{
|
||||||
if (mystack[i].LoVal() != mystack[i + 1].LoVal() - 1)
|
return false;
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
switch (dwDifficulty)
|
|
||||||
{
|
|
||||||
case IDC_DIF_ONECOLOR:
|
|
||||||
break;
|
|
||||||
case IDC_DIF_TWOCOLORS:
|
|
||||||
if ((mystack[i].IsBlack() && mystack[i + 1].IsBlack()) ||
|
|
||||||
(mystack[i].IsRed() && mystack[i + 1].IsRed()))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case IDC_DIF_FOURCOLORS:
|
|
||||||
if (mystack[i].Suit() != mystack[i + 1].Suit())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* Remember where the cards come from */
|
/* Remember where the cards come from */
|
||||||
from = &stackobj;
|
from = &stackobj;
|
||||||
|
@ -193,20 +222,6 @@ void CARDLIBPROC StackAddProc(CardRegion &stackobj, const CardStack &added)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Card to be turned from a stack */
|
|
||||||
void TurnStackCard(CardRegion &stackobj)
|
|
||||||
{
|
|
||||||
int numfacedown;
|
|
||||||
|
|
||||||
stackobj.GetFaceDirection(&numfacedown);
|
|
||||||
if (stackobj.NumCards() <= numfacedown)
|
|
||||||
{
|
|
||||||
if (numfacedown > 0) numfacedown--;
|
|
||||||
stackobj.SetFaceDirection(CS_FACE_DOWNUP, numfacedown);
|
|
||||||
stackobj.Redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Cards dropped to a stack */
|
/* Cards dropped to a stack */
|
||||||
bool CARDLIBPROC StackDropProc(CardRegion &stackobj, CardStack &dragcards)
|
bool CARDLIBPROC StackDropProc(CardRegion &stackobj, CardStack &dragcards)
|
||||||
{
|
{
|
||||||
|
@ -230,49 +245,20 @@ bool CARDLIBPROC StackDropProc(CardRegion &stackobj, CardStack &dragcards)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Can only drop if card matches colour rule */
|
|
||||||
switch (dwDifficulty)
|
|
||||||
{
|
|
||||||
case IDC_DIF_ONECOLOR:
|
|
||||||
break;
|
|
||||||
case IDC_DIF_TWOCOLORS:
|
|
||||||
if ((mystack[0].IsBlack() && dragcard.IsRed()) ||
|
|
||||||
(mystack[0].IsRed() && dragcard.IsBlack()))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case IDC_DIF_FOURCOLORS:
|
|
||||||
if (mystack[0].Suit() != dragcard.Suit())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* Check if stack complete */
|
/* Check if stack complete */
|
||||||
stackobj.GetFaceDirection(&facedown);
|
stackobj.GetFaceDirection(&facedown);
|
||||||
faceup = stackobj.NumCards() - facedown;
|
faceup = stackobj.NumCards() - facedown;
|
||||||
|
|
||||||
if (faceup + dragcards.NumCards() >= NUM_ONECOLOR_CARDS)
|
if (faceup + dragcards.NumCards() >= NUM_ONECOLOR_CARDS)
|
||||||
{
|
{
|
||||||
int i, max = NUM_ONECOLOR_CARDS - dragcards.NumCards() - 1;
|
int i, max = NUM_ONECOLOR_CARDS - dragcards.NumCards() - 1;
|
||||||
BOOL remove = true;
|
|
||||||
|
/* Dragged cards have been checked to be in order, check stack cards */
|
||||||
/* Dragged cards have been checked to be in order, start with the first stack card */
|
if (stackLookingGood(mystack, max))
|
||||||
for (i = 0; i < max; i++)
|
|
||||||
{
|
|
||||||
if (mystack[i].Suit() != mystack[i + 1].Suit() ||
|
|
||||||
mystack[i].LoVal() != mystack[i + 1].LoVal() - 1)
|
|
||||||
{
|
|
||||||
remove = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (remove)
|
|
||||||
{
|
{
|
||||||
CardStack s = stackobj.GetCardStack();
|
CardStack s = stackobj.GetCardStack();
|
||||||
CardStack f;
|
CardStack f;
|
||||||
|
|
||||||
/* Remove from card stack */
|
/* Remove from card stack */
|
||||||
for (i = 0; i < max + 1; i++)
|
for (i = 0; i < max + 1; i++)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue