📄 main.java
字号:
}
MountainNum = 52 - card_index;
Mountain = new Card[MountainNum];
for (int j1 = 0; j1 < MountainNum; j1++) {
Mountain[j1] = Cards[card_index];
card_index++;
Mountain[j1].SetOpened(true);
}
card_index = -1;
for (int k1 = 0; k1 < 4; k1++) {
PackNum[k1] = 0;
for (int k2 = 0; k2 < 13; k2++) {
Pack[k1][k2] = null;
}
}
setSoftLabel("\u6094\u724C", "\u8FD4\u56DE");
replay = new Command("\u91CD\u73A9", 1, 1);
addCommand(replay);
DrawAll();
start_time = (new Date()).getTime();
do {
System.gc();
Thread.sleep(40L);
if (Action()) {
DrawAll();
}
} while (!quit);
Mountain = null;
System.gc();
}
private boolean Action() throws Exception, Error {
Score--;
if (KeyEnter) {
SetHold();
} else
if (KeyShort) {
ShortCutKey();
} else
if (KeyShort2) {
cy = 0;
cx = 0;
} else
if (KeyShort3) {
cy = 0;
cx = 3;
} else
if (KeyUp) {
if (cy != 0) {
if (cy != 1 && (VRAM[cx][cy - 1].IsOpened() || VRAM[cx][cy] == null && !VRAM[cx][cy - 1].IsOpened())) {
cy--;
} else
if (cx != 2) {
cy = 0;
}
} else
if (vy > 1) {
vy--;
}
for (; cy != 0 && vy != 1 && vy >= cy; vy--) { }
} else
if (KeyDown) {
if (cy == 0) {
cy = CheckYPos(1);
} else
if (VRAM[cx][cy] != null) {
cy = CheckYPos(cy + 1);
}
for (; vy != 1 && vy >= cy; vy--) { }
for (; vy != 20 && VRAM[cx][vy + 1] != null && (vy + VertNum) - 1 <= cy; vy++) { }
} else
if (KeyLeft) {
if (cy == 0) {
if (cx == 3) {
cx = 1;
} else
if (cx != 0) {
cx--;
}
} else {
if (cx != 0) {
cx--;
}
for (cy = CheckYPos(cy); vy != 1 && vy >= cy; vy--) { }
for (; vy != 20 && (vy + VertNum) - 1 <= cy; vy++) { }
}
} else
if (KeyRight) {
if (cy == 0) {
if (cx == 1) {
cx = 3;
} else
if (cx != 6) {
cx++;
}
} else {
if (cx != 6) {
cx++;
}
for (cy = CheckYPos(cy); vy != 1 && vy >= cy; vy--) { }
for (; vy != 20 && (vy + VertNum) - 1 <= cy; vy++) { }
}
} else
if (SoftKey1) {
if (undo) {
undo = false;
if (card_index != -1) {
for (card_index--; card_index >= 0 && Mountain[card_index].IsUsed(); card_index--) { }
if (card_index == -1) {
MountainCtr++;
}
Score -= 80;
}
}
} else
if (SoftKey2) {
quit = true;
GameMode = 0;
} else {
Score++;
return false;
}
SoftKey1 = SoftKey2 = KeyUp = KeyDown = KeyLeft = KeyRight = KeyEnter = KeyShort = KeyShort2 = KeyShort3 = false;
return true;
}
private int CheckYPos(int i) {
if (i == 0) {
return 0;
}
if (VRAM[cx][i] == null) {
if (i > 1 && VRAM[cx][i - 1] != null) {
return i;
}
} else
if (VRAM[cx][i].IsOpened()) {
return i;
}
if (VRAM[cx][1] == null) {
return 1;
}
if (cy == 0 || VRAM[cx][i] != null) {
for (i = 1; VRAM[cx][i + 1] != null && !VRAM[cx][i].IsOpened(); i++) { }
} else {
for (i = 20; VRAM[cx][i] == null && VRAM[cx][i - 1] == null; i--) { }
}
return i;
}
private void ShortCutKey() throws Exception, Error {
if (HoldCardNum != 0) {
return;
}
if (cy != 0) {
if (VRAM[cx][cy] == null && VRAM[cx][cy - 1] != null) {
cy--;
}
if (VRAM[cx][cy] != null && CheckRedAndBlack()) {
int i;
for (i = cy; VRAM[cx][i + 1] != null; i++) { }
for (; i >= cy && MoveShortCut(VRAM[cx][i]); i--) {
VRAM[cx][i] = null;
}
}
} else
if (cy == 0 && cx == 1 && card_index != -1 && MoveShortCut(Mountain[card_index])) {
Mountain[card_index].SetUsed(true);
MountainNum--;
if (MountainNum != 0) {
for (card_index--; card_index >= 0 && Mountain[card_index].IsUsed(); card_index--) { }
if (card_index == -1) {
MountainCtr++;
}
} else {
MountainCtr = 0;
card_index = -1;
}
}
CheckComplete();
}
private boolean MoveShortCut(Card card) {
int i = card.getType();
int j = card.getNum();
if (!card.IsOpened()) {
return false;
}
if (PackNum[i] == 0 && j == 1) {
Pack[i][0] = card;
PackNum[i]++;
Score += 50;
return true;
}
if (PackNum[i] != 0 && Pack[i][PackNum[i] - 1].getNum() == j - 1) {
Pack[i][PackNum[i]] = card;
PackNum[i]++;
Score += 50;
return true;
} else {
return false;
}
}
private void SetHold() throws Exception, Error {
if (HoldCardNum == 0) {
if (cy == 0) {
int i;
for (i = Mountain.length - 1; i >= 0 && Mountain[i].IsUsed(); i--) { }
if (cx == 0) {
if (MountainNum == 0 || card_index == i && MountainCtr == 0) {
String as[] = {
"\u653E\u5F03", ""
};
as[1] = Score + "\u5206\u6570";
if (kd.s < Score) {
kd.s = Score;
RecordStore recordstore = null;
try {
recordstore = RecordStore.openRecordStore("Klondike", false);
byte abyte0[] = new byte[2];
abyte0[0] = (byte)(Score >> 8 & 0xff);
abyte0[1] = (byte)(Score & 0xff);
recordstore.setRecord(1, abyte0, 0, abyte0.length);
recordstore.closeRecordStore();
}
catch (Exception exception) {
try {
recordstore.closeRecordStore();
}
catch (Exception exception1) { }
}
}
PopupBalloon(as, 2000, df);
quit = true;
return;
}
if (card_index == -1) {
card_index = 0;
MountainCtr--;
} else {
card_index++;
}
for (; i >= card_index && Mountain[card_index].IsUsed(); card_index++) { }
if (i < card_index) {
card_index = -1;
}
undo = true;
} else
if (cx == 1 && card_index != -1) {
HoldPointY = 0;
HoldPointX = 1;
HoldCards[0] = Mountain[card_index];
Mountain[card_index].SetUsed(true);
card_index2 = card_index;
HoldCardNum = 1;
MountainNum--;
if (MountainNum != 0) {
for (card_index--; card_index >= 0 && Mountain[card_index].IsUsed(); card_index--) { }
if (card_index == -1) {
MountainCtr++;
}
} else {
MountainCtr = 0;
card_index = -1;
}
}
} else {
if (VRAM[cx][cy] == null && VRAM[cx][cy - 1] != null) {
cy--;
}
if (VRAM[cx][cy] != null) {
if (VRAM[cx][cy].IsOpened()) {
if (CheckRedAndBlack()) {
int j;
HoldPointY = j = cy;
for (; VRAM[cx][j] != null; j++) {
HoldCards[HoldCardNum] = VRAM[cx][j];
VRAM[cx][j] = null;
HoldCardNum++;
}
HoldPointX = cx;
}
} else {
VRAM[cx][cy].SetOpened(true);
Score += 20;
}
}
}
} else
if (cy == 0) {
if (cx > 2) {
int k;
for (k = HoldCardNum - 1; k >= 0 && MoveShortCut(HoldCards[k]); k--) { }
HoldCardNum = k + 1;
CheckComplete();
} else {
PutCards(HoldPointX, HoldPointY);
}
} else {
int l;
for (l = cy; VRAM[cx][l] != null; l++) { }
if (VRAM[cx][l] == null) {
if (l == 1) {
if (HoldCards[0].getNum() == 13) {
PutCards(cx, l);
} else {
PutCards(HoldPointX, HoldPointY);
}
} else {
Card card = VRAM[cx][l - 1];
Card card1 = HoldCards[0];
if (card.getNum() == card1.getNum() + 1 && (card.IsRed() && card1.IsBlack() || card.IsBlack() && card1.IsRed())) {
PutCards(cx, l);
} else {
PutCards(HoldPointX, HoldPointY);
}
}
CheckComplete();
} else {
PutCards(HoldPointX, HoldPointY);
}
for (; VRAM[cx][cy] != null && !VRAM[cx][cy].IsOpened(); cy++) { }
}
}
private void PutCards(int i, int j) {
if (j != 0) {
for (int k = 0; k < HoldCardNum; k++) {
VRAM[i][j + k] = HoldCards[k];
}
if (HoldPointY == 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -