📄 mainpit.java
字号:
{
g.drawImage(back_buffer,0,0,g.LEFT|g.TOP);
}
//主菜单
public void mainMenu()
{
gb.setColor(0,0,0);
gb.fillRect(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
for(int i = 0; i < 5; i++)
{
drawMainMenu(gb, mainMenuText[i], (SCREEN_WIDTH - 72) / 2, ((SCREEN_HEIGHT - 22 * 5)/6 + 22)*i + (SCREEN_HEIGHT - 22 * 5)/6, 72, 22);//, 2, 6);
}
DealCursor();
}
//绘制菜单(内容,菜单坐标,宽高,字体位置)
public void drawMainMenu(Graphics g, String s,int x,int y, int w, int h)//,int tx,int ty)
{
DrawFrame(g,x,y,w,h,4,frameColor,0);
g.setColor(255,255,255);
g.drawString(s,x+16,y+3,g.TOP|g.LEFT);
}
public void DealCursorMove()
{
if(hasPressed&&!moveaction)
{
switch(kCode)
{
case 2:
if(cursorSY > 2)//静止背景时光标移动
{
cursorSY--;
cursorMY--;
}
else if(cursorSY > 0&&cursorMY > 2)//背景随光标移动
{
cursorMY--;
y--;
RollScreen(gs,2);
}
else if(cursorMY > 0)//边界光标移动情况
{
cursorMY--;
cursorSY--;
}
break;
case 8:
if(cursorSY < SCREEN_MAX_HEIGHT - 2)
{
cursorSY++;
cursorMY++;
}
else if(cursorMY < MAP_MAX_HEIGHT - 2&&cursorSY < SCREEN_MAX_HEIGHT)
{
cursorMY++;
y++;
RollScreen(gs,8);
}
else if(cursorMY < MAP_MAX_HEIGHT)
{
cursorSY++;
cursorMY++;
}
break;
case 4:
if(cursorSX > 2)
{
cursorSX--;
cursorMX--;
}
else if(cursorMX > 2&&cursorSX > 0)
{
x--;
cursorMX--;
RollScreen(gs,4);
}
else if(cursorMX > 0)
{
cursorSX--;
cursorMX--;
}
break;
case 6:
if(cursorSX < SCREEN_MAX_WIDTH - 2)
{
cursorSX++;
cursorMX++;
}
else if(cursorMX < MAP_MAX_WIDTH - 2&&cursorSX < SCREEN_MAX_WIDTH)
{
x++;
cursorMX++;
RollScreen(gs,6);
}
else if(cursorMX < MAP_MAX_WIDTH)
{
cursorSX++;
cursorMX++;
}
break;
}
tally = 0;
}
}
public void DealPersonMove()
{
if(moveaction)
{
hasPressed = true;
boolean endmove = true;
if(endmove&&targetSY + y + 1 <= MAP_MAX_HEIGHT)
{
if(move[targetSY+y][targetSX+x] ==
move[targetSY+y+1][targetSX+x] + mappos[map[targetSY+y+1][targetSX+x]][currentactkind])//下走
{
currentactstate = 2;
currentactmovey++;
if(currentactmovey % TILE_HEIGHT == 0)
{
targetSY++;
}
endmove = false;
}
}
if(endmove&&targetSY+y-1 >= 0)
{
if(move[targetSY+y][targetSX+x] ==
move[targetSY+y-1][targetSX+x] + mappos[map[targetSY+y-1][targetSX+x]][currentactkind])//上走
{
currentactstate = 3;
currentactmovey--;
if(currentactmovey % TILE_HEIGHT == 0)
{
targetSY--;
}
endmove = false;
}
}
if(endmove&&targetSX+x+1 <= MAP_MAX_WIDTH)
{
if(move[targetSY+y][targetSX+x] ==
move[targetSY+y][targetSX+x+1] + mappos[map[targetSY+y][targetSX+x+1]][currentactkind])//右走
{
currentactstate = 5;
currentactmovex++;
if(currentactmovex % TILE_WIDTH == 0)
{
targetSX++;
}
endmove = false;
}
}
if(endmove&&targetSX+x-1 >= 0)
{
if(move[targetSY+y][targetSX+x] ==
move[targetSY+y][targetSX+x-1] + mappos[map[targetSY+y][targetSX+x-1]][currentactkind])//左走
{
currentactstate = 4;
currentactmovex--;
if(currentactmovex % TILE_WIDTH == 0)
{
targetSX--;
}
endmove=false;
}
}
if(endmove)
{
targetstate = 2;
moveaction = false;
hasPressed = false;
CurrentScene = 2;
CurrentMenu = 1;
MenuFocus = 0;
MenuInfo[1] = 1;//没有攻击目标
byte s = 1;
//移动完成后的可攻击判断
for(int j = -currentactatkmax; j <= currentactatkmax; j++)
{
for(int i = targetSX - (currentactatkmax - Math.abs(j)); i <= targetSX + (currentactatkmax - Math.abs(j)); i++)
{
for(int m = 0; m < actnum; m++)
{
if(m == currentact)
{
continue;
}
if(infoact[idact[m]][1] - x == i&&infoact[idact[m]][2] - y == j + targetSY)
{
MenuInfo[1] = 2;//有攻击目标
currentatk = 1;
atktarget[s] = (byte)m;
s++;
break;
}
}
}
}
}
}
}
public void playGame()
{
switch(CurrentScene)
{
case 0://章节显示,并载入相关信息
break;
case 1://游戏大地图状态
//光标移动判断
DealCursorMove();
//游戏中屏幕坐标与地图坐标相关
currentactSX = currentactMX - x;
currentactSY = currentactMY - y;
//人物移动
DealPersonMove();
DrawBuffer(gb);//绘制静态缓存
DrawPerson(gb);//绘制人物
DealCursor();//绘制光标
DealMapRevise();//地形修正
//DealPersonInfo();
break;
case 2://菜单1(待机,攻击)
DrawBuffer(gb);//绘制静态缓存
DrawPerson(gb);//绘制人物
DrawMenu(gb,CurrentMenu);
DealCursor();
break;
case 3://攻击选定
DrawBuffer(gb);//绘制静态缓存
if(targetstate == 2)//攻击对象选定
{
DrawRange(gb, targetSX, targetSY, currentactatkmin, currentactatkmax, 0x00ff0000);
DrawPerson(gb);//绘制人物
DealCursor();
}
else if(targetstate == 3)//攻击过程
{
atkcg(gb);
targetstate = 0;
currentactstate = 0;
CurrentScene = 1;
}
break;
}
}
public void run()
{
while(true)
{
tally++;
cursortally++;
switch(STATE)
{
case 0://logo
break;
case 1://开始菜单
mainMenu();
break;
case 2://游戏
playGame();
break;
}
//System.out.println("cursorMX="+cursorMX+" cursorSX="+cursorSX+" cursorMY="+cursorMY+" cursorSY="+cursorSY);
//System.out.println("currentactSX="+currentactSX+" currentactSY="+currentactSY+" currentactMY="+currentactMY+" currentactMY="+currentactMY);
repaint();
System.gc();
try
{
Thread.sleep(hangfire);
}
catch(Exception e)
{}
}
}
//绘制文字容器框(位置x,y,大小w,h,边框层数n,颜色c,框架类型k)
public void DrawFrame(Graphics g, int x, int y, int w, int h, int n, int c[][],int k)
{
for(int i = 0; i < n;i++)
{
g.setColor(c[k][i]);
g.fillRect(x + i, y+i, w - 2 * i, h - 2 * i);
}
}
//绘制范围(g,目标位置,范围下限,范围上限颜色)
public void DrawRange(Graphics g, int x, int y, int rmin, int rmax, int c)
{
gb.setColor(c);
for(int i = 0; i <= rmax; i++)
{
//右下
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y + (rmax - i)) * TILE_SIZE + TILE_SIZE,
(x + i) * TILE_SIZE + TILE_SIZE, (y + (rmax - i)) * TILE_SIZE);
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y + (rmax - i)) * TILE_SIZE + TILE_SIZE,
(x + i) * TILE_SIZE, (y + (rmax - i)) * TILE_SIZE + TILE_SIZE);
//右上
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y - (rmax - i)) * TILE_SIZE,
(x + i) * TILE_SIZE, (y - (rmax - i)) * TILE_SIZE);
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y - (rmax - i)) * TILE_SIZE,
(x + i) * TILE_SIZE + TILE_SIZE, (y - (rmax - i)) * TILE_SIZE + TILE_SIZE);
//左下
gb.drawLine((x - i) * TILE_SIZE, (y + (rmax - i)) * TILE_SIZE + TILE_SIZE,
(x - i) * TILE_SIZE, (y + (rmax - i)) * TILE_SIZE);
gb.drawLine((x - i) * TILE_SIZE, (y + (rmax - i)) * TILE_SIZE + TILE_SIZE,
(x - i) * TILE_SIZE + TILE_SIZE, (y + (rmax - i)) * TILE_SIZE + TILE_SIZE);
//左上
gb.drawLine((x - i) * TILE_SIZE, (y - (rmax - i)) * TILE_SIZE,
(x - i) * TILE_SIZE + TILE_SIZE, (y - (rmax - i)) * TILE_SIZE);
gb.drawLine((x - i) * TILE_SIZE, (y - (rmax - i)) * TILE_SIZE,
(x - i) * TILE_SIZE, (y - (rmax - i)) * TILE_SIZE + TILE_SIZE);
if(i <= rmin)//绘制下限
{
//右下
gb.drawLine((x - i) * TILE_SIZE, (y - (rmin - i)) * TILE_SIZE,
(x - i) * TILE_SIZE + TILE_SIZE, (y - (rmin - i)) * TILE_SIZE);
gb.drawLine((x - i) * TILE_SIZE, (y - (rmin - i)) * TILE_SIZE,
(x - i) * TILE_SIZE, (y - (rmin - i)) * TILE_SIZE + TILE_SIZE);
//右上
gb.drawLine((x - i) * TILE_SIZE, (y + (rmin - i)) * TILE_SIZE + TILE_SIZE,
(x - i) * TILE_SIZE, (y + (rmin - i)) * TILE_SIZE);
gb.drawLine((x - i) * TILE_SIZE, (y + (rmin - i)) * TILE_SIZE + TILE_SIZE,
(x - i) * TILE_SIZE + TILE_SIZE, (y + (rmin - i)) * TILE_SIZE + TILE_SIZE);
//左下
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y - (rmin - i)) * TILE_SIZE,
(x + i) * TILE_SIZE, (y - (rmin - i)) * TILE_SIZE);
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y - (rmin - i)) * TILE_SIZE,
(x + i) * TILE_SIZE + TILE_SIZE, (y - (rmin - i)) * TILE_SIZE + TILE_SIZE);
//左上
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y + (rmin - i)) * TILE_SIZE + TILE_SIZE,
(x + i) * TILE_SIZE + TILE_SIZE, (y + (rmin - i)) * TILE_SIZE);
gb.drawLine((x + i) * TILE_SIZE + TILE_SIZE, (y + (rmin - i)) * TILE_SIZE + TILE_SIZE,
(x + i) * TILE_SIZE, (y + (rmin - i)) * TILE_SIZE + TILE_SIZE);
}
}
}
//绘制攻击血槽
public void DrawLifeShow(Graphics g, int blue, int red)
{
int m;
int d;
int n;
//System.out.println(" blue = " + blue + " red = "+red);
if(infoact[idact[red]][2] - y < 4)
{
d = 80;
}
else
{
d = 0;
}
//攻击方
//血量显示
m = 16 - 3;
n = d + 16;
//框
DrawFrame(g,m,n,54,30,4,frameColor,4);
//槽
g.setColor(232,144,0);
g.drawRect(16 + m + 2, 1 + 8 + n + 4 + 3, 25, 6);
g.setColor(112,48,0);
g.fillRect(16 + m + 3, 2 + 8 + n + 4 + 3, 23, 4);
//血
g.setColor(248, 248, 0);
g.fillRect(16 + m + 4, 3 + 8 + n + 4 + 3, 18, 2);
//人物名称显示
m = 24-3;
n = d + 8;
DrawFrame(g,m,n,38,22,4,frameColor,4);
//反击方
m = 64+3;
n = d + 16;
DrawFrame(g,m,n,54,30,4,frameColor,3);
//人物名称显示
m = 72+3;
n = d + 8;
DrawFrame(g,m,n,38,22,4,frameColor,3);
}
public void DrawMenu(Graphics g, int k)//绘制菜单,k:菜单类型
{
int s = MenuInfo[k];
int m = SCREEN_WIDTH - 3 * TILE_SIZE;
if(cursorSX >=4)
{
m = TILE_SIZE;
}
else
{
m = SCREEN_WIDTH - 3 *TILE_SIZE;;
}
DrawFrame(g, m, TILE_SIZE, 37, TILE_SIZE * s + 5,4,frameColor,1);
g.setColor(255,255,255);
for(int i = 0; i < s; i++)
{
g.drawString(MenuContent[k][s - i - 1], m + TILE_SIZE+3, 2+TILE_SIZE + TILE_SIZE * i, g.TOP|g.HCENTER);
}
}
//人物基本信息
public void DealPersonInfo()
{
if(cursorSX > SCREEN_MAX_WIDTH / 2)
{
DrawPersonInfo(gb, 5, 5);
}
else
{
DrawPersonInfo(gb, SCREEN_WIDTH - 53, 5);
}
}
public void DrawPersonInfo(Graphics g,int x,int y)
{
DrawFrame(gb,x,y,48,32,3,frameColor,5);
}
//地图修正信息处理
public void DealMapRevise()
{
if(cursorSX > SCREEN_MAX_WIDTH / 2)
{
DrawMapRevise(gb, 5, SCREEN_HEIGHT - 41, map[cursorMY][cursorMX]);
}
else
{
DrawMapRevise(gb, SCREEN_WIDTH - 41, SCREEN_HEIGHT - 41, map[cursorMY][cursorMX]);
}
}
public void DrawMapRevise(Graphics g,int x,int y, int mk)
{
DrawFrame(gb,x,y,36,36,2,frameColor,2);
g.setColor(88,88,192);
g.fillRect(x+2,y+2,32,16);
g.setColor(255,255,255);
g.drawString(mapname[mk],x+2+11,y+2,g.TOP|g.LEFT);
g.setColor(0,0,0);
g.drawString("DEF:" + maprevise[1][mk],x+2,y+2+16,g.TOP|g.LEFT);
g.drawString("AVO:" + maprevise[0][mk],x+2,y+2+24,g.TOP|g.LEFT);
}
public void DrawBuffer(Graphics g)//将静态缓存绘制到背景缓存中
{
g.drawImage(static_buffer,0,0,g.LEFT|g.TOP);
}
//攻击动画
public void atkcg(Graphics g)
{
int c1 = 0;
int c2 = 0;
int picnum;
for(int i = 0; i < 16;i++)
{
tally++;
cursortally++;
DrawBuffer(g);//绘制静态缓存
c1 = 0;
c2 = 0;
if(i/2 == 1||i/2 == 2)
{
c1 = 1;
}
if(i/2 == 5||i/2 == 6)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -