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

📄 gamescreen.java

📁 游戏超级玛丽的源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	 				upduration=upendtime-upstarttime;
	 			else
	 				upduration=-1;
	 		}
	 		//mario的停止帧
	 		if(releasedkeycode==Canvas.LEFT)
	 		{
		 		mariosprite.setFrame(6);
		 		leftpress=false;
	 		}
	 		if(releasedkeycode==Canvas.RIGHT)
	 		{	
	 			mariosprite.setFrame(0);
		 		rightpress=false;
		 	}
	 		
	 		if(releasedkeycode==Canvas.FIRE)
	 			firepress=false;
		 	if(releasedkeycode==Canvas.DOWN)
		 		downpress=false;
		}
	
	}
	public void action()//mario的运动(向下掉、左右移动、跳跃)
	{
		//如果什么都没操作则不做任何活动
		if(uppress==false&&downpress==false&&leftpress==false&&rightpress==false&&mariosprite.bjump==false&&walkdown==false)
		{
			;
		}
		else
		{
			if(firepress==true)
				movespeed=3;
			else
				movespeed=2;
			
			mariosprite.CanMove(currentViewPosX-getWidth()/2+mariosprite.curspX,currentViewPosY-getHeight()/2+mariosprite.curspY);//判断可以向哪些方向移动
			
			//mario向下掉
			if(mariosprite.down_canmove==true&&mariosprite.bjump==false)
			{
				walkdown=true;
				mariosprite.xiajiang=true;
				for(int i=0;i<8;i++)
				{
					mariosprite.curspY++;
					mariosprite.CanMove(currentViewPosX-getWidth()/2+mariosprite.curspX,currentViewPosY-getHeight()/2+mariosprite.curspY);
					if(mariosprite.down_canmove==false||mariosprite.curspY>getHeight())
					{
						walkdown=false;
						mariosprite.xiajiang=false;
						break;
					}
				}
			}	
	
			switch(keycode)
			{
				case(Canvas.UP):
					if(last_UP)
						last_uptime+=System.currentTimeMillis()-upstarttime;
				break;
				case(Canvas.DOWN):
					mariosprite.curspY--;
				break;
			}
			if(rightpress==true)//右键头
			{
				if(mariosprite.right_canmove==true)
				{
					if(mariosprite.curspX>65)//背景移动
					{
						for(int i=0;i<movespeed;i++)
						{
							currentViewPosX++;
							mariosprite.CanMove(currentViewPosX-getWidth()/2+mariosprite.curspX,currentViewPosY-getHeight()/2+mariosprite.curspY);
							if(mariosprite.right_canmove==false)
								break;
						}
						mariosprite.spspeed=0;
					}
					else//mario移动
						mariosprite.spspeed=movespeed;
					mariosprite.walk(1,0,4,currentViewPosX-getWidth()/2,currentViewPosY-getHeight()/2);
				}
			}
			if(leftpress==true)//左键头
			{
				if(mariosprite.left_canmove==true)
				{
					if(mariosprite.curspX>0)
						mariosprite.spspeed=movespeed;
					else
						mariosprite.spspeed=0;
					mariosprite.walk(0,6,10,currentViewPosX-getWidth()/2,currentViewPosY-getHeight()/2);
				}
			}
			if(mariosprite.bjump==false&&walkdown==false)//mario 的跳跃方式
			{
				if(last_uptime>=TIME_JUMP)//如果按住向上键的持续时间大于最大时间则大跳
				{
					mariosprite.whichjump(BIG_JUMP);
					mariosprite.bjump=true;
					mariosprite.t=0;
					last_uptime=0;
					upduration=-1;
					last_UP=false;
					upreleased=true;
				}
				else
				{
					if(upduration!=-1)//根据跳单击跃键和松开跳跃的时间决定mario是小跳
					{
						mariosprite.whichjump(SMALL_JUMP);
						mariosprite.bjump=true;
						mariosprite.t=0;
						upduration=-1;
					}
				}
			}
			if(mariosprite.t<0&&mariosprite.bjump==true)//结束跳跃
			{
				if(upreleased)
				{
					mariosprite.bjump=false;
					mariosprite.y1=0;
					mariosprite.y2=0;
					mariosprite.y0=-1;
					mariosprite.stopcurspY=-1;
					last_uptime=0;
					uppress=false;
					
					if(mariosprite.way==1)
						mariosprite.curFrame=0;
					else if(mariosprite.way==0)
						mariosprite.curFrame=6;
				}
			}
			if(mariosprite.bjump)
			{
				mariosprite.t+=2;
				mariosprite.jump();
			}
			if(mariosprite.curspX<0)
				mariosprite.curspX=0;
					
		}
		if(mariosprite.state==6)//mario由大变小时,一段时间内无敌
		{
			
			if(mariosprite.statetimes%5==0)
			{
				if(mariosprite.curFrame==0)
					mariosprite.curFrame=13;
				else if(mariosprite.curFrame==13)
					mariosprite.curFrame=0;
				else if(mariosprite.curFrame==6)
					mariosprite.curFrame=14;
				else if(mariosprite.curFrame==14)
					mariosprite.curFrame=6;
					
			}
			mariosprite.statetimes--;
			if(mariosprite.statetimes==0)
			{
				mariosprite.state=0;
				if(mariosprite.curFrame==13)
					mariosprite.curFrame=0;
				else if(mariosprite.curFrame==14)
					mariosprite.curFrame=6;
			}
		}
		
		if(mariosprite.curspY>getHeight())//mario掉到地面以下死亡
		{
			mariosprite.t=-3;
			mariosprite.curFrame=12;
			mariosprite.deadtime=20;//没有死亡效果
			mariosprite.bjump=false;
			mariosprite.life=false;
		}
	}
	public void npcaction()//每个npc的运动(向下掉、左右移动)
	{
		if(npc_curnum<Npc.npc_xy.length)//当前的npc号码小于一共的npc数量
		{
			//如果第npc_curnum个Npc的坐标在范围内则初始化一个Npc
			if((Npc.npc_xy[npc_curnum][0]*13-currentViewPosX)<(getWidth()/2+10))
			{
				NpcSprite npc=null;
				int x=Npc.npc_xy[npc_curnum][0]*13-currentViewPosX+getWidth()/2;
				int y=Npc.npc_xy[npc_curnum][1]*13;
			
				switch(Npc.npc_xy[npc_curnum][2])
				{
					case(0):
						npc=new NpcSprite(Image_ghost,x,y,13,13,0,currentViewPosX,this);
					break;
					case(1):
						npc=new NpcSprite(Image_duck,x,y-7,13,20,1,currentViewPosX,this);
						npc.setFrame(2);
					break;
				}
				npcs.addElement(npc);
				
				npc_curnum++;
			}	
		}
		for(int i=0;i<npcs.size();i++)//每个npc的运动(向下掉、左右移动)
		{
			NpcSprite npc=(NpcSprite)npcs.elementAt(i);
			
			if(npc.npc_life==true)//npc是活的
			{
				if(mariosprite.ding==true)//如果mario顶到npc下面的砖块
				{
					int x,y;
					x=mariosprite.flashxfirst-currentViewPosX+getWidth()/2;
					y=mariosprite.flashy0*13-currentViewPosY+getHeight()/2;
					
					if((npc.npc_curspY+npc.npc_height)==y)
					{
						if(npc.npc_curspX>(x-10)&&npc.npc_curspX<(x+10))
						{
							npc.npc_bjump=true;
							npc.t=0;
							if((npc.npc_curspX+npc.npc_width/2)<=(x+6))
								npc.npc_way=0;
							else
									npc.npc_way=1;
							
							if(npc.npc_kind==0||npc.npc_kind==1)//如果被顶到的是毒蘑菇或鸭子,则毒蘑菇或鸭子死亡
							{
								num num=new num(Image_num,npc.npc_curspX,npc.npc_curspY-10,npc.npc_kind);
								nums.addElement(num);
								npc.npc_life=false;
								if(npc.npc_kind==0)//毒蘑菇
									npc.setFrame(3);
								else if(npc.npc_kind==1)//鸭子
									npc.setFrame(9);
								npc.npc_kind=4;
							}
							else if(npc.npc_kind==10)//如果被顶到的是长大蘑菇
							{
								;
							}
						}
					}
				}
				
				if(npc.npc_kind<=2)//当npc是毒蘑菇、鸭子、鸭子壳
				{
					for(int j=0;j<bullets.size();j++)//npc被子弹击中
					{
						bullet bul=(bullet)bullets.elementAt(j);
						
						if((bul.curspX+6)>npc.npc_curspX&&bul.curspX<(npc.npc_curspX+npc.npc_width))//击中npc
						{
							if((bul.curspY+6)>npc.npc_curspY&&bul.curspY<(npc.npc_curspY+npc.npc_height))
							{
								npc.npc_bjump=true;
								npc.t=0;
								npc.npc_way=bul.way;
								
								bul.bul_life=false;
								num num=new num(Image_num,npc.npc_curspX,npc.npc_curspY-10,npc.npc_kind);
								nums.addElement(num);
								npc.npc_life=false;
								if(npc.npc_kind==0)//毒蘑菇
									npc.setFrame(3);
								else if(npc.npc_kind==1||npc.npc_kind==2)//鸭子,鸭子壳
									npc.setFrame(9);
								npc.npc_kind=4;
									
							}
						}
					}
					if(npc.npc_kind==2)//运动着的鸭子壳杀死和它发生碰撞的npc
					{
						for(int m=0;m<npcs.size();m++)
						{
							if(i!=m)//不是本身这个鸭子壳
							{
								NpcSprite npc1=(NpcSprite)npcs.elementAt(m);
								if(npc1.npc_life==true)
								{
									if((npc.npc_curspX+npc.npc_width)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_width))//击中npc
									{
										if((npc.npc_curspX+npc.npc_height)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_height))
										{
											npc1.npc_bjump=true;
											npc1.t=0;
											npc1.npc_way=npc.npc_way;
											
											num num=new num(Image_num,npc.npc_curspX,npc.npc_curspY-10,npc1.npc_kind);
											nums.addElement(num);
											npc1.npc_life=false;
											npc1.npc_kind=4;
											npc1.setFrame(3);
											npcs.setElementAt(npc1,m);
										}
									}
								}
							}
						}
					}
				}
				
				npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
				if(npc.down_canmove==true&&npc.npc_bjump==false)//Npc向下掉
				{
					for(int j=0;j<6;j++)
					{
						npc.npc_curspY++;
						npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
						if(npc.down_canmove==false)
							break;
					}
				}
				if(npc.npc_way==0)//npc向左运动时
				{
					if(npc.left_canmove==false)//前方的tile不能通过
					{
						npc.npc_way=1;
						if(npc.npc_kind==1)//duck
							npc.setFrame(0);
						else if(npc.npc_kind==0)//ghost
							npc.setFrame(0);
					}
					else//前方能通过
					{
						if(npc.npc_kind==2)//duck壳
						{
							for(int j=0;j<6;j++)
							{
								npc.npc_curspX--;
								npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
								if(npc.left_canmove==false)
								{
									npc.npc_way=1;
									break;
								}
							}
						}
						else if(npc.npc_kind==10)//长大蘑菇
							npc.npc_curspX-=2;
						else
							npc.npc_curspX--;
						
						if(npc.npc_kind==1)//duck
						{
							if(npc.npc_curframe==2)
								npc.setFrame(3);
							else
								npc.setFrame(2);
						}
						else if(npc.npc_kind==0)//ghost
						{
							if(npc.npc_curframe==0)
								npc.setFrame(1);
							else
								npc.setFrame(0);
						}
						npc.npc_curspX-=(currentViewPosX-npc.npc_curViewPosX);
						npc.npc_curViewPosX=currentViewPosX;
					}
				}
				else if(npc.npc_way==1)//npc向右运动时
				{
					if(npc.right_canmove==false)//前方的tile不能通过
					{
						npc.npc_way=0;
						if(npc.npc_kind==1)//duck
							npc.setFrame(2);
						else if(npc.npc_kind==0)//ghost
							npc.setFrame(0);
					}	
					else//前方能通过
					{
						if(npc.npc_kind==2)//duck壳
						{
							for(int j=0;j<8;j++)
							{
								npc.npc_curspX++;
								npc.CanMove((currentViewPosX-getWidth()/2+npc.npc_curspX),(currentViewPosY-getHeight()/2+npc.npc_curspY));
								if(npc.right_canmove==false)
								{
									npc.npc_way=0;
									break;
								}
							}
						}
						else if(npc.npc_kind==10)
							npc.npc_curspX+=2;
						else
							npc.npc_curspX++;
							
						if(npc.npc_kind==1)//duck
						{
							if(npc.npc_curframe==0)
								npc.setFrame(1);
							else
								npc.setFrame(0);
						}
						else if(npc.npc_kind==0)
						{
							if(npc.npc_curframe==0)
								npc.setFrame(1);
							else
								npc.setFrame(0);
						}
						npc.npc_curspX-=(currentViewPosX-npc.npc_curViewPosX);
						npc.npc_curViewPosX=currentViewPosX;
					}
				}
			}
			else//npc是死的
			{
				if(npc.npc_kind==2)//静止着的鸭子壳
				{
					for(int m=0;m<npcs.size();m++)//改变与他发生碰撞的npc的运动方向
					{
						if(i!=m)//不是本身这个鸭子壳
						{
							NpcSprite npc1=(NpcSprite)npcs.elementAt(m);
							if((npc.npc_curspX+npc.npc_width)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_width))//击中npc
							{
								if((npc.npc_curspX+npc.npc_height)>npc1.npc_curspX&&npc.npc_curspX<(npc1.npc_curspX+npc1.npc_height))
								{
									npc1.npc_way=1-npc1.npc_way%2;
									npcs.setElementAt(npc1,m);
								}
							}
						}
					}
					
					for(int j=0;j<bullets.size();j++)//静止的鸭子壳被子弹击中
					{
						bullet bul=(bullet)bullets.elementAt(j);
						
						if((bul.curspX+6)>npc.npc_curspX&&bul.curspX<(npc.npc_curspX+npc.npc_width))//击中npc
						{
							if((bul.curspY+6)>npc.npc_curspY&&bul.curspY<(npc.npc_curspY+npc.npc_height))
							{
								npc.npc_bjump=true;
								npc.t=0;
								npc.npc_way=bul.way;
								

⌨️ 快捷键说明

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