📄 gamescreen.java
字号:
if((j = matrix.judge(X, Y, XX, YY, true)) > 0)
{
Score += j;
repaint();
serviceRepaints();
j = 0;
playbs(bs_clear);
if(SoundVolume == 0)
{
for(int i = 0; i < 0x3ffff; i++)
j++;
}
matrix.setAt(X, Y, -1);
matrix.setAt(XX, YY, -1);
if(X == X1 + 1 && Y == Y1 + 1 || X == X2 + 1 && Y == Y2 + 1 || XX == X1 + 1 && YY == Y1 + 1 || XX == X2 + 1 && YY == Y2 + 1)
{
X1 = -1;
Y1 = -1;
X2 = -1;
Y2 = -1;
}
XX = -1;
YY = -1;
matrix.clearTrace();
TimeLeft += 2;
if(TimeLeft > TimeTotal)
TimeLeft = TimeTotal;
if(matrix.getRest() == 0)
Success();
matrix.rearrange(CurrentRound);
if(matrix.find() == 0)
if(RestShuffle > 0)
{
do
matrix.shuffleMatrix();
while(matrix.find() == 0);
RestShuffle--;
matrix.rearrange(CurrentRound);
playbs(bs_shuffle);
} else
{
plays(s_gameover);
GameEnd();
}
repaint();
} else
{
XX = -1;
YY = -1;
playbs(bs_error);
}
repaint();
}
break;
case 1: // '\001'
Y--;
if(Y < 1)
Y = VCount;
repaint();
break;
case 6: // '\006'
Y++;
if(Y > VCount)
Y = 1;
repaint();
break;
case 2: // '\002'
X--;
if(X < 1)
X = HCount;
repaint();
break;
case 5: // '\005'
X++;
if(X > HCount)
X = 1;
repaint();
break;
}
}
public void paint(Graphics g)
{
if(Ended)
endpaint();
else
if(!Paused)
activepaint();
else
pausepaint();
flushGraphics();
}
private void pausepaint()
{
Graphics g = getGraphics();
g.setColor(0);
g.fillRect(0, 0, ScreenWidth, ScreenHeight);
g.setColor(255, 255, 255);
g.drawImage(PauseImage, (ScreenWidth - PauseImage.getWidth()) / 2, (ScreenHeight - PauseImage.getHeight()) / 2 - 14, 0);
paintscoreboard(g);
}
private void activepaint()
{
Graphics g = getGraphics();
paintbackground(g);
paintmaze(g);
paintscoreboard(g);
}
private void endpaint()
{
Graphics g = getGraphics();
g.setColor(0);
g.fillRect(0, 0, ScreenWidth, ScreenHeight);
g.setColor(255, 255, 255);
try
{
Image img = Image.createImage("/res/img/gameover.png");
g.drawImage(img, (ScreenWidth - img.getWidth()) / 2, (ScreenHeight - img.getHeight()) / 2, 0);
img = null;
}
catch(Exception e)
{
e.printStackTrace();
}
paintscoreboard(g);
}
private void paintbackground(Graphics g)
{
g.setColor(BackColor);
g.fillRect(0, 0, ScreenWidth, ScreenHeight);
}
private void paintmaze(Graphics g)
{
boolean h1 = false;
boolean v1 = false;
boolean h2 = false;
boolean v2 = false;
for(int x = 0; x < HCount; x++)
{
for(int y = 0; y < VCount; y++)
{
int b = matrix.getAt(x + 1, y + 1);
if(x == 0)
if(h1)
{
if(b == matrix.HConn || b / 100 == matrix.HConn)
{
h1 = false;
g.setColor(LineColor);
g.fillRect(0, y * VSize + YMargin, LineSize, VSize / 2);
g.fillRect(0, (y * VSize + YMargin + VSize / 2) - 1, XMargin - 1, LineSize);
} else
{
g.setColor(LineColor);
g.fillRect(0, y * VSize + YMargin, LineSize, VSize - 1);
}
} else
if(b == matrix.HConn || b / 100 == matrix.HConn)
{
h1 = true;
g.setColor(LineColor);
g.fillRect(0, (y * VSize + YMargin + VSize / 2) - 1, LineSize, VSize / 2);
g.fillRect(0, (y * VSize + YMargin + VSize / 2) - 1, XMargin - 1, LineSize);
}
if(x == HCount - 1)
if(h2)
{
if(b == matrix.HConn || b / 100 == matrix.HConn)
{
h2 = false;
g.setColor(LineColor);
g.fillRect((HCount * HSize + XMargin * 2) - 4, y * VSize + YMargin, LineSize, VSize / 2);
g.fillRect(HCount * HSize + XMargin, (y * VSize + YMargin + VSize / 2) - 1, XMargin - 1, LineSize);
} else
{
g.setColor(LineColor);
g.fillRect((HCount * HSize + XMargin * 2) - 4, y * VSize + YMargin, LineSize, VSize - 1);
}
} else
if(b == matrix.HConn || b / 100 == matrix.HConn)
{
h2 = true;
g.setColor(LineColor);
g.fillRect((HCount * HSize + XMargin * 2) - 4, (y * VSize + YMargin + VSize / 2) - 1, LineSize, VSize / 2);
g.fillRect(HCount * HSize + XMargin, (y * VSize + YMargin + VSize / 2) - 1, XMargin - 1, LineSize);
}
if(y == 0)
if(v1)
{
if(b == matrix.VConn || b / 100 == matrix.VConn)
{
v1 = false;
g.setColor(LineColor);
g.fillRect(x * HSize + XMargin, 0, HSize / 2, LineSize);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, 0, LineSize, YMargin - 1);
} else
{
g.setColor(LineColor);
g.fillRect(x * HSize + XMargin, 0, HSize - 1, LineSize);
}
} else
if(b == matrix.VConn || b / 100 == matrix.VConn)
{
v1 = true;
g.setColor(LineColor);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, 0, LineSize, YMargin - 1);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, 0, HSize / 2, LineSize);
}
if(y == VCount - 1)
if(v2)
{
if(b == matrix.VConn || b / 100 == matrix.VConn)
{
v2 = false;
g.setColor(LineColor);
g.fillRect(x * HSize + XMargin, (VSize * VCount + YMargin * 2) - 4, HSize / 2, LineSize);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, VSize * VCount + YMargin, LineSize, YMargin - 1);
} else
{
g.setColor(LineColor);
g.fillRect(x * HSize + XMargin, (VSize * VCount + YMargin * 2) - 4, HSize - 1, LineSize);
}
} else
if(b == matrix.VConn || b / 100 == matrix.VConn)
{
v2 = true;
g.setColor(LineColor);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, VSize * VCount + YMargin, LineSize, YMargin - 1);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, (VSize * VCount + YMargin * 2) - 4, HSize / 2, LineSize);
}
if(b < matrix.SConn * 100)
b = -b % 100 + matrix.SConn;
if(b >= 0 && b < SeedCount)
if((X1 != x || Y1 != y) && (X2 != x || Y2 != y))
{
g.setColor(OuterColor);
g.drawImage(images[b], x * HSize + XMargin + 1, y * VSize + YMargin + 1, 0);
g.drawRect(x * HSize + XMargin, y * VSize + YMargin, HSize, VSize);
} else
{
g.setColor(HintColor);
g.drawImage(images[b], x * HSize + XMargin + 1, y * VSize + YMargin + 1, 0);
g.drawRect(x * HSize + XMargin, y * VSize + YMargin, HSize - 2, VSize - 2);
g.drawRect(x * HSize + XMargin + 1, y * VSize + YMargin + 1, HSize - 3, VSize - 3);
}
if(b <= matrix.VConn)
{
g.setColor(LineColor);
if(b == matrix.VConn)
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, y * VSize + YMargin, LineSize, VSize - 1);
if(b == matrix.HConn)
g.fillRect(x * HSize + XMargin, (y * VSize + YMargin + VSize / 2) - 1, HSize - 1, LineSize);
if(b == matrix.LDConn)
{
g.fillRect(x * HSize + XMargin, (y * VSize + YMargin + VSize / 2) - 1, HSize / 2, LineSize);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, (y * VSize + YMargin + VSize / 2) - 1, LineSize, VSize / 2);
}
if(b == matrix.LUConn)
{
g.fillRect(x * HSize + XMargin, (y * VSize + YMargin + VSize / 2) - 1, HSize / 2, LineSize);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, y * VSize + YMargin, LineSize, VSize / 2);
}
if(b == matrix.RDConn)
{
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, (y * VSize + YMargin + VSize / 2) - 1, HSize / 2, LineSize);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, (y * VSize + YMargin + VSize / 2) - 1, LineSize, VSize / 2);
}
if(b == matrix.RUConn)
{
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, (y * VSize + YMargin + VSize / 2) - 1, HSize / 2, LineSize);
g.fillRect((x * HSize + XMargin + HSize / 2) - 1, y * VSize + YMargin, LineSize, VSize / 2);
}
}
}
}
g.setColor(RectColor);
g.drawRect(((X - 1) * HSize - 1) + XMargin, ((Y - 1) * VSize - 1) + YMargin, HSize - 1, VSize - 1);
g.drawRect((X - 1) * HSize + XMargin, (Y - 1) * VSize + YMargin, HSize - 1, VSize - 1);
g.setColor(SeleColor);
g.drawRect((XX - 1) * HSize + 1 + XMargin, (YY - 1) * VSize + 1 + YMargin, HSize - 3, VSize - 3);
g.drawRect((XX - 1) * HSize + XMargin, (YY - 1) * VSize + YMargin, HSize - 3, VSize - 3);
}
private void paintscoreboard(Graphics g)
{
g.setColor(ScoreColor);
g.drawString("$" + Score, 5, ScreenHeight - 12, 0);
g.drawImage(ShuffleImage, ScreenWidth - 67, ScreenHeight - 13, 0);
if(RestShuffle < 100)
g.drawString(RestShuffle + " ", ScreenWidth - 54, ScreenHeight - 13, 0);
else
g.drawString("99", ScreenWidth - 54, ScreenHeight - 13, 0);
g.drawImage(HintImage, ScreenWidth - 33, ScreenHeight - 13, 0);
if(RestHint < 100)
g.drawString(RestHint + " ", ScreenWidth - 23, ScreenHeight - 13, 0);
else
g.drawString("99", ScreenWidth - 23, ScreenHeight - 13, 0);
g.setColor(TimeColor);
g.fillRect(50, ScreenHeight - 13, (TimeWidth * TimeLeft) / TimeTotal + 1, 12);
g.setColor(0);
g.drawString("Round " + CurrentRound, 52, ScreenHeight - 13, 0);
g.setColor(0xffffff);
g.drawRect(50, ScreenHeight - 13, TimeWidth, 12);
if(HASSOUND)
g.drawImage(SoundImages[SoundVolume / 25], 53 + TimeWidth, ScreenHeight - 13, 0);
g.setColor(255, 255, 255);
g.drawRect(ScreenWidth - 10, ScreenHeight - 10, 9, 9);
g.drawLine(ScreenWidth - 10, ScreenHeight - 10, ScreenWidth, ScreenHeight);
g.drawLine(ScreenWidth - 10, ScreenHeight, ScreenWidth, ScreenHeight - 10);
}
protected void showNotify()
{
}
protected void hideNotify()
{
}
public boolean HASSOUND;
public boolean HASTEST;
private static final int KEY_SOFTKEY1 = -6;
private static final int KEY_SOFTKEY2 = -7;
private static final int KEY_SOFTKEY3 = -5;
private int ScreenHeight;
private int ScreenWidth;
private int X;
private int Y;
private int XX;
private int YY;
private int X1;
private int X2;
private int Y1;
private int Y2;
private int VStep;
private int HStep;
private int VSizes[] = {
25, 25, 25
};
private int HSizes[] = {
25, 25, 25
};
private int VCounts[] = {
8, 10, 12
};
private int HCounts[] = {
8, 8, 8
};
public int VSize;
public int HSize;
private int VCount;
private int HCount;
private int SeedCounts[] = {
20, 27, 35
};
public int SeedCount;
public int ImageCount;
private int XMargins[] = {
4, 4, 4
};
private int YMargins[] = {
4, 4, 4
};
private int XMargin;
private int YMargin;
private int HintOffset;
private int LineSize;
private int LineColor;
private int BackColor;
private int RectColor;
private int SeleColor;
private int OuterColor;
private int HintColor;
private int TimeColor;
private Player player;
private VolumeControl vc;
private byte bs_error[];
private byte bs_clear[];
private byte bs_shuffle[];
private byte bs_global[];
private String s_win;
private String s_gameover;
private int SoundVolume;
public Image SoundImages[];
private int CurrentRound;
private int Score;
private int ScoreColor;
private MatchIt2 parent;
private MainMenu myparent;
private int RestShuffle;
private int RestHint;
private int TimeLeft;
private int TimeTotal;
private int TimeWidth;
private TimerTask timertask;
private Timer timer;
public int Level;
public boolean Paused;
public boolean Ended;
public Image images[];
public Image HintImage;
public Image ShuffleImage;
public Image PauseImage;
private GameMatrix matrix;
private GameWin gamewin;
private FireworksCanvas fireworks;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -