📄 gamecanvas.java
字号:
break;
}
}else if (enemyX > playerX ){
enemyAction = enemyEscape_L;
}else{
enemyAction = enemyEscape_R;
}
}
break;
case 4://忍者
if ( !enemyBulleting){
if( Math.abs(enemyY - playerY) < 50 && r.nextInt()%5 > 3){
if( enemyX>playerX ){
enemyAction = enemyAttack_L;
}else{
enemyAction = enemyAttack_R;
}
}
}
if(Math.abs(enemyX - playerX) < playerRadiiX*3){
if( enemyX > playerX ){
enemyAction = enemyEscape_R;
}else{
enemyAction = enemyEscape_L;
}
}
break;
case 5://老鼠
if( Math.abs(enemyX - playerX) < playerRadiiX && Math.abs(enemyY - playerY) < 5 ){
if( playerX - enemyX >= playerRadiiX + 10 ){
enemyAction = enemyAttack_R;
}else if( enemyX - playerX >= playerRadiiX + 10 ){
enemyAction = enemyAttack_L;
}
}
break;
case 11://青蛙
if( Math.abs(enemyX - playerX) < playerRadiiX*4 && Math.abs(enemyY - playerY) < 5 ){
if( playerX - enemyX >= playerRadiiX + 10 ){
enemyAction = enemyAttack_R;
}else if( enemyX - playerX >= playerRadiiX + 10 ){
enemyAction = enemyAttack_L;
}
}
break;
case 12://变异人
if ( !enemyBulleting){
if( Math.abs(enemyY - playerY) < 50 && r.nextInt()%5 > 3){
if( enemyX>playerX ){
enemyAction = enemyAttack_L;
}else{
enemyAction = enemyAttack_R;
}
}
}
break;
case 13://心魔
if ( !enemyBulleting){
if( Math.abs(enemyY-playerY) < 50 && r.nextInt()%5 > 3){
if( enemyX>playerX ){
enemyAction = enemyAttack_L;
}else{
enemyAction = enemyAttack_R;
}
}
}
break;
case 14://漂浮的M
//NULL!~
break;
}
enemyActionIndex++;
if( enemyActionIndex > enemyActionList[enemyAction].length -1 ){
enemyActionIndex = 0;
if( enemyAction == 5 && enemyAction == 11){
//enemyAction = -1;
}
enemyActionAdd++;
if( r.nextInt()%10 > 0 || enemyActionAdd >= 4 ){
enemyActionAdd = 0;
if( enemyX < playerX ){
enemyAction = enemyEscape_R;
}else{
enemyAction = enemyEscape_L;
}
}
}
if( r.nextInt()%10 > 6 && (enemyAction == enemyRun_L || enemyAction == enemyRun_R)){
if( enemyX < playerX ){
enemyAction = enemyRun_R;
}else{
enemyAction = enemyRun_L;
}
}
switch(enemyAction){
case enemyRun_R:
if( moveAble(enemyX+playerRadiiX*2,enemyY-5) && r.nextInt()%10 > -3/*&& moveAble(enemyX-playerRadiiX*2,enemyY-5) */){
enemyX += enemySpeed;
}else if ( (!moveAble(enemyX+playerRadiiX*2,enemyY-5) && enemyFallValue == 0 && r.nextInt()%5 > 0) || r.nextInt()%100>92){
enemyAction = enemyJump_R;
enemyFallValue = -13;
}
break;
case enemyRun_L:
if( moveAble(enemyX-playerRadiiX*2,enemyY-5) && r.nextInt()%10 > -3/* && moveAble(enemyX+playerRadiiX*2,enemyY-5)*/){
enemyX -= enemySpeed;
}else if ( (!moveAble(enemyX-playerRadiiX*2,enemyY-5) && enemyFallValue == 0 && r.nextInt()%5 > 0 ) || r.nextInt()%100>92){
enemyAction = enemyJump_L;
enemyFallValue = -13;
}
break;
case enemyJump_R:
if( moveAble(enemyX+playerRadiiX,enemyY-5)){
enemyX += enemySpeed;
}
break;
case enemyJump_L:
if( moveAble(enemyX-playerRadiiX,enemyY-5)){
enemyX -= enemySpeed;
}
break;
case enemyEscape_R:
if( moveAble(enemyX-playerRadiiX,enemyY-5)){
enemyX -= enemySpeed;
}else{
enemyAction = enemyRun_R;
}
if( r.nextInt()%10>4){
enemyAction = enemyRun_R;
}
break;
case enemyEscape_L:
if( moveAble(enemyX+playerRadiiX,enemyY-5)){
enemyX += enemySpeed;
}else{
enemyAction = enemyRun_L;
}
if( r.nextInt()%10>4){
enemyAction = enemyRun_L;
}
break;
case enemyAttack_R://处理攻击细节
switch( enemyStyle){
case 1:
case 2:
case 3:
case 5:
break;
case 4://忍者
if( !enemyBulleting ){
// System.out.println(" BULLETING~ a");
enemyBulleting = true;
enemyAction = enemyEscape_R;
enemyBulletX = enemyX;
enemyBulletY = enemyY-22;
enemyBulletStepX = 4;
// System.out.println(" BULLETING~ b");
}
break;
case 11://青蛙
if( !enemyBulleting ){
// System.out.println(" BULLETING~ a");
enemyBulleting = true;
enemyAction = enemyEscape_R;
enemyBulletX = enemyX;
enemyBulletY = enemyY-22;
enemyBulletStepX = 1;
// System.out.println(" BULLETING~ b");
}
break;
case 12://变异人
if( !enemyBulleting ){
// System.out.println(" BULLETING~ a");
enemyBulleting = true;
enemyAction = enemyEscape_R;
enemyBulletX = enemyX;
enemyBulletY = enemyY-22;
enemyBulletStepX = 3;
// System.out.println(" BULLETING~ b");
}
break;
case 13://心魔
if( !enemyBulleting ){
// System.out.println(" BULLETING~ a");
enemyBulleting = true;
enemyAction = enemyEscape_R;
enemyBulletX = enemyX;
enemyBulletY = enemyY-22;
enemyBulletStepX = 1;
enemyBulletStepY = -2;
// System.out.println(" BULLETING~ b");
}
break;
case 14://漂浮的M
if( !enemyBulleting ){
// System.out.println(" BULLETING~ a");
enemyBulleting = true;
enemyAction = enemyEscape_R;
enemyBulletX = enemyX;
enemyBulletY = enemyY-22;
enemyBulletStepX = 7;
// System.out.println(" BULLETING~ b");
}
break;
}
break;
case enemyAttack_L:
switch( enemyStyle){
case 1:
case 2:
case 3:
break;
case 4:
if( !enemyBulleting ){
// System.out.println(" BULLETING~ a");
enemyBulleting = true;
enemyAction = enemyEscape_L;
enemyBulletX = enemyX;
enemyBulletY = enemyY-22;
enemyBulletStepX = -1;
// System.out.println(" BULLETING~ b");
}
break;
case 5:
break;
case 11:
break;
case 12:
break;
case 13:
break;
case 14:
break;
}
break;
case enemyFaint_R:
if( moveAble(enemyX-playerRadiiX,enemyY-5) && Add % 2 ==0){
enemyX--;
}
break;
case enemyFaint_L:
if( moveAble(enemyX+playerRadiiX,enemyY-5) && Add % 2 ==0){
enemyX++;
}
break;
}
}/////
if( enemyStyle != 14)enemyGravity();
if( enemyBulleting) enemyBulletUpdate();
if( !moveAble(enemyX,enemyY) && enemyY > mapY+(getPosY(enemyY) - winY)*32 ){
enemyY = mapY+(getPosY(enemyY) - winY)*32;
if( enemyAction == enemyJump_R){
enemyAction = enemyRun_R;
}else if ( enemyAction == enemyJump_L){
enemyAction = enemyRun_L;
}
enemyFallValue = 0;
}
////////////////////////////////////////////////////////
}
public void enemyBulletUpdate(){
if ( enemyNormX != 0 ){
enemyBulletX += enemyNormX;
}
if ( enemyNormY != 0 ){
enemyBulletY += enemyNormY;
}
switch(enemyStyle){
case 4:
enemyBulletX += enemyBulletStepX;
enemyBulletY += enemyBulletStepY;
if( enemyBulletX< -10 || enemyBulletX > W+10) enemyBulleting = false;
break;
case 13:
enemyBulletX += enemyBulletStepX;
enemyBulletY += enemyBulletStepY;
break;
}
}
public void enemyGravity(){
if ( enemyNormX != 0 ){
enemyX += enemyNormX;
}
if ( enemyNormY != 0 ){
enemyY += enemyNormY;
}
if(moveAble(enemyX,enemyY)||enemyAction == enemyJump_L||enemyAction == enemyJump_R){
enemyFallValue += worldGravity;
enemyY += enemyFallValue;
if( !moveAble(enemyX,enemyY) && enemyY > mapY+(getPosY(enemyY) - winY)*32 ){
enemyY = mapY+(getPosY(enemyY) - winY)*32;
if( enemyAction == enemyJump_R){
enemyAction = enemyRun_R;
}else if ( enemyAction == enemyJump_L){
enemyAction = enemyRun_L;
}
enemyFallValue = 0;
}
}else{
enemyFallValue = 0;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
public void paintEnemy(Graphics g){
if( enemyHealth> 0)drawEnemyAction(enemyX+worldShakeX , enemyY+worldShakeY ,enemyActionList[enemyAction][enemyActionIndex],g);
drawBullet(g);
}
public void drawEnemyAction(int enemyX , int enemyY ,int action ,Graphics g){
for(int i =0; i<= enemyActionData[action].length-6; i+=6){
g.setClip(enemyX+enemyActionData[action][i] , enemyY+enemyActionData[action][i+1] , enemyActionData[action][i+2] , enemyActionData[action][i+3]);
g.drawImage(enemyImage ,enemyX+enemyActionData[action][i]+enemyActionData[action][i+4] , enemyY+enemyActionData[action][i+1] + enemyActionData[action][i+5],0);
}
g.setClip(0,0,W,H);
}
public void drawBullet(Graphics g){
switch(enemyStyle){
case 4:
g.setClip( enemyBulletX , enemyBulletY ,7,7);
g.drawImage(enemyImage,enemyBulletX-197-(Add%2)*7 , enemyBulletY ,0);
break;
}
}
}
//------------------------------- 剧情/场景 -------------------------------------------
public int sceneY = 50;
public int sceneHeight = 25;
public int sceneTmpPoint = 3;
public int sceneEndFlag = 0;
public final int sceneStart = 0;//屏幕切换(百页窗效果)
public final int sceneLoad = 1;//把sceneData里的图 读进来
public final int scenePlaying = 2;//播放动画,判断所有图层运动结束
public final int sceneEsc = 3;//屏幕切换(百页窗效果)
public final int sceneStop = 4;//游戏状态切换
public int sceneState = sceneStart;
public int[][] sceneData = {
//初始坐标, 图片号(负) ,曲线折点数,切片宽高 , 偏移值, 步进值 , 祯速 , 循环次数 |
/*| layer 0|*/{ 0, 0, -4, 0, -1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-2,-3,-4,-5,-1-2,-6,-7,-8,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-2,-3,-4,-5,-1-2,-6,-7,-8,-2,-2,-2},
/*| layer 1|*/{ 0, 0, 1, 0, 40, 25, -1, -25, 1, 0, 2, 14, /*|*/40, 25, -1, -25, -1, 1, 7, 14, /*|*/40, 25, -1, -25, -1, 1, 7, 14, /*|*/40, 25, -1, -25, -1, 1, 7, 14},
/*| layer 2|*/{ 208, 50, 2, 0, 30, 25, -20, 1, -10, 0, 3, 14, /*|*/30, 25, -20, 1, -1, 0, 3, 14, /*|*/30, 25, -20, 1, -1, 1, 3, 14, /*|*/30, 25, -20, 1, -1, 1, 3, 14},
/*| layer 3|*/{ 0, 50, 3, 0, 30, 25, 0, 0, 2, 0, 1, 24 , /*|*/30, 25, 0, 0, -12, 1, 1, 14 , /*|*/30, 25, 0, 0, -12, 1, 1, 14 , /*|*/30, 25, 0, 0, -12, 1, 1, 14 }
/*| layer 4|*/
/*| layer 5|*/
/*| layer 6|*/
/*| layer 7|*/
};
public Image[] sceneImage;
public void gameScene(){
switch(sceneState){
case sceneStart:
sceneImage = new Image[sceneData.length-1];
if(Add>26){
sceneState = sceneLoad;
}
break;
case sceneLoad:
System.out.println(" load Scene!");
for(int i = 0; i< sceneData.length-1; i++){
sceneImage[i] = loadImage("sceneIma
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -