📄 galaxywarcanvas.java
字号:
else if (osY != offsetY)
pY = p.y - osY;
else
pY = p.y - currentP.y + osY;
if (pX < startMapPx - IMAGESIZE || pX > endMapPx
|| pY < startMapPy - IMAGESIZE || pY > endMapPy) {
continue;
}
if (p.isHit) {
//g.setClip(0,0,width,height);
g.setClip(pX, pY, imageSize, imageSize);
g.drawImage(smoke[p.counter],pX + (imageSize >> 1)
,pY + (imageSize >> 1)
,g.VCENTER | g.HCENTER);
p.counter ++;
if (p.counter == SMOKE - 1) {
p.isHit = false;
p.counter = 0;
if (p.hp <= 0) {
p.isDead = true;
if (p.rivalry == 0)
gameState = 0;//game over
}
}
}else {
if (p.type == BOSS) {
g.setClip(pX, pY, imageSize, imageSize);
g.drawImage(boss, pX - getIcon(p) * bossWidth
, pY, g.LEFT | g.TOP);
}
else {
g.setClip(pX, pY, imageSize, imageSize);
g.drawImage(tank, pX - getIcon(p) * imageSize
, pY, g.LEFT | g.TOP);
}
}
} //end for
g.setClip(0, 0, width, height);//是否可以缩小?
}
private void drawItem(Graphics g) {
Tank p = player[0];
Item itm;
int pX,pY;
for (int i = 0; i < maxItem; i++) {
itm = item[i];
if (itm.isCollected) continue;
if (osX == 0)
pX = itm.x;
else if (osX != offsetX)
pX = itm.x - osX;
else
pX = itm.x - p.x + osX;
if (osY == 0)
pY = itm.y;
else if (osY != offsetY)
pY = itm.y - osY;
else
pY = itm.y - p.y + osY;
if (pX < startMapPx - IMAGESIZE || pX > endMapPx
|| pY < startMapPy - IMAGESIZE || pY > endMapPy) {
continue;
}
g.drawImage(cheese, pX,pY, g.VCENTER | g.HCENTER);
} //end for
}
private void drawShot(Graphics g) {
Tank p,p2 = player[0];
int passPoint,totalPoint,x,y;
int pX, pY;
totalPoint = SHOT_AREA / SHOT_RATE;
for (int i=0;i<maxPlayer;i++) {
p = player[i];
if (p.isArrived)
continue;
x = p.shotX;
y = p.shotY;
if (osX == 0)
pX = p.shotX;
else if (osX != offsetX)
pX = p.shotX - osX;
else
pX = p.shotX - p2.x + osX;
if (osY == 0)
pY = p.shotY;
else if (osY != offsetY)
pY = p.shotY - osY;
else
pY = p.shotY - p2.y + osY;
switch (p.direction) {
case D_UP:
case D_DOWN:
//passPoint = Math.abs(y - p.shotTy) / SHOT_RATE;
//if (passPoint <= totalPoint) {//&& (passPoint & 1) == 0) {
g.drawImage(shot[p.direction], pX, pY, g.LEFT | g.TOP);
//}
break;
case D_LEFT:
case D_RIGHT:
//passPoint = Math.abs(x - p.shotTx) / SHOT_RATE;
//if (passPoint <= totalPoint) {// && (passPoint & 1) == 0) {
g.drawImage(shot[p.direction], pX, pY, g.LEFT | g.TOP);
//}
break;
}
}
}
private void drawPanel(Graphics g) {
//draw panel
//g.setClip(0, 0, width, height);
g.drawImage(panel, 0, viewHeight, g.LEFT | g.TOP);
}
//这里的坐标要特殊处理
//也可以直接画数字
private void drawInfo(Graphics g) {
Tank p = player[0];
String info = String.valueOf(p.hp);//debug:String.valueOf(round);
int len = info.length();
int digitWidth = digit.getWidth() / 10;
int digitHeight = digit.getHeight();
int x,y,num;
y = viewHeight + ((height - viewHeight - digitHeight) >> 1);
for (int i=0;i<len;i++) {
x = i* digitWidth + DIGIT_LEFT;
num = Integer.parseInt(info.substring(i,i+1));
g.setClip(x,y,digitWidth,digitHeight);
g.drawImage(digit,x - num * digitWidth,y,g.TOP | g.LEFT);
}
info = String.valueOf(p.score);
len = info.length();
for (int i=0;i<len;i++) {
x = i* digitWidth + DIGIT_RIGHT;
num = Integer.parseInt(info.substring(i,i+1));
g.setClip(x,y,digitWidth,digitHeight);
g.drawImage(digit,x - num * digitWidth,y,g.TOP | g.LEFT);
}
}
private void drawScore(Graphics g) {
String info,drawInfo,itemInfo;
int start,end,scoreNum = getScoreNum(scoreInfo);
int infoWidth,startX,startY;
int index,drawIndex;
boolean isStart,isEnd,isBreak = false;
info = scoreInfo;
g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
if (info.length() == 0) return;
end = currentScore + showedNum;
if (end > scoreNum) {
end = scoreNum;
}
start = end - showedNum;
if (start < 0) start = 0;
index = -1;
drawIndex = -1;
g.setColor(0x00FFFF00);
for (int i=0;i<scoreNum;i++) {
itemInfo = info.substring(0,info.indexOf(","));
index ++;
if (info.indexOf(",") == info.length() - 1)
isBreak = true;
else
info = info.substring(info.indexOf(",") + 1);
if (index < start || index >= end) continue;
drawIndex ++;
startX = (width / 3 - MEDAL_SIZE) >> 1;
startY = panel_up.getHeight() + UP_SPACE
+ SCORE_HEIGHT * drawIndex + ((SCORE_HEIGHT - MEDAL_SIZE) >> 1);
g.setClip(startX,startY,MEDAL_SIZE,MEDAL_SIZE);
g.drawImage(ranking,startX - i * MEDAL_SIZE,
startY,g.LEFT | g.TOP);//draw medal
g.setClip(0,0,width,height);
drawInfo = itemInfo.substring(itemInfo.lastIndexOf(32));//name
infoWidth = getStringWidth(drawInfo);
startX = width / 3 + ((width / 3 - infoWidth) >> 1);
startY = panel_up.getHeight() + UP_SPACE
+ SCORE_HEIGHT * drawIndex
+ ((SCORE_HEIGHT - font.getHeight()) >> 1);
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
drawInfo = itemInfo.substring(0,itemInfo.indexOf(32));//score
infoWidth = getStringWidth(drawInfo);
startX = width * 2 / 3 + ((width / 3 - infoWidth) >> 1);
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
if (isBreak) break;
}
if (start == 0 && end == scoreNum) return;
if (start > 0)
isStart = false;
else
isStart = true;
if (end < scoreNum)
isEnd = false;
else
isEnd = true;
startX = (width - hint.getWidth()) >> 1;
startY = height - 2 - hint.getHeight();
if (!isStart && isEnd) {
g.setClip(startX,startY,hint.getWidth(),hint.getHeight() >> 1);
}
else if (isStart && !isEnd) {
g.setClip(startX,startY + (hint.getHeight() >> 1)
,hint.getWidth(),hint.getHeight() >> 1);
}
g.drawImage(hint,startX,startY,g.LEFT | g.TOP);
g.setClip(0,0,width,height);
}
private void drawInternetRank(Graphics g) {
String info,drawInfo = "",itemInfo;
int start,end;
int index,drawIndex,infoWidth,startX,startY;
boolean isStart,isEnd,isBreak = false;
info = rankInfo;
g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
if (info.length() == 0) {
if (!isReaded)
if (mode == MODE_UPLOAD)
drawInfo = "Uploading...";
else
drawInfo = "Downloading...";
else {
rankInfo = ERRORINFO;
rankNum = getScoreNum(rankInfo);
return;
}
g.setColor(0x00FFFF00);
infoWidth = getStringWidth(drawInfo);
startX = (width - infoWidth) >> 1;
startY = ((height - panel_up.getHeight() - font.getHeight()) >> 1)
+ panel_up.getHeight();
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
return;
}
end = currentRank + showedNum;
if (end > rankNum) {
end = rankNum;
}
start = end - showedNum;
if (start < 0) start = 0;
index = -1;
drawIndex = -1;
for (int i=0;i<rankNum;i++) {
itemInfo = info.substring(0,info.indexOf(","));
index ++;
if (info.indexOf(",") == info.length() - 1)
isBreak = true;
else
info = info.substring(info.indexOf(",") + 1);
if (index < start || index >= end) continue;
drawIndex ++;
g.setColor(0x00FFFF00);
if (itemInfo.indexOf(58) == -1) {
drawInfo = itemInfo;
infoWidth = getStringWidth(drawInfo);
startX = (width - infoWidth) >> 1;
startY = panel_up.getHeight() + UP_SPACE
+ SCORE_HEIGHT * drawIndex
+ ((SCORE_HEIGHT - font.getHeight()) >> 1);
g.drawString(drawInfo, startX, startY, g.LEFT | g.TOP);
}else {
startX = (width / 3 - MEDAL_SIZE) >> 1;
startY = panel_up.getHeight() + UP_SPACE
+ SCORE_HEIGHT * drawIndex + ((SCORE_HEIGHT - MEDAL_SIZE) >> 1);
g.setClip(startX,startY,MEDAL_SIZE,MEDAL_SIZE);
g.drawImage(ranking,startX - i * MEDAL_SIZE,
startY,g.LEFT | g.TOP);//draw medal
g.setClip(0,0,width,height);
drawInfo = itemInfo.substring(itemInfo.lastIndexOf(32));//name
infoWidth = getStringWidth(drawInfo);
startX = width / 3 + ((width / 3 - infoWidth) >> 1);
startY = panel_up.getHeight() + UP_SPACE
+ SCORE_HEIGHT * drawIndex
+ ((SCORE_HEIGHT - font.getHeight()) >> 1);
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
drawInfo = itemInfo.substring(0,itemInfo.indexOf(32));//score
infoWidth = getStringWidth(drawInfo);
startX = width * 2 / 3 + ((width / 3 - infoWidth) >> 1);
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
}
if (isBreak) break;
}
if (start == 0 && end == rankNum) return;
if (start > 0)
isStart = false;
else
isStart = true;
if (end < rankNum)
isEnd = false;
else
isEnd = true;
startX = (width - hint.getWidth()) >> 1;
startY = height - 2 - hint.getHeight();
if (!isStart && isEnd) {
g.setClip(startX,startY,hint.getWidth(),hint.getHeight() >> 1);
}
else if (isStart && !isEnd) {
g.setClip(startX,startY + (hint.getHeight() >> 1)
,hint.getWidth(),hint.getHeight() >> 1);
}
g.drawImage(hint,startX,startY,g.LEFT | g.TOP);
g.setClip(0,0,width,height);
}
private void drawWritingScore(Graphics g) {
String info,drawInfo,itemInfo;
boolean isBreak = false;
int start,end,scoreNum = getScoreNum(scoreInfo);
int index,drawIndex,infoWidth,startX,startY;
info = scoreInfo;
g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
g.setColor(0x00FFFF00);
drawInfo = "Input your name";
infoWidth = getStringWidth(drawInfo);
startX = (width - infoWidth) >> 1;
startY = panel_up.getHeight() + 2;
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
end = currentScore + showedNum;
if (end > scoreNum) {
end = scoreNum;
}
start = end - showedNum;
if (start < 0) start = 0;
index = -1;
drawIndex = -1;
for (int i=0;i<scoreNum;i++) {
itemInfo = info.substring(0,info.indexOf(","));
index ++;
if (info.indexOf(",") == info.length() - 1)
isBreak = true;
else
info = info.substring(info.indexOf(",") + 1);
if (index < start || index >= end) continue;
if (index == currentScore)
g.setColor(0x00FF0000);
else
g.setColor(0x00FFFF00);
drawIndex ++;
startX = (width / 3 - MEDAL_SIZE) >> 1;
startY = panel_up.getHeight() + UP_SPACE
+ SCORE_HEIGHT * drawIndex + ((SCORE_HEIGHT - MEDAL_SIZE) >> 1);
g.setClip(startX,startY,MEDAL_SIZE,MEDAL_SIZE);
g.drawImage(ranking,startX - i * MEDAL_SIZE,
startY,g.LEFT | g.TOP);//draw medal
g.setClip(0,0,width,height);
drawInfo = itemInfo.substring(itemInfo.lastIndexOf(32));//name
infoWidth = getStringWidth(drawInfo);
if (!drawInfo.substring(drawInfo.length() -1).equals("|"))
infoWidth += font.charWidth('|');
startX = width / 3 + ((width / 3 - infoWidth) >> 1);
startY = panel_up.getHeight() + UP_SPACE
+ SCORE_HEIGHT * drawIndex
+ ((SCORE_HEIGHT - font.getHeight()) >> 1);
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
drawInfo = itemInfo.substring(0,itemInfo.indexOf(32));//score
infoWidth = getStringWidth(drawInfo);
if (!drawInfo.substring(drawInfo.length() -1).equals("|"))
infoWidth += font.charWidth('|');
startX = width * 2 / 3 + ((width / 3 - infoWidth) >> 1);
g.drawString(drawInfo,startX,startY,g.LEFT | g.TOP);
if (isBreak) return;
}
}
private void drawOption(Graphics g) {
int menuID;
String info = "";
int infoWidth;
int startX,startY;
//panel的尺寸必须于屏幕实际尺寸相符
g.drawImage(panel_up, 0, 0, g.TOP | g.LEFT);
for (int i=0;i<showedNum;i++) {
menuID = menu[i];
if (menuID == currentMenu)
g.setColor(0x00FF0000);
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -