📄 gamemanager.java
字号:
if( mapY >= 0 ){
mapY -= 16;
winY --;
if (winY < 0){
winY = 0;
manMove = true;
}
}
break;
case 1:
mapY -= manSpeed;
if ( mapY <= -16){
mapY += 16;
winY ++;
if ( winY > currentMap_Under.length-H/16){
winY = currentMap_Under.length-H/16;
manMove = true;
}
}
break;
case 2:
mapX += manSpeed;
if ( mapX >= 0 ){
mapX -= 16;
winX --;
if (winX < 0){
winX = 0;
manMove = true;
}
}
break;
case 3:
mapX -= manSpeed;
if ( mapX <= -16 ){
mapX +=16;
winX ++;
if ( winX >currentMap_Under[0].length-W/16+1 ){
winX = currentMap_Under[0].length-W/16+1;
manMove = true;
}
}
break;
}
mapMove = false;
}
//================== 背景 =====================
for (int j=0;j< H/16+1;j++){
for (int i=0;i<W/16+1;i++){
g2.setClip(mapX+i*16,mapY+j*16,16,16);
g2.drawImage( ground,mapX+i*16 ,mapY+(j-(Math.abs(currentMap_Under[winY+j][winX+i])-1) )*16 ,0);
}
}
g2.setClip(0,0,W,H);
g.drawImage( BufferImage , 0,0,0);
//================== 敵人 =====================
if ( !overDraw ) foe(g);
//================== 魔法 =====================
if (useMagic && direction == 0 && currentMagic != 0 && !magicHit) magic(g);
//================== 主角 =====================
if ( (!useMagic || !magicStart || currentMagic ==0) && !snow){
g.setClip(manX -10 ,manY -34,22 ,36);
g.drawImage( man , manX -10 - (pAdd %4)*22 ,manY -34 - direction *36 ,0);
g.setClip(0,0,W,H);
}else{
if( magicStart && !snow){
switch(currentMagic){
case 1:
g.setClip(manX -10 ,manY -34,39 ,36);
g.drawImage( man , manX -10 - 125 ,manY -34 - direction *36 ,0);
g.setClip(0,0,W,H);
magicStart = !magicStart;
break;
case 2:
g.setClip(manX -17 ,manY -34,39 ,36);
g.drawImage( man , manX -17 - 88 ,manY -34 - direction *36 ,0);
g.setClip(0,0,W,H);
magicStart = !magicStart;
break;
}
}
}
//g.setColor(0,255,0);
//g.drawRect(mapX+(manPositionX-winX)*16,mapY+(manPositionY-winY)*16,16,16);
//g.fillRect( manX ,manY ,2,2);
// g.setColor(0,0,233);// ***************************
// g.fillRect((magicPositionX-winX)*16+mapX,(magicPositionY-winY)*16+mapY,16,16);
if ( overDraw ) foe(g);
if( magicHit || (useMagic && (direction != 0 || currentMagic == 0) )) {magic(g);}
//System.out.println("a");
/* if(bossBluting){
bossMagicX -= bossMagicStepX;if(bossMagicX>16){bossMagicX =0;bossMagicPositionX++;}else if(bossMagicX<-16){bossMagicX =0;bossMagicPositionX--;}
bossMagicY -= bossMagicStepY;if(bossMagicY>16){bossMagicY =0;bossMagicPositionY++;}else if(bossMagicY<-16){bossMagicY =0;bossMagicPositionY--;}
if( bossMagicPositionX > winX+W/16 || bossMagicPositionX <winX ||bossMagicPositionY <winY ||bossMagicPositionY > winY+H/16 ){bossMagicPositionX =0;bossMagicPositionY=0;bossBluting = false;}
g.setClip(mapX+bossMagicX+(bossMagicPositionX-winX)*16 ,mapY+bossMagicY+(bossMagicPositionY-winY)*16 -10,18,18);
g.drawImage(magicEffect ,mapX+ bossMagicX+(bossMagicPositionX-winX)*16 ,mapY+bossMagicY+(bossMagicPositionY-winY)*16-10 ,0);/////////////////////
g.setClip(0,0,W,H);
if ( bossMagicPositionX == manPositionX && bossMagicPositionY == manPositionY ) { manHealth -= 2; bossBluting = false; if( manHealth ==0){snow = true;}}
}*/
//snow = ! snow;
//================== 前景 =====================
for (int j=0;j< H/16+1;j++){
for (int i=0;i<W/16+1;i++){
g.setClip(mapX+i*16,mapY+j*16,16,16);
if (currentMap_Over[winY+j][winX+i] != 0 )
g.drawImage( ground,mapX+i*16,mapY+(j-(currentMap_Over[winY+j][winX+i]-1))*16,0);
if ( snow)g.drawImage( netPoint,mapX+i*16,mapY+j*16,0);
}
}
g.setClip(0,0,W,H);
//================== NPC 事件驅動 =====================
//System.out.println("currentMagic" + currentMagic);
//courseDrive(g);
//======================== 主角狀態 ============================
if( !snow){
g.drawImage(manState,0,0,0);
g.setColor(92,217,0);
g.fillRect(17,5,manHealth/2,2);
g.setColor(255,1,114);
g.fillRect(17,8,manMagic/2,2);
g.setColor(255,250,12);
g.fillRect(17,11,manDart,2);
//-------------------------------------
g.setColor(0,0,240);
g.drawRect(W-mapHeight-1,1,mapHeight,mapWidth);
g.setColor(57,176,234);
g.drawRect(W-mapHeight,2,mapHeight-2,mapWidth-2);
g.setColor(55,3,1);
g.fillRect(W-mapHeight-1+(manPositionX),1+(manPositionY),2,2);
if(foeAdd%4!=0){g.setColor(255,101,9);}else{g.setColor(167,20,20);}
g.drawRect(W-mapHeight-1+(manPositionX),1+(manPositionY),2,2);
/////////////////////////////////////////////////////////////////////
for ( int j = 0; j< currentMap_channel.length ;j ++){
g.setColor(0,200,22);
g.fillRect(W-mapHeight+currentMap_channel[j][0],2+currentMap_channel[j][1],currentMap_channel[j][2]*2,currentMap_channel[j][3]*2);
g.setColor(95,255,77);
g.drawRect(W-mapHeight+currentMap_channel[j][0],2+currentMap_channel[j][1],currentMap_channel[j][2]*2,currentMap_channel[j][3]*2);
if( manPositionX >= currentMap_channel[j][0] && manPositionX <=currentMap_channel[j][0] +currentMap_channel[j][2] && manPositionY >= currentMap_channel[j][1] && manPositionY <= currentMap_channel[j][1]+currentMap_channel[j][3]){
gameState = stateLoading;
currentMapID = currentMap_channel[j][4];
winX =currentMap_channel[j][5];
winY=currentMap_channel[j][6];
mapX = 0;
mapY = 0;
manPositionX = currentMap_channel[j][7];
manPositionY = currentMap_channel[j][8];
manX = (manPositionX - winX)*16;
manY = (manPositionY - winY)*16;
tmpManPositionX = manPositionX;
tmpManPositionY = manPositionY;
break ;
}
}
//-------------------------------------
/////////////
//g.setColor(33,255,2);
//g.drawString("當前劇情"+courseNum,64,64,0);
////////////
if ( !hint.equals("*")){
g.setColor(100,255,50);
g.drawString(hint,70,4,0);
showHint ++ ;
if (showHint >50)
{
showHint =0;
hint = "*";
}
}
}
g.translate(0,-4);
if ( showSubMenu){
canTalking = false;
g.setClip(W-105,H-53,110,60);
for(int i = 0;W-105 +i*netPoint.getWidth()<W;i++){
for(int j =0;W-105 +j*netPoint.getHeight()<H;j++){
g.drawImage(netPoint,W-105 +i*netPoint.getWidth() , H-52+j*netPoint.getHeight(),0);
}
}
for(int i = 0;W-105 +i*lineX.getWidth()<W ;i++){
//System.out.println(i);
g.drawImage(lineX,W-105 +i*lineX.getWidth() , H-53,0);
g.drawImage(lineY,W-105 , H-53+i*lineY.getHeight() ,0);
g.drawImage(lineY,W-54 , H-53+i*lineY.getHeight() ,0);
}
g.setClip(0,0,W,H);
g.drawImage(lu,W-107 , H-55 ,0);
if(foeAdd%2 ==0){g.setColor(220,10,10);}else{g.setColor(120,10,10);}
g.fillRect(W-52,H-51+subMenuSlt*12 ,56,11);
g.setClip (W-51,H-51,49,47);
g.drawImage(menuPic,W-51,H-159,0);
/////////////////////////////////////////////
g.setClip (0,0,W,H);
switch(manWeapon){
case 1:
g.drawImage(long1,W-97,H-46,0);
break;
case 2:
g.drawImage(long2,W-97,H-46,0);
break;
case 3:
g.drawImage(long3,W-97,H-46,0);
break;
}
/////////////////////////////////////////////
//g.setClip(0,0,W,H);
if ( keyState[0] ){keyState[0] = false;subMenuSlt --;if (subMenuSlt <0) {subMenuSlt = 0;}}else{
if ( keyState[1]){keyState[1] = false;
subMenuSlt ++;if (subMenuSlt > 3) {subMenuSlt =3;}
}
}
if (keyState[6]){//if (keyState[6]){
keyState[6] = false;
switch(subMenuSlt){
case 0:
showSubMenu = false;
//System.out.println("!!!!!");
break;
case 1:
saveAndRead(true);
showSubMenu = false;
subMenuSlt = 0;
break;
case 2:
musicCtrl = !musicCtrl;
// music();
showSubMenu = false;
subMenuSlt = 0;
break;
case 3:
cover = load("cover");
gameState = stateStart;
showSubMenu = false;
subMenuSlt = 0;
break;
}
}
if (keyState[5]){ keyState[5] = false;showSubMenu = !showSubMenu;subMenuSlt = 0;}
}else{triangle(g,W-10,H-6);}
g.translate(0,0);
// System.out.println("b");
//================ 魔法選單 ===================
if( !talking && !snow){
g.setColor(40,135,23);
g.fillRoundRect(2 + currentMagic *17,H - magicMenu.getHeight()-2 ,15,15,2,2);
g.drawImage(magicMenu ,2,H - magicMenu.getHeight()-2,0);//顯示魔法種類圖片
g.setClip(2 + currentMagic *17,H - magicMenu.getHeight()-2 ,16,17);
g.drawImage( magicMenuColorful,2 ,H - magicMenu.getHeight()-2 ,0);
g.setClip(0,0,W,H);
}else if ( !snow){
//=============== 對話方塊 ================
drawDialog(g,currentDialogue,1,H*2/3);
}
//System.out.println(manHealth);
if(snow){
//System.out.println("!!");
g.setColor(0,0,0);
g.fillRect(0,0,W,H/5);
g.fillRect(0,H*4/5,W,H/5+4);
if (slt ==0 && manHealth >0){
if( keyState[6]){keyState[6] = false;snow = false;}
drawDialog(g,gameShow,5,H/5+5);
}else if ( manHealth <=0){
g.drawImage(gameOver,W/2,H/2,17);
if( keyState[6]){
keyState[6] = false;
snow = false;
slt =0;
gameState = stateStart;
cover = load("cover");
}
}
}
// System.out.println("c");
//=============== 通道檢測 ================
// System.out.println("d");
}
//================================對話方塊========================================
int tmpPoint = 0;
int line = 0 ;
int subStringLength = 0;
int fontHeight = 0;
private void drawDialog(Graphics g, String s ,int dialogX ,int dialogY){
fontHeight = g.getFont().getHeight();
//----------------------------------------------
if ( !s.equals(gameShow) ){
//g.setColor(33,33,33);
g.setClip(dialogX+3,dialogY,W-2*(dialogX+3),H-141);
//g.fillRect(dialogX+3,dialogY,W-2*(dialogX+3),H-141);
for(int i = 0;dialogX +i*netPoint.getWidth()<W-2*(dialogX+3);i++){
for(int j =0;dialogX +j*netPoint.getHeight()<dialogY+H-142;j++){
g.drawImage(netPoint,dialogX+3 +i*netPoint.getWidth() , dialogY+j*netPoint.getHeight(),0);
}
}
for(int i = 0;dialogX +i*lineX.getWidth()<W-2*(dialogX+3);i++){
//System.out.println(i);
g.drawImage(lineX,dialogX +i*lineX.getWidth() , dialogY,0);
g.drawImage(lineX,dialogX +i*lineX.getWidth() , dialogY+H-142,0);
}
g.setClip(0,0,W,H);
g.drawImage(lu,dialogX , dialogY-2,0);
g.drawImage(ld,dialogX , dialogY+49,0);
g.drawImage(ru,W-dialogX -20 , dialogY-2,0);
g.drawImage(rd,W-dialogX -20, dialogY+49,0);
}
//----------------------------------------------
g.setColor(249,240,240);
subStringLength = 0;
for (line = tmpPoint;line< s.length(); line ++){
if ( s.charAt(line) == '<' ){subStringLength++;g.setColor(250,90,12);continue;}
if ( s.charAt(line) == '>' ){
subStringLength++;
dialogY+=fontHeight;
g.setColor(249,240,240);
continue;
}
if ( s.charAt(line) == '[' ){subStringLength++;g.setColor(160,249,250);continue;}
if ( s.charAt(line) == ']' ){subStringLength++;g.setColor(249,240,240);continue;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -