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

📄 mysprite.java

📁 游戏超级玛丽的源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			
					debris_x=flashxfirst;//((x+1+6)/World.TILE_WIDTH)*13;
					debris_y=flashy;//((y-1)/World.TILE_HEIGHT)*13-gs.currentViewPosY+gs.getHeight()/2;
					debris_t=0;
			
					World.tileMap[(y-1)/World.TILE_HEIGHT][(x+1+6)/World.TILE_WIDTH]=32;
				
					if(this.up_tile==17)//如果是钱砖则添加到钱砖vector
					{
						has_coin_bricks=false;
						for(int i=0;i<coin_bricks.size();i++)
						{
							cb cbtmp=(cb)coin_bricks.elementAt(i);
							if(cbtmp.x==flashx0&&cbtmp.y==flashy0)
							{
								has_coin_bricks=true;
								break;
							}
						}
						if(has_coin_bricks==false)
						{		
							cb cb=new cb(flashx0,flashy0);
							coin_bricks.addElement(cb);
						}
					}
				
					ding=true;
					
					if(state==1||state==4||state==2)//如果是big mario则砖块效果为爆炸
					{
						is_debris=true;
						is_flash=false;
						if(whichflash==1)//顶到砖+50分
							GameScreen.score+=50;
					}
					else//如果是small mario则砖块效果为闪烁
					{
						is_debris=false;
						is_flash=true;
					}	
				
					if(this.up_tile==2||this.up_tile==17)
					{
						coin coin=new coin(Image_coin,Image_num,flashxfirst,flashy-10,gs);
						coins.addElement(coin);
						mario_coins++;
					}
				}
			}
		}
		
		if(life==false)//mario死亡时
		{
			up_canmove=true;
			down_canmove=true;
		}
	}
	
	public void setFrame(int num)
	{
		if(Frames!=0)
		{
			this.curFrame=num;
			cursprow=num/spscols;
			curspcol=num%spscols;
		}
		else
			this.curFrame=-1;
	}
	public int getFrame()
	{
		return this.curFrame;
	}
	
	public void setPosition(int x,int y)
	{
		this.curspX=x;
		this.curspY=y;
	}
	
	public void draw(Graphics g)
	{
		g.setClip(curspX,curspY,spwidth,spheight);
		g.drawImage(spsImage,curspX-curspcol*spwidth,curspY-cursprow*spheight,g.TOP|g.LEFT);
		
		if(ding==true)//如果顶到砖块或问号时
		{
			if(whichflash==2||whichflash==17||whichflash==28)//如果顶的是问号、钱砖或长大,则问号、钱砖或长大闪烁
				flash(g);
			else if(whichflash==1)//如果顶的是砖
			{
				if(is_debris==true)
					debris(g);
				if(is_flash==true)
					flash(g);
			}
		}
		
		for(int i=0;i<coins.size();i++)
		{
			coin cointmp=(coin)coins.elementAt(i);
			
			if(cointmp.jumptimes>=0)
			{
				cointmp.draw(g);
				
				if(cointmp.jumptimes>=30)
					cointmp.shangsheng=false;
				
				if(cointmp.shangsheng==true)
					cointmp.jumptimes+=3;
				else
					cointmp.jumptimes-=3;
			}
			else
			{
				cointmp.fentimes++;
				cointmp.draw(g);
			}
			if(cointmp.fentimes>20)
				coins.removeElementAt(i);
		}
	}

	//砖块和问号的闪烁效果
	public void flash(Graphics g)
	{
		int offset_x=whichflash%16-1;
		int offset_y=whichflash/16;
		
		flashx=flashxfirst-gs.currentViewPosX+gs.getWidth()/2;
		
		g.setClip(flashx,flashy,13,13);
		g.drawImage(World.Image_tile,flashx-offset_x*13,flashy-offset_y*13,Graphics.TOP|Graphics.LEFT);

		if(flashtime<=2)
			flashy--;
		else if(flashtime>=3&&ding==true)
			flashy++;
		flashtime++;
		if(flashtime==6)
		{
			is_flash=false;
			ding=false;
			flashtime=0;
			
			if(whichflash==1)//砖闪
				World.tileMap[flashy0][flashx0]=1;
			else if(whichflash==2)//问号或长大闪
				World.tileMap[flashy0][flashx0]=3;
			else if(whichflash==17)//钱砖
			{
					int i;
					cb cbtmp=null;
					
					for(i=0;i<coin_bricks.size();i++)
					{
						cbtmp=(cb)coin_bricks.elementAt(i);
						if(cbtmp.x==flashx0&&cbtmp.y==flashy0)
							break;
					}
					if(cbtmp.nums==0)
					{
						coin_bricks.removeElementAt(i);
						World.tileMap[flashy0][flashx0]=3;
					}
					else
					{
						cbtmp.nums--;
						World.tileMap[flashy0][flashx0]=17;
					}
			}
			else if(whichflash==28)//顶到长大蘑菇
			{
				World.tileMap[flashy0][flashx0]=3;
				mushroom_show=true;
				mushroom_x=flashx0;
				mushroom_y=flashy0;
			}
		}
	}
	
	//砖块的粉碎效果
	public void debris(Graphics g)
	{
		debris_x=flashxfirst-gs.currentViewPosX+gs.getWidth()/2;
		if((debris_y-(debris_vy*debris_t-debris0_g*debris_t*debris_t*4000)/100000)<140)
		{
			debris0_x=debris_x-debris_vx*debris_t/100000;
			debris0_y=debris_y-(debris_vy*debris_t-debris0_g*debris_t*debris_t*4000)/100000;		
			g.setClip(debris0_x,debris0_y,6,6);
			g.drawImage(Image_debris,debris0_x,debris0_y,Graphics.TOP|Graphics.LEFT);
			
			debris1_x=debris_x+6+debris_vx*debris_t/100000;
			debris1_y=debris_y-(debris_vy*debris_t-debris0_g*debris_t*debris_t*4000)/100000;		
			g.setClip(debris1_x,debris1_y,6,6);
			g.drawImage(Image_debris,debris1_x-6,debris1_y,Graphics.TOP|Graphics.LEFT);
			
			debris2_x=debris_x-debris_vx*debris_t/100000;
			debris2_y=debris_y+6-(debris_vy*debris_t-debris1_g*debris_t*debris_t*4000)/100000;		
			g.setClip(debris2_x,debris2_y,6,6);
			g.drawImage(Image_debris,debris2_x,debris2_y,Graphics.TOP|Graphics.LEFT);
			
			debris3_x=debris_x+6+debris_vx*debris_t/100000;
			debris3_y=debris_y+6-(debris_vy*debris_t-debris1_g*debris_t*debris_t*4000)/100000;		
			g.setClip(debris3_x,debris3_y,6,6);
			g.drawImage(Image_debris,debris3_x-6,debris3_y,Graphics.TOP|Graphics.LEFT);

			debris_t++;
		}
		else
		{
			is_debris=false;
			ding=false;
		}
	}
	
	public void draw(Graphics g,int x,int y)
	{
		setPosition(x,y);
		draw(g);
	}
	
	public int getX()
	{
		return this.curspX;
	}
	public int getY()
	{
		return this.curspY;
	}
	public void setVisible(boolean visible)
	{
		this.visible=visible;
	}
	public boolean isVisible()
	{
		return this.visible;
	}
	
	public void walk(int way,int startframe,int endframe,int x,int y)
	{
		switch(way)
		{
			case(0)://向左走
				for(int i=0;i<spspeed;i++)
				{
					curspX--;
					CanMove(x+curspX,y+curspY);
					if(left_canmove==false)
						break;
				}
			break;
			
			case(1)://向右走
				for(int i=0;i<spspeed;i++)
				{
					curspX++;
					CanMove(x+curspX,y+curspY);
					if(right_canmove==false)
						break;
				}
			break;
		}
		if(curFrame<startframe||curFrame>endframe)
			curFrame=startframe;
		curFrame++;
		if(curFrame==endframe)
			curFrame=startframe;
	}

}

class coin
{
	public int curx0,cury,curx;
	public int jumptimes=0,fentimes=5;
	public int curFrame=0;
	public int width=6,height=10;
	public Image Image_coin,Image_fen;
	private GameScreen gs;
	public boolean shangsheng=true;
	
	public coin(Image img,Image img2,int x,int y,GameScreen gsArg)
	{
		this.Image_coin=img;
		this.Image_fen=img2;
		this.curx0=x;
		this.cury=y;
		this.gs=gsArg;
		GameScreen.score+=200;
		GameScreen.coinnum++;
	}
	public void draw(Graphics g)
	{
		if((jumptimes>=5)||(shangsheng==true))
		{
			switch(jumptimes%27)
			{
				case(0):
					curFrame=2;
				break;
				case(9):
					curFrame=1;
				break;
				case(18):
					curFrame=0;
				break;
			}
			
			curx=curx0-gs.currentViewPosX+gs.getHeight()/2+6;
			g.setClip(curx,cury-jumptimes,width,height);
			g.drawImage(Image_coin,curx,cury-jumptimes-curFrame*height,g.TOP|g.LEFT);
		}
		else//显示"200"
		{
			curx=curx0-gs.currentViewPosX+gs.getHeight()/2;
			
			g.setClip(curx,cury-fentimes,4,7);
			g.drawImage(Image_fen,curx-1*4,cury-fentimes,g.TOP|g.LEFT);
			
			g.setClip(curx+5,cury-fentimes,4,7);
			g.drawImage(Image_fen,curx+5-9*4,cury-fentimes,g.TOP|g.LEFT);
			
			g.setClip(curx+10,cury-fentimes,4,7);
			g.drawImage(Image_fen,curx+10-9*4,cury-fentimes,g.TOP|g.LEFT);
		}
	}
	
}


class cb
{
	public int x,y,nums=2;
	public cb(int x,int y)
	{
		this.x=x;
		this.y=y;
	}
}

⌨️ 快捷键说明

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