world.java~1~

来自「基于J2ME的手机游戏软件。可以控制游戏人物在地图上上下左右行走;可以在地图上放」· JAVA~1~ 代码 · 共 1,085 行 · 第 1/2 页

JAVA~1~
1,085
字号
	private void checkPropArray()
	{
		if(propArray != null)
		{
			for(int i = 0;i < propArray.length;i++)
			{
				if(propArray[i] != null && !propArray[i].isExist())
				{
					propArray[i] = null;
				}
				else if(propArray[i] != null)
				{
					propArray[i].cycle();
				}
			}
		}
	}
	
	private void renderProp(Graphics gra)
	{
		for(int i = 0;i < propArray.length;i++)
		{
			if(propArray[i] != null)
			{
				propArray[i].render(gra);
			}
		}
	}
	
	private void checkBombAndBlastArray()
	{
		for(int i = 0;i < MAX_BOMB_NUM;i++)
			{
				if(bombArray[i] != null)
				{
					if(bombArray[i].isBlast())
					{
						bombArray[i] = null;
						bombNum--;
					}
					else
					{
						bombArray[i].cycle();
					}
				}
				if(blastArray[i] != null)
				{
					if(blastArray[i].isLive() == false)
					{
						blastArray[i] = null;
					}
					else
					{
						blastArray[i].cycle();
					}
				}
			}
	}
	
	private void checkViewPoint()
	{
		if(actor.getX() > viewX + viewWidth / 2 && viewX + viewWidth < worldWidth)
			{
				viewX = actor.getX() - viewWidth / 2;
			}
			if(actor.getX() < viewX + viewWidth / 2 && viewX > 0)
			{
				viewX = actor.getX() - viewWidth / 2;
			}
			if(actor.getY() > viewY + viewHeight / 2 && viewY + viewHeight < worldHeight)
			{
				viewY = actor.getY() - viewHeight / 2;
			}
			if(actor.getY() < viewY + viewHeight /2 && viewY > 0)
			{
				viewY = actor.getY() - viewHeight / 2;
			}
			if(viewX < 0)
			{
				viewX = 0;
			}
			if(viewY < 0)
			{
				viewY = 0;
			}
			if(viewX + viewWidth > worldWidth)
			{
				viewX = worldWidth - viewWidth;
			}
			if(viewY + viewHeight > worldHeight)
			{
				viewY = worldHeight - viewHeight;
			}
	}
	
	private void checkEnemyArray()
	{
		for(int i = 0;i < enemyArray.length;i++)
			{
				if(enemyArray[i] != null)
				{
					if(enemyArray[i].isDisuse())
					{
						enemyArray[i] = null;
						enemyNum--;
					}
					else
					{
						enemyArray[i].cycle();
					}
				}
			}
	}
	
	private void renderDestroy(Graphics gra)
	{
		
		if(hasDestroy)
		{
			for(int i = 0;i < 4;i++)
			{
				if(destroyBrickX[i] != -1 && destroyBrickY[i] != -1)
				{
					destroyBrick.draw(gra,destroyBrickX[i] - viewX
											,destroyBrickY[i] - viewY
												,Graphics.TOP|Graphics.LEFT);
				}
			}
		}
	}
	
	private void renderEnemy(Graphics gra)
	{
		for(int i = 0;i < enemyArray.length;i++)
		{
			if(enemyArray[i] != null)
			{
				enemyArray[i].render(gra);
			}
		}
	}
	
	private void renderGate(Graphics gra)
	{
		imageSet.draw(gra,PROP_GATE,0,gateX - viewX,gateY - viewY
											,Graphics.TOP|Graphics.LEFT);
	}
	
	private void renderMap(Graphics gra)
	{
		for(int i = 0;i < map.length;i++)
		{
			for(int j = 0;j < map[i].length;j++)
			{
				int x = j * tileWidth;
				int y = i * tileHeight;
				if(x < viewX + viewWidth + 30 && x > viewX - 30
					&& y < viewY + viewHeight + 30 && y > viewY - 30)
				{
					if(map[i][j] == TILE1)
					{
						imageSet.draw(gra,TILE_1,0
										,x - viewX,y - viewY
											,Graphics.TOP|Graphics.LEFT);
					}
					if(map[i][j] == TILE2)
					{
						imageSet.draw(gra,TILE_2,0
										,x - viewX,y - viewY
											,Graphics.TOP|Graphics.LEFT);
					}
				}
			}
		}
	}
	
	private void renderMessage(Graphics gra)
	{
	//	gra.setColor(0x000000);
	//	gra.drawString("SCORE:"+score,10,10,Graphics.TOP|Graphics.LEFT);
	//	gra.drawString("LIFE:"+playerLife,80,10,Graphics.TOP|Graphics.LEFT);
		int n5 = (score % 100000) / 10000;
		int n4 = (score % 10000) / 1000;
		int n3 = (score % 1000) / 100;
		int n2 = (score % 100) / 10;
		int n1 = score % 10;
		imageSet.draw(gra,MONEY,0,10,5,Graphics.TOP|Graphics.LEFT);
		imageSet.draw(gra,NUMBER,n5,25,5,Graphics.TOP|Graphics.LEFT);
		imageSet.draw(gra,NUMBER,n4,35,5,Graphics.TOP|Graphics.LEFT);
		imageSet.draw(gra,NUMBER,n3,45,5,Graphics.TOP|Graphics.LEFT);
		imageSet.draw(gra,NUMBER,n2,55,5,Graphics.TOP|Graphics.LEFT);
		imageSet.draw(gra,NUMBER,n1,65,5,Graphics.TOP|Graphics.LEFT);
		
		n3 = ((clock / 20) % 1000) / 100;
		n2 = ((clock / 20) % 100) / 10;
		n1 = ((clock / 20) % 10);
		imageSet.draw(gra,CLOCK,0,85,5,Graphics.TOP|Graphics.LEFT);
		if((clock / 20) > 30)
		{
			imageSet.draw(gra,NUMBER,n3,100,5,Graphics.TOP|Graphics.LEFT);
			imageSet.draw(gra,NUMBER,n2,110,5,Graphics.TOP|Graphics.LEFT);
			imageSet.draw(gra,NUMBER,n1,120,5,Graphics.TOP|Graphics.LEFT);	
		}
		else
		{
			imageSet.draw(gra,NUMBER_RED,n3,100,5,Graphics.TOP|Graphics.LEFT);
			imageSet.draw(gra,NUMBER_RED,n2,110,5,Graphics.TOP|Graphics.LEFT);
			imageSet.draw(gra,NUMBER_RED,n1,120,5,Graphics.TOP|Graphics.LEFT);	
		}
		
		n1 = (playerLife % 10);
		imageSet.draw(gra,HEART,0,150,5,Graphics.TOP|Graphics.LEFT);
		imageSet.draw(gra,NUMBER,n1,165,5,Graphics.TOP|Graphics.LEFT);
	}
	
	public void render(Graphics gra)
	{
		if(drawState == DRAW_STATE_GAME)
		{
			gra.setColor(0xa8771c);
			gra.fillRect(0,0,viewWidth,viewHeight);
			
			renderGate(gra);
			renderProp(gra);
			renderMap(gra);
			renderBomb(gra);
			renderDestroy(gra);
			renderBlast(gra);
			renderEnemy(gra);
			actor.render(gra);
			renderMessage(gra);
		}
		else if(drawState == DRAW_STATE_MESSAGE)
		{
			renderStageChange(gra);
		}
		else if(drawState == DRAW_STATE_OVER)
		{
			renderGameOver(gra);
		}
	}
	
	public void keyPressed(int key)
	{
		actor.keyPressed(key);
	}
	
	public void keyReleased(int key)
	{
		actor.keyReleased(key);
	}
	
	public void pause()
	{
		isPause = true;
		actor.pause();
	}
	
	public void resume()
	{
		isPause = false;
		actor.resume();
	}
	
	public void addBomb(int x,int y,int power)
	{
		if(x == gateX && y == gateY)
		{
			if(enemyNum == 0)
			{
				stageOver();
				return;
			}
		}
		else
		{
			for(int i = 0;i < MAX_BOMB_NUM;i++)
			{
				if(bombArray[i] == null)
				{
					bombArray[i] = new Bomb(this,x,y,power);
					break;
				}
			}
			bombNum++;
		}
	}
	
	public void addBlast(int x,int y,int power)
	{
		for(int i = 0;i< MAX_BOMB_NUM;i++)
		{
			if(blastArray[i] == null)
			{
				blastArray[i] = new Blast(this,x,y,power);
				break;
			}		
		}
	}
	
	private void renderBomb(Graphics gra)
	{
		for(int i = 0;i < MAX_BOMB_NUM;i++)
		{
			if(bombArray[i] != null)
			{
				bombArray[i].render(gra);
			}
		}
	}
	
	private void renderBlast(Graphics gra)
	{
		for(int i = 0;i < MAX_BOMB_NUM;i++)
		{
			if(blastArray[i] != null)
			{
				blastArray[i].render(gra);
			}
		}
	}
	
	private void renderGameOver(Graphics gra)
	{
		gra.setColor(0x000000);
		gra.fillRect(line,0,5,200);
		imageSet.draw(gra,GAMEOVER,0,viewWidth / 2,viewHeight / 2
							,Graphics.VCENTER|Graphics.HCENTER);
		line += 5;
	}
	
	private void renderStageChange(Graphics gra)
	{
		Graphics imageGra = stageChangeImage.getGraphics();
		imageGra.setColor(0x000000);
		imageGra.fillRect(0,0,viewWidth,viewHeight);
		imageSet.draw(imageGra,STAGE,0,viewWidth/2-4,viewHeight/2
							,Graphics.VCENTER|Graphics.HCENTER);
		imageSet.draw(imageGra,NUMBER,gameMap.getCurrentStage()
							,viewWidth/2+30,viewHeight/2+1
							,Graphics.HCENTER|Graphics.VCENTER);
		imageSet.draw(imageGra,LIFE,0,viewWidth/2-4,viewHeight/2+50
							,Graphics.VCENTER|Graphics.HCENTER);
		imageSet.draw(imageGra,NUMBER,playerLife,viewWidth/2+25,viewHeight/2+59
							,Graphics.VCENTER|Graphics.HCENTER);
	
		gra.drawImage(stageChangeImage,0,0,Graphics.TOP|Graphics.LEFT);
	}
	
	public Actor getActor()
	{
		return actor;
	}
	
	public Enemy[] getEnemyArray()
	{
		return enemyArray;
	}
	
	private boolean collidesWithBomb(int tileX,int tileY,boolean isActor)
	{
		int bx = tileY * tileHeight;
		int by = tileX * tileWidth;
		for(int i = 0;i < bombArray.length;i++)
		{
			if(bombArray[i] != null)
			{
				if(bombArray[i].getX() == bx && bombArray[i].getY() == by)
				{
					if(isActor)
					{
						if(bombArray[i].getAcross())
						{
							return false;
						}
						else 
							return true;
					}
					else
					{
						return true;
					}
				}
			}
		}
		return false;
	}
	
	private boolean collidesWithDestroyBrick(int tileX,int tileY)
	{
		if(hasDestroy == false)
		{
			return false;
		}
		int x = tileY * tileWidth;
		int y = tileX * tileHeight;
		for(int i = 0;i < 4;i++)
		{
			if(destroyBrickX[i] >= 0 
				&& destroyBrickX[i] == x
					&& destroyBrickY[i] >= 0 
						&& destroyBrickY[i] == y)
			{
				return true;
			}
		}
		return false;
	}
	
	private boolean collidesWithProp(int tileX,int tileY)
	{
		int	x = tileY * tileWidth;
		int	y = tileX * tileHeight;
		for(int i = 0;i < propArray.length;i++)
		{
			if(propArray[i] != null && x == propArray[i].getX() 
									&& y == propArray[i].getY())
			{
				propArray[i].action();
				return true;
			}
		}
		return false;
	}	
	
	public boolean canAcross(int tileX,int tileY,boolean isActor)
	{
		if(isActor && propArray != null)
		{
			collidesWithProp(tileX,tileY);
		}
		
		if(map[tileX][tileY] == TILE1)
			return false;
		if(map[tileX][tileY] == TILE2)
			return false;
		if(collidesWithBomb(tileX,tileY,isActor))
			return false;
		if(collidesWithDestroyBrick(tileX,tileY))
			return false;
		return true;
	}
	
	public static boolean collidesRect(int [][] a,int [][] b)
	{
		if(a.length > 4 || b.length > 4)
		{
			System.out.println("error7");
			return false;
		}
		int ax1 = a[0][0];
		int ay1 = a[0][1];
		int ax2 = a[1][0];
		int ay2 = a[1][1];
		int ax3 = a[2][0];
		int ay3 = a[2][1];
		int ax4 = a[3][0];
		int ay4 = a[3][1];
		for(int i = 0;i < b.length;i++)
		{
			if(b[i][0] >= ax1 && b[i][0] <= ax2 && b[i][1] >= ay1 && b[i][1] <= ay4)
			{
				return true;
			}
		}
		return false;
	}
	
	public int getEnemyNum()
	{
		return enemyNum;
	}
	
	public int getScore()
	{
		return score;
	}
	
	public void addScore(int buf)
	{
		score = buf + score;
		if(score > MAX_SCORE)
		{
			score = MAX_SCORE;
		}
	}
	
	public int getDrawState()
	{
		return drawState;
	}
	
	public void stageOver()
	{
		if(actor.isLive() == false)
		{
			playerLife--;
			if(playerLife == 0)
			{
				gameOver();
			}
			else
			{
				initStage(gameMap.getCurrentStage());
			}
		}
		else if(enemyNum == 0)
		{
			addScore((clock / 20) * 10);
			int i = gameMap.getCurrentStage();
			if(i + 1 <= gameMap.getTotalStageNum())
			{
				initStage(i + 1);
			}
			else
			{
				gameOver();
			}
		}
	}
	
	public void gameOver()
	{
		stopCyc = 0;
		drawState = DRAW_STATE_OVER;
	}
	
	public int getBombNum()
	{
		return bombNum;
	}
	
	public void addPlayerLife()
	{
		playerLife++;
		if(playerLife > MAX_LIFE)
		{
			playerLife = MAX_LIFE;
		}
		
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?