📄 gamemap.java
字号:
g.setColor(24,142,24);
xPos = 20 + 52 - (iTimeCount * 4);
g.drawRect(xPos,113 + 4 ,iTimeCount * 4,4);
g.fillRect(xPos,113 + 4,iTimeCount * 4,4);
//strV = String.valueOf(iTimeCount);
//g.drawString(strV, 0, 113, Graphics.LEFT | Graphics.TOP);
g.setColor(0, 0, 255);
//显示游戏关数
strV = String.valueOf(m_GameLevelValue);
g.drawString(strV, 0, 113, Graphics.LEFT | Graphics.TOP);
//显示金币数
strV = String.valueOf(m_GameCurAmt);
g.drawString(strV, 90, 113, Graphics.LEFT | Graphics.TOP);
} catch (IllegalArgumentException ei) {
System.err.println("catch(IllegalArgumentException ei)");
} catch (NullPointerException en) {
System.err.println("catch(NullPointerException en");
}
}
private void PaintCourse(Graphics g) {
int tx, ty;
g.setColor(41, 24, 90);
if (m_SelectOne) {//画选择框
tx = 5 + (m_select_x - 1) * 13 + (m_select_x - 1) * 2 - 2;
ty = 5 + (m_select_y - 1) * 13 + (m_select_y - 1) * 2 - 2;
g.drawRect(tx, ty, 16, 16);
}
//画移动框
tx = 4 + (m_role_x - 1) * 13 + (m_role_x - 1) * 2 - 1;
ty = 4 + (m_role_y - 1) * 13 + (m_role_y - 1) * 2 - 1;
g.drawLine(tx, ty, tx + 5, ty);
g.drawLine(tx + 10, ty, tx + 16, ty);
g.drawLine(tx, ty, tx, ty + 5);
g.drawLine(tx, ty + 10, tx, ty + 16);
g.drawLine(tx + 16, ty, tx + 16, ty + 5);
g.drawLine(tx + 16, ty + 10, tx + 16, ty + 16);
g.drawLine(tx, ty + 16, tx + 5, ty + 16);
g.drawLine(tx + 10, ty + 16, tx + 16, ty + 16);
g.drawLine(tx + 8, ty + 4, tx + 8, ty + 11);
g.drawLine(tx + 4, ty + 8, tx + 11, ty + 8);
//g.drawRect(tx,ty, 17, 17);
//g.drawLine();
}
private void PaintGameMap(Graphics g) {
int ix, iy, irx, iry;
g.setColor(255, 182, 255);
g.fillRect(0, 0, stPixel_x, stPixel_y);
iry = 5;
for (int y = 1; y < stMap_y - 1; y++) {
irx = 5;
for (int x = 1; x < stMap_x - 1; x++) {
try {
//位置已经为空
if (m_map[y][x] == ISEMPTY) {
irx += 2;
continue;
}
//画出当前的图片
g.drawImage(m_image[m_map[y][x]], irx + (x - 1) * stPic_x,
iry + (y - 1) * stPic_y, Graphics.LEFT
| Graphics.TOP);
} catch (IllegalArgumentException ei) {
System.err.println("catch(IllegalArgumentException ei)");
} catch (NullPointerException en) {
System.err.println("catch(NullPointerException en");
}
irx += 2;
}
iry += 2;
}
}
//考虑四周空白的地方,不需要出现对准框
public int RoleMove(int GameAction) {
int iRtn;
iRtn = 0;
switch (GameAction) {
case Canvas.LEFT:
if ((m_role_x - 1) >= 1) {
{
m_role_x--;
}
}
iRtn = 1;
break;
case Canvas.RIGHT:
if ((m_role_x + 1) < stMap_x - 1) {
{
m_role_x++;
}
}
iRtn = 1;
break;
case Canvas.UP:
if ((m_role_y - 1) >= 1) {
{
m_role_y--;
}
}
iRtn = 1;
break;
case Canvas.DOWN:
if ((m_role_y + 1) < stMap_y - 1) {
{
m_role_y++;
}
}
iRtn = 1;
break;
case Canvas.FIRE:
//是否在空区域做了选择动作
if (m_map[m_role_y][m_role_x] == ISEMPTY)
break;
if (!m_SelectOne) {
//第一次选择
m_select_x = m_role_x;
m_select_y = m_role_y;
m_SelectOne = true;
} else {
//是否重复点,如果重复点,取消上次所选择的
if ((m_select_x == m_role_x) && (m_select_y == m_role_y)) {
m_SelectOne = false;
break;
}
// System.out.println("sy:" + m_select_y + ";sx:" + m_select_x);
// System.out.println("ry:" + m_role_y + ";rx:" + m_role_x);
// System.out.println("map 1:" + m_map[m_select_y][m_select_x]);
// System.out.println("map 2:" + m_map[m_role_y][m_role_x]);
//第二次选择
if ((m_map[m_select_y][m_select_x] == m_map[m_role_y][m_role_x])
&& (!m_cleanFlag))//还没有处理完已经连接好的块
{
if (CheckPoint(m_select_x, m_select_y, m_role_x, m_role_y) == 0) {
m_SelectOne = false;
//选择的与规则相符
m_cleanFlag = true;
m_cf_sx = m_select_x;
m_cf_sy = m_select_y;
m_cf_ex = m_role_x;
m_cf_ey = m_role_y;
iRtn = 2;
m_iLeaveImageCount = m_iLeaveImageCount - 2;
//m_map[m_select_y][m_select_x] = ISEMPTY;
//m_map[m_role_y][m_role_x] = ISEMPTY;
break;
}
}
//选择的不合符规则
m_select_x = m_role_x;
m_select_y = m_role_y;
m_SelectOne = true;
}
iRtn = 1;
break;
default:
iRtn = 0;
;
}
return iRtn;
};
//连接线的路径
private void SetCntMaps(int x, int y) {
int ix, iy;
ix = x;
iy = y;
//System.out.println("x:" + ix + "/y:" + iy);
if (m_CntMapsCount == 0) {
m_CntX[m_CntMapsCount] = x;
m_CntY[m_CntMapsCount] = y;
m_CntMapsCount++;
return;
}
if (((x == m_CntX[m_CntMapsCount - 1]) && (y == m_CntY[m_CntMapsCount - 1] + 1))
|| ((x == m_CntX[m_CntMapsCount - 1]) && (y == m_CntY[m_CntMapsCount - 1] - 1))
|| ((x == m_CntX[m_CntMapsCount - 1] + 1) && (y == m_CntY[m_CntMapsCount - 1]))
|| ((x == m_CntX[m_CntMapsCount - 1] - 1) && (y == m_CntY[m_CntMapsCount - 1]))) {
} else {
for (;;) {
if (((x == m_CntX[m_CntMapsCount - 1]) && (y == m_CntY[m_CntMapsCount - 1] + 1))
|| ((x == m_CntX[m_CntMapsCount - 1]) && (y == m_CntY[m_CntMapsCount - 1] - 1))
|| ((x == m_CntX[m_CntMapsCount - 1] + 1) && (y == m_CntY[m_CntMapsCount - 1]))
|| ((x == m_CntX[m_CntMapsCount - 1] - 1) && (y == m_CntY[m_CntMapsCount - 1])))
break;
m_CntMapsCount--;
}
}
m_CntX[m_CntMapsCount] = x;
m_CntY[m_CntMapsCount] = y;
m_CntMapsCount++;
}
private int CheckPoint(int iSx, int iSy, int iTx, int iTy) {
int x1, x2, y1, y2;
// int isx, isy, itx, ity;
// isx = iSx;
// isy = iSy;
// itx = iTx;
// ity = iTy;
// System.out.println("it is; sx:" + isx + ",sy:" + isy + ",tx:" + itx
// + ",ty:" + ity);
//*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
//up
m_CntMapsCount = 0;
SetCntMaps(iSx, iSy);
if (iSy > 0)
for (y1 = (int) (iSy - 1); y1 >= 0; y1--) {
if ((y1 == iTy) && (iSx == iTx)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y1][iSx] != ISEMPTY)
break;
SetCntMaps(iSx, y1);
if (iTx < iSx) { // left
for (x2 = (int) (iSx - 1); x2 >= iTx; x2--) {
if ((x2 == iTx) && (y1 == iTy)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y1][x2] != ISEMPTY)
break;
SetCntMaps(x2, y1);
if (x2 == iTx) {
if (iTy < y1) {// up
for (y2 = (int) (y1 - 1); y2 >= iTy; y2--) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // down
for (y2 = (int) (y1 + 1); y2 <= iTy; y2++) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
} else { // right
for (x2 = (int) (iSx + 1); x2 <= iTx; x2++) {
if ((x2 == iTx) && (y1 == iTy)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y1][x2] != ISEMPTY)
break;
SetCntMaps(x2, y1);
if (x2 == iTx) {
if (iTy < y1) {// up
for (y2 = (int) (y1 - 1); y2 >= iTy; y2--) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // down
for (y2 = (int) (y1 + 1); y2 <= iTy; y2++) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
}
} // end of up
//*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
//down
m_CntMapsCount = 0;
SetCntMaps(iSx, iSy);
if (iSy < stMap_y)
for (y1 = (int) (iSy + 1); y1 < stMap_y; y1++) {
if ((y1 == iTy) && (iTx == iSx)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y1][iSx] != ISEMPTY)
break;
SetCntMaps(iSx, y1);
if (iTx < iSx) { // left
for (x2 = (int) (iSx - 1); x2 >= iTx; x2--) {
if ((x2 == iTx) && (y1 == iTy)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y1][x2] != ISEMPTY)
break;
SetCntMaps(x2, y1);
if (x2 == iTx) {
if (iTy < y1) {// up
for (y2 = (int) (y1 - 1); y2 >= iTy; y2--) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // down
for (y2 = (int) (y1 + 1); y2 <= iTy; y2++) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
} else { // right
for (x2 = (int) (iSx + 1); x2 <= iTx; x2++) {
if ((x2 == iTx) && (y1 == iTy)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y1][x2] != ISEMPTY)
break;
SetCntMaps(x2, y1);
if (x2 == iTx) {
if (iTy < y1) {// up
for (y2 = (int) (y1 - 1); y2 >= iTy; y2--) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // down
for (y2 = (int) (y1 + 1); y2 <= iTy; y2++) {
if (y2 == iTy) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
}
} // end of down
//*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
//left
m_CntMapsCount = 0;
SetCntMaps(iSx, iSy);
if (iSx > 0)
for (x1 = (int) (iSx - 1); x1 >= 0; x1--) {
if ((x1 == iTx) && (iSy == iTy)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[iSy][x1] != ISEMPTY)
break;
SetCntMaps(x1, iSy);
if (iTy < iSy) { // up
for (y2 = (int) (iSy - 1); y2 >= iTy; y2--) {
if ((y2 == iTy) && (x1 == iTx)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x1] != ISEMPTY)
break;
SetCntMaps(x1, y2);
if (y2 == iTy) {
if (iTx < x1) {// left
for (x2 = (int) (x1 - 1); x2 >= iTx; x2--) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // right
for (x2 = (int) (x1 + 1); x2 <= iTx; x2++) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
} else { // down
for (y2 = (int) (iSy + 1); y2 <= iTy; y2++) {
if ((y2 == iTy) && (x1 == iTx)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x1] != ISEMPTY)
break;
SetCntMaps(x1, y2);
if (y2 == iTy) {
if (iTx < x1) {// left
for (x2 = (int) (x1 - 1); x2 >= iTx; x2--) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // right
for (x2 = (int) (x1 + 1); x2 <= iTx; x2++) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
}
} // end of left
//*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
//right
m_CntMapsCount = 0;
SetCntMaps(iSx, iSy);
if (iSx < stMap_x)
for (x1 = (int) (iSx + 1); x1 < stMap_x; x1++) {
if ((x1 == iTx) && (iSy == iTy)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[iSy][x1] != ISEMPTY)
break;
SetCntMaps(x1, iSy);
if (iTy < iSy) { // up
for (y2 = (int) (iSy - 1); y2 >= iTy; y2--) {
if ((y2 == iTy) && (x1 == iTx)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x1] != ISEMPTY)
break;
SetCntMaps(x1, y2);
if (y2 == iTy) {
if (iTx < x1) {// left
for (x2 = (int) (x1 - 1); x2 >= iTx; x2--) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // right
for (x2 = (int) (x1 + 1); x2 <= iTx; x2++) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
} else { // down
for (y2 = (int) (iSy + 1); y2 <= iTy; y2++) {
if ((y2 == iTy) && (x1 == iTx)) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x1] != ISEMPTY)
break;
SetCntMaps(x1, y2);
if (y2 == iTy) {
if (iTx < x1) {// left
for (x2 = (int) (x1 - 1); x2 >= iTx; x2--) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
} else { // right
for (x2 = (int) (x1 + 1); x2 <= iTx; x2++) {
if (x2 == iTx) {
SetCntMaps(iTx, iTy);
return 0;
}
if (m_map[y2][x2] != ISEMPTY)
break;
SetCntMaps(x2, y2);
}
}
}
}
}
} // end of right
return 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -