/* * 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