⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamemain.java

📁 一款基于java 的赛车类游戏 一款基于java 的赛车类游戏
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
					(sprCrab[i].isVisible) &&
					(heroX == sprCrab[i].mapX) &&
					(heroY == sprCrab[i].mapY) &&
					(sprCrab[i].getFrame() > 2))
				{
					snd.playSound(game.SNDID_COLLIDE, 1);
					respawnTime = game.getTime() + 3000;
					sMessage = "被螃蟹夹到!";				
				}
			}
			//
			// monkey
			//
			for (int i=0; i<sprMonkey.length; i++)
			{

				if ((!sprKangoo.isMoving) &&
					(sprMonkey[i].isVisible) &&
					(heroX == sprMonkey[i].mapX) &&
					(heroY == sprMonkey[i].mapY) &&
					((sprMonkey[i].posX == 0 - Config.SPR_MONKEY_OFFSETX) ||
					 (sprMonkey[i].posX == Config.SCREEN_WIDTH - Config.SPR_MONKEY_WIDTH + 
							Config.SPR_MONKEY_OFFSETX)))
				{
					if (sprMonkey[i].isPlayingAnim() == false)
					{
						if (sprMonkey[i].dir == Config.DIR_RIGHT)
							sprMonkey[i].setFrameSequenceTotalTime(ANIM_MONKEY_TO_RIGHT, Sprite.FORWARD, 400);
						else
							sprMonkey[i].setFrameSequenceTotalTime(ANIM_MONKEY_TO_LEFT, Sprite.FORWARD, 400);						
					}
					else
					{
						if ((sprMonkey[i].getFrame() == 2) ||
								(sprMonkey[i].getFrame() == 5))
						{
							snd.playSound(game.SNDID_COLLIDE, 1);
							respawnTime = game.getTime() + 3000;
							sMessage = "被野人攻击!";
							bHitByMonkey = true;
						}
					}
				}
			}

		}
		
		//
		//	check what's under kangoo
		//
		if (!sprKangoo.isMoving)
		{
			int til = getTile(heroX, heroY); 
			if (til == Config.TILE_TURTLE_UP)
				setTile(heroX,heroY, Config.TILE_TURTLE_DOWN);

			boolean onAnimatedLeaf = false;
			for (int a=0; a<nLeafsDis.length /2; a++)
				if (herooffset == nLeafsDis[a + a + 0])
					onAnimatedLeaf = true;
				
			if (onAnimatedLeaf == false)
			{
			if (til == Config.TILE_LEAF)
			{
				setTile(heroX,heroY, Config.TILE_LEAF_DOWN1);
				leafChange = game.getTime() + 400;
			}
			else
			if ((game.getTime() > leafChange) && (til == Config.TILE_LEAF_DOWN1))
			{
				setTile(heroX,heroY, Config.TILE_LEAF_DOWN2);
				leafChange = game.getTime() + 400;
			}
			else
			if ((game.getTime() > leafChange) && (til == Config.TILE_LEAF_DOWN2))
				setTile(heroX,heroY, Config.TILE_WATER);
			
			// clear the timer
			//if ((til != Config.TILE_LEAF) && (til != Config.TILE_LEAF_DOWN1) && (til != Config.TILE_LEAF_DOWN2))
				//leafChange = 0;
			}
			
		}

		//
		//	handle disappearing leafs
		//
		for (int a=0; a<nLeafsDis.length /2; a++)
		{
			boolean can = true;
			//if ((herooffset == nLeafsDis[a + a + 0]) && (!sprKangoo.isMoving))
				//can = false;
			//if ((herooldoffset == nLeafsDis[a + a + 0]) && (!sprKangoo.isMoving))
				//can = false;
				
			if (can)
			{
				int time = (int)Utils.getTime() - nLeafsDis[a + a + 1];
				time = time / 400;
				time = time % 12;
				// animate the leafs
				// time gets from 0 to 11
				// 0..3 - normal leaf
				// 4..6 - leaf disappears
				// 7..8 - only water
				// 9..11 - leaf appears
				if (time < 4)
					setTile(nLeafsDis[a + a + 0], Config.TILE_LEAF);
				if ((time >= 4) && (time < 7))
					setTile(nLeafsDis[a + a + 0], Config.TILE_LEAF + ((time - 4) * Config.TILE_WIDTH));
				else
				if ((time >= 7) && (time < 9))
					setTile(nLeafsDis[a + a + 0], 0);
				else
					setTile(nLeafsDis[a + a + 0], Config.TILE_LEAF + ((2 - (time - 9)) * Config.TILE_WIDTH));
			}
		}
		
		//
		//	put the turtle back up
		//
		if ((sprKangoo.isMoving == true) && (Utils.getTime() > (sprKangoo.m_moveStartTime + 250)) && 
				(getTile(oldHeroX, oldHeroY) == Config.TILE_TURTLE_DOWN))
			setTile(oldHeroX, oldHeroY, Config.TILE_TURTLE_UP);
		
		
	}



	/**
	 * @param g
	 */
	public void paint(Graphics g)
	{
		if (!levelPrepared)
			return;

		g.translate(0, 0);
		g.setClip(0,0, Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT);
		g.setColor(0);
		
		paintTiled(g, 0, Config.TILED_SCREEN_OFFSETY);
		g.translate(0, scrollY);
		
		int x,y;
		boolean bFoundAPlace;
		for (int a=0; a<countFlares; a++)
		{
			int ofs = a *3;
			if ((aFlares[ofs + 2] != 0) && ((int)game.getTime() > aFlares[ofs + 2]))
			{
				// paint!
				int frame = (int)game.getTime() - aFlares[ofs + 2];
				if (frame <= 1200)
				{
					frame = frame / 200;
					g.setClip(aFlares[ofs + 0], aFlares[ofs + 1], Config.SPR_FLARE_WIDTH, Config.SPR_FLARE_HEIGHT);
					g.drawImage(iFlare, aFlares[ofs + 0] - (frame * Config.SPR_FLARE_WIDTH), aFlares[ofs + 1], Config.ANCHOR);					
				}
				else
				aFlares[ofs + 2] = 0;
			}
			else
			{
				bFoundAPlace = false;
	
				x = 0; 	y = 0;
				while (bFoundAPlace == false)
				{
					x = Math.Rand(mapWidth - 1);
					y = Math.Rand(2, mapHeight - 2);
					//Utils.Log(x+", "+y);
					
					// check type of map pos
					int tile = getTile(x, y);
					if (tile == Config.TILE_WATER)
						bFoundAPlace = true;	
				}
				aFlares[ofs + 0] = (x * Config.TILE_WIDTH) + Config.SPR_FLARE_WIDTH + 
								Math.Rand(0, Config.TILE_WIDTH - (Config.SPR_FLARE_WIDTH * 2));
				aFlares[ofs + 1] = ((y - mapMaxOffsetY) * Config.TILE_HEIGHT) + Config.SPR_FLARE_HEIGHT + 
								Math.Rand(0, Config.TILE_HEIGHT - (Config.SPR_FLARE_HEIGHT * 2)) + Config.TILED_SCREEN_OFFSETY;
				aFlares[ofs + 2] = (int)(game.getTime() + Math.Rand(2500)); 
			}
			
			
		}
		
		for (int i=0; i<sprCrab.length; i++)
			sprCrab[i].paint(g);

		for (int i=0; i<sprBonuses.length; i++)
			sprBonuses[i].paint(g);
		
		sprKangoo.paint(g);
		//
		//	draw stars on mag
		//
		int ofs, id;
		if ((bHitByPelican) || (bHitByMonkey))
		{
			for (int a=0; a<Config.GAME_STARS_COUNT; a++)
			{
				ofs = a * 3;
				if (tabStars[ofs + 0] <= 0)
				{
					tabStars[ofs + 0] = Config.GAME_STARS_TIME;
					tabStars[ofs + 1] = sprKangoo.posX + 1 + Math.Rand(0, Config.SPR_KANGOO_WIDTH - 1);
					tabStars[ofs + 2] = sprKangoo.posY - 2 + Math.Rand(0, 6);
				}
				x = tabStars[ofs + 1];
				y = tabStars[ofs + 2];
				id = tabStars[ofs + 0] / 8192;
				tabStars[ofs + 0] -= Config.GAME_STARS_DELTA;
				if (id == 2)
					id = 0;
				if (id == 1)
					id = 3;
				
				g.setClip(x,y,3,3);
				g.drawImage(iStar, x - id, y, Config.ANCHOR);
			}
		}
		
		
		for (int i=0; i<countPelican; i++)
			sprPelican[i].paint(g);
		
		for (int i=0; i<countMonkey; i++)
		{
			ofs = (int)game.getTime() + monkeyTime[i];
			ofs /= 100;
			ofs = ofs % (Config.TILE_WIDTH * 4);
			if ((ofs > Config.TILE_WIDTH) && (ofs < (Config.TILE_WIDTH * 2)))
			{
				ofs = Config.TILE_WIDTH; // stay here
			}
			else
			if (ofs >= (Config.TILE_WIDTH * 2))
			{
				ofs = Config.TILE_WIDTH - (ofs - (Config.TILE_WIDTH * 2)); // move back
			}
		
			
			if (sprMonkey[i].dir == Config.DIR_RIGHT)
			{
				sprMonkey[i].posX = 0 - Config.SPR_MONKEY_OFFSETX - Config.TILE_WIDTH + ofs;
			}
			else
			{
				sprMonkey[i].posX = Config.SCREEN_WIDTH - Config.SPR_MONKEY_WIDTH + 
					Config.SPR_MONKEY_OFFSETX  + Config.TILE_WIDTH - ofs;;
			}
			sprMonkey[i].paint(g);
		}
		
		
		
	
		g.translate (-g.getTranslateX(), - g.getTranslateY ());
		paintPanel(g);
		
		if (respawnTime != 0)
			//Utils.paintTextOnBar(g, null, game.writer, Config.FRAME_BACKGROUND, Config.FRAME_BORDER, sMessage);
		//*****	***************//*****	***************	
		if(sMessage != "")
		{
		//	g.setClip (0,	Config.SCREEN_HEIGHT_HALF,Config.SCREEN_WIDTH,15);
			g.setClip(0, 0, Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT);
			g.setColor(Config.FRAME_BORDER);
			//g.drawImage(game.iBackg, 0, 0, Config.ANCHOR);
			g.drawLine(0,Config.SCREEN_HEIGHT_HALF-1,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF-1);
			g.drawLine(0,Config.SCREEN_HEIGHT_HALF+16,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF+16);
			//g.drawRect(0,Config.SCREEN_HEIGHT_HALF,Config.SCREEN_WIDTH,15);
			
			g.setColor(Config.FRAME_BACKGROUND);
			g.fillRect(0,Config.SCREEN_HEIGHT_HALF,Config.SCREEN_WIDTH,15);
			g.drawLine(0,Config.SCREEN_HEIGHT_HALF,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF);
			g.drawLine(0,Config.SCREEN_HEIGHT_HALF+15,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF+15);
			
		}
		g.setClip(0, 0, Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT);
		g.setColor(255, 255, 255);
		g.drawString(sMessage,Config.SCREEN_WIDTH_HALF,Config.SCREEN_HEIGHT_HALF-1,Graphics.TOP|Graphics.HCENTER);
		//*****	***************//*****	***************	
		//
		//	draw a fancy scroll message
		//
		if (scrollMessageTime > game.getTime())
		{
			// calculate current offset for scroll
			int t = (((Config.SCROLL_TIME + Config.SCROLL_TIME_PAUSE) - (int)(scrollMessageTime - game.getTime())) << 16) /
						Config.SCROLL_TIME;
			
			//int pause = ((Config.SCREEN_WIDTH + scrollMessageWidth) << 16) / (Config.SCROLL_TIME + Config.SCROLL_TIME_PAUSE);
			//pause = (pause * Config.SCROLL_TIME_PAUSE) >> 16;
			
			t = ((Config.SCREEN_WIDTH + scrollMessageWidth) * t) >> 16;
			//int middle = Config.SCREEN_WIDTH_HALF + (scrollMessageWidth >> 1);
			if ((t > scrollMiddle) && ( t <= (scrollMiddle + scrollPause))) 
				t = scrollMiddle;
			else
			if ( t > (scrollMiddle + scrollPause)) 
				t -= scrollPause;
				
			/*game.writer.drawText(g, sScrollMessage, 
									Config.SCREEN_WIDTH + 10 - t,
									Config.SCREEN_HEIGHT - 1 - game.writer.getHeight());
			*/
		/*	g.setColor(Config.FRAME_BORDER);
			//g.drawImage(game.iBackg, 0, 0, Config.ANCHOR);
			//g.drawLine(0,Config.SCREEN_HEIGHT_HALF-1,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF-1);
			//g.drawLine(0,Config.SCREEN_HEIGHT_HALF+16,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF+16);
			//g.drawRect(0,Config.SCREEN_HEIGHT_HALF,Config.SCREEN_WIDTH,15);
			
			g.setColor(Config.FRAME_BACKGROUND);
			g.fillRect(0,Config.SCREEN_HEIGHT_HALF,Config.SCREEN_WIDTH,15);
			g.drawLine(0,Config.SCREEN_HEIGHT_HALF-1,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF-1);
			g.drawLine(0,Config.SCREEN_HEIGHT_HALF+16,Config.SCREEN_WIDTH,Config.SCREEN_HEIGHT_HALF+16);
			*/
			
			g.setColor(255, 255, 255);
			g.drawString(sScrollMessage,Config.SCREEN_WIDTH_HALF,Config.SCREEN_HEIGHT_HALF+20,Graphics.TOP|Graphics.HCENTER);
		}
		else
			scrollMessageTime = -1;
		
		
		if (bDisplaySubMenu)
		{			
			//SubMenuOptions.paint(g);
			/*game.writer.drawText(g, game.sRightSoftKey, 
					Config.SCREEN_WIDTH - game.writer.strLen(game.sRightSoftKey), 
					Config.SCREEN_HEIGHT - game.writer.getHeight()  - 5);*/
				/*g.setClip (Config.SCREEN_WIDTH_HALF-45,	Config.SCREEN_HEIGHT - 120,90,60);
				g.drawImage(game.iBackg, 0, 0, Config.ANCHOR);
				g.setColor(0,192,0);
				g.drawRect(Config.SCREEN_WIDTH_HALF-45,	Config.SCREEN_HEIGHT - 120,90,60);
				
				g.setColor(125,192,0);
				g.drawRect(Config.SCREEN_WIDTH_HALF-45,	Config.SCREEN_HEIGHT - PosY,90,15);
				g.fillRect(Config.SCREEN_WIDTH_HALF-45,	Config.SCREEN_HEIGHT - PosY,90,15);
				
				g.setColor(255,255,255);*/
				if(MenuIndex != 2)
				{
					g.drawImage(game.menubox, Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 109, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(game.arrowLeft, Config.SCREEN_WIDTH_HALF+43 ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(game.arrowRight, Config.SCREEN_WIDTH_HALF-45 ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
				}
				else
				{
					g.drawImage(menubox1, Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 109, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(game.arrowLeft, Config.SCREEN_WIDTH_HALF+60 ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(game.arrowRight, Config.SCREEN_WIDTH_HALF-62 ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
				}
				if(MenuIndex == 1)
				{
					//g.drawString("继续", Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(imgSub[0], Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
				}
				else if(MenuIndex == 2)
				{
					//g.drawString("重新开始本关", Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(imgSub[1], Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
				}
				else if(MenuIndex == 3)
				{
					//g.drawString("主菜单", Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(imgSub[2], Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
				}
				else if(MenuIndex == 4)
				{
					//g.drawString("退出", Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
					g.drawImage(imgSub[3], Config.SCREEN_WIDTH_HALF ,Config.SCREEN_HEIGHT - 105, Graphics.TOP|Graphics.HCENTER);
				}
		}
        if (Main.pauseDuration != 0) {
            Main.pauseDuration = 0;
        }
	}

public void resetMenuIndex()
{
	MenuIndex = 1;
	//PosX = 35;
	PosY = 120;
}

	/**
	 * paintPanel paints the panel with current data on it
	 * 
	 * @param g -
	 *            Graphics handle
	 */
	public void paintPanel(Graphics g)
	{
		
		g.setClip(0, 0, Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT);
		g.drawImage(iPanel, 0, 0, Config.ANCHOR);
		String s = new String();


		// level number (bonus - 1)
		if ((game.nPlayerLevel + 1) < 10)
			s = '0' + Integer.toString(game.nPlayerLevel + 1);
		else
			s = Integer.toString(game.nPlayerLevel + 1);
		
		drawNumber(g, 8, 5, s);
		
		// points
		int pts = game.nPlayerPoints + game.nPlayerLevelPoints;
		if (pts < 10)
			s = "0000" + Integer.toString(pts);
		else if (pts < 100)
			s = "000" + Integer.toString(pts);
		else if (pts < 1000)
			s = "00" + Integer.toString(pts);
		else if (pts < 10000)
			s = "0" + Integer.toString(pts);
		else
			s = Integer.toString(pts);
		drawNumber(g, 132, 5, s);
		
		// lifes
		s = Integer.toString(game.nPlayerLifes);		
		drawNumber(g, 43, 5, s);
		
		// progress
		pts = (heroY << 8) / (mapHeight - 1);
		pts = 55 - ((55 * pts) >> 8);
	    g.setClip(0, 0, Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT);
	    g.setColor( 0, 255, 0);
		g.fillRect(63, 8, pts, 4);

		
		
	}


	
	/**
	 * Draws one digit with preloaded font
	 * 
	 * @param g
	 *            Graphics object
	 * @param x
	 *            x coordinate of the upper-left corner
	 * @param y
	 *            y coordinate of the upper-left corner
	 * @param dig
	 *            digit to draw in integer format
	 */
	private void drawDigit(Graphics g, int x, int y, int dig)
	{
		g.setClip(x, y, digitsWidth, digitsHeight);
		g.drawImage(iDigits, x, y- (dig * digitsHeight), Config.ANCHOR);
	}



	/**
	 * draws a number with preloaded font
	 * 
	 * @param g
	 *            Graphics object
	 * @param x
	 *            x coordinate of the upper-left corner
	 * @param y
	 *            y coordinate of the upper-left corner
	 * @param s
	 *            String of digits to draw a number
	 */
	private void drawNumber(Graphics g, int x, int y, String s)
	{
		for (int i = 0; i < s.length(); i++)
		{
			g.setClip(x + i + (i * digitsWidth), y, digitsWidth, digitsHeight);
			g.drawImage(iDigits, x + i +((i - (s.charAt(i) - '0')) * digitsWidth), y, Config.ANCHOR);
		}
	}



}

⌨️ 快捷键说明

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