/*
* Solitaire (source codes)
* written by: Arthur Gapusan
*
*
* ICS-20 B
* Xavier University Ateneo de Cagayan
*
*
* Q & A to
* http://www.planet-java.biz.ly
*/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;
/*
*/
class SuperQueue {
int num[];
int readyOut[];
int size;
SuperQueue(int s) {
num = new int[s];
readyOut = new int[s];
size = -1;
}
void enQueue(int item) {
if (size==num.length-1)
System.out.println("Queue is full");
else
num[++size] = item;
}
int deQueue() {
if (size<0)
System.out.println("--> Queue is empty");
else {
for(int i=size, j=0;i>=0;i--, j++)
readyOut[j] = num[i];
for(int i=size-1, j=0;i>=0;i--, j++)
num[j] = readyOut[i];
return readyOut[size--];
}
return 0;
}
}
class StackOfCards {
int stck[];
int tos;
StackOfCards(int size) {
stck = new int[size];
tos = - 1;
}
void push(int item) {
if (tos==stck.length-1);
else
stck[++tos] = item;
}
int pop() {
if (tos < 0)
return 53;
else
return stck[tos--];
}
}
class Card {
int cardNumber;
int cardType;
int cardOrder;
Card(int i, int k, int c) {
cardNumber = i;
cardType = k;
cardOrder = c;
}
}
class Generate {
Card card[] = new Card[52];
Generate() {
Random rand = new Random();
int taken[] = new int[52];
int taken2[] = new int[52];
outer:
for (int count=0;count<52; ) {
int i = rand.nextInt(13);
int k = rand.nextInt(4);
if (count == 0) {
taken[count] = i;
taken2[count] = k;
card[count] = new Card(i, k, count);
count++;
continue outer;
}
for (int j=0;j10) && (x<90)) && ((y>10) && (y<130))) {
if (increment == 23) {
drawEmptyDeck();
}
else {
if (sizeOfCardsInDC == (-1)) {
tempOrder = tempCard[increment].cardOrder;
drawCard(110, 10, gen.card[tempOrder].cardNumber, gen.card[tempOrder].cardType, true, false, true);
sizeOfCardsInDC++;
}
else {
dc.push(tempOrder);
sizeOfStackInDC++;
increment++;
tempOrder = tempCard[increment].cardOrder;
deleteCard(110, 10);
drawCard(110, 10, gen.card[tempOrder].cardNumber, gen.card[tempOrder].cardType, true, false, true);
sizeOfCardsInDC++;
}
}
}
if (((x>110) && (x<190)) && ((y>10) && (y<130))) {
if (cardSelected) {
drawCard(110, 10, gen.card[tempOrder].cardNumber, gen.card[tempOrder].cardType, true, false, true);
cardSelected = false;
cardFromDeck = false;
coordinated = false;
}
else {
drawCard(110, 10, gen.card[tempOrder].cardNumber, gen.card[tempOrder].cardType, true, true, true);
cardSelected = true;
cardFromDeck = true;
coordinated = false;
}
}
for (i=0;i<7;i++) {
if (((x>locationX[i]) && (x<(locationX[i]+80))) && ((y>locationY[i]) && (y<(locationY[i]+120)))) {
if (cardSelected) {
if ((temp == i) && (coordinated==false)) {
cardSelected = false;
drawCard(locationX[i], locationY[i], gen.card[cards[i][sizeOfCards[i]]].cardNumber, gen.card[cards[i][sizeOfCards[i]]].cardType, true, false, true);
checkPreviousStack();
}
if ((temp == i) && (coordinated)) {
for (int l=coordinatedY;lpileX[p]) && (x<(pileX[p]+80))) && ((y>pileY[p]) && (y<(pileY[p]+120)))) {
if (cardSelected) {
if (cardFromDeck) {
if (gen.card[tempOrder].cardNumber==sizeOfPile[p]) {
if (gen.card[tempOrder].cardType==pileA[p]) {
drawCard(pileX[p], pileY[p], gen.card[tempOrder].cardNumber, gen.card[tempOrder].cardType, true, false, true);
deleteCard(110, 10);
int value = dc.pop();
drawCard(110, 10, gen.card[value].cardNumber, gen.card[value].cardType, true, false, true);
tempOrder = value;
sizeOfPile[p]++;
cardSelected = false;
cardFromDeck = false;
}
}
}
if (gen.card[order].cardNumber==sizeOfPile[p]) {
if (gen.card[order].cardType==pileA[p]) {
drawCard(pileX[p], pileY[p], gen.card[order].cardNumber, gen.card[order].cardType, true, false, true);
sizeOfCards[temp]--;
sizeOfPile[p]++;
cardSelected = false;
checkPreviousStack();
}
}
}
}
}
for (int k=0;k<7;k++) {
if (((x>locationX[k]) && (x160) && (y(computedY+(sizeOfStack[k]*12))) {
initializedY = computedY + (sizeOfStack[k]*12);
int finalizedY = y - initializedY;
coordinatedY = finalizedY / 12;
cardSelected = true;
for (int l=coordinatedY;l