`
jdonlkm
  • 浏览: 2761 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
文章分类
社区版块
存档分类
最新评论

超级玛丽+源码

阅读更多
此程序是学习视频设计出来的,完成的大概的雏形,还是有少许bug,正在努力完善
各位有什么意见可以交流下
附部分代码,图片,程序打包如下:

Mario类代码:
package org.liky.mario;
import java.awt.image.BufferedImage;
import javax.swing.JOptionPane;
public class Mario implements Runnable {
	private int x;
	private int y;	
	private BackGround bg;	
	public void setBg(BackGround bg) {
		this.bg = bg;
	}
	private Thread t=null;	
	private int xmove=0;
	private int ymove=0;
	private String status;	
	public int getX() {
		return x;
	}
	public int getY() {
		return y;
	}
	public BufferedImage getShowImage() {
		return showImage;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	public int getLife() {
		return life;
	}
	public void setLife(int life) {
		this.life = life;
	}
	private BufferedImage showImage;
	private int score;
	private int life;
	private int moving=0;	
	public boolean isClear() {
		return isClear;
	}
	private int upTime=0;
	private boolean isDead=false;
	private boolean isClear=false;	
	public Mario(int x,int y){
		this.x=x;
		this.y=y;
		this.showImage=StaticValue.allMarioImage.get(0);
		this.score=0;
		this.life=3;		
		t=new Thread(this);
		t.start();		
		this.status="right--standing";	
	}
	public void leftMove(){
		xmove=-5;
		if(this.status.indexOf("jumping")!=-1){
			this.status="left--jumping";
		}else{
			this.status="left--moving";
		}
	}	
	public void rightMove(){
		xmove=5;
		if(this.status.indexOf("jumping")!=-1){
			this.status="right--jumping";
		}else{
			this.status="right--moving";
		}
	}	
	public void leftStop(){
		xmove=0;
		if(this.status.indexOf("jumping")!=-1){
			this.status="left--jumping";
		}else{
			this.status="left--standing";
		}
	}	
	public void rightStop(){
		xmove=0;
		if(this.status.indexOf("jumping")!=-1){
			this.status="right--jumping";
		}else{
			this.status="right--standing";
		}
	}	
	public void jump(){
		if(this.status.indexOf("jumping")==-1){
			if(this.status.indexOf("left")!=-1){
				this.status="left--jumping";
			}else{
				this.status="right--jumping";
			}
			ymove=-5;
			upTime=38;
		}
		
	}	
	public boolean isDead() {
		return isDead;
	}
	public void dead(){
		this.life--;
		if(this.life==0){
			this.isDead=true;
		}else{
			this.bg.reset();
			this.x=0;
			this.y=480;
		}
	}
	
	public void down(){
			if(this.status.indexOf("left")!=-1){
				this.status="left--jumping";
			}else{
				this.status="right--jumping";
			}
			ymove=5;
		}	

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true){
			if(this.bg.isFlag() && this.x>=500){
				this.bg.setOver(true);
				if(this.bg.isDown()){
					if(this.x<580){
						x+=5;
					}else {
						if(y<480){
							y+=5;
						}
						x+=5;
						if(x>=780){
							this.isClear=true;
						}
					}
				}else{
				if(this.y<420){
					this.y+=5;
				}
				if(this.y>=420){
					this.y=420;
					this.status="right--standing";
				}
				}
			}else{
			boolean canLeft=true;
			boolean canRight=true;
			boolean onLand=false;
			for(int i=0;i<this.bg.getAllObstruction().size();i++){
				Obstruction ob =this.bg.getAllObstruction().get(i);
				if(ob.getX()==this.x+60 && (ob.getY()+50>this.y && ob.getY()-50<this.y)){
					if(ob.getType()!=3){
						canRight=false;						
					}
				}
				if(ob.getX()==this.x-60 && (ob.getY()+50>this.y && ob.getY()-50<this.y)){
					if(ob.getType()!=3){
					canLeft=false;
					}
				}
				
				if(ob.getY()==this.y+60 && (ob.getX()+60>this.x && ob.getX()-60<this.x)){
					if(ob.getType()!=3){
					onLand=true;	
					}
				}	
				if(ob.getY()==this.y-60 && (ob.getX()+50>this.x && ob.getX()-50<this.x)){
					if(ob.getType()==0){
						this.bg.getAllObstruction().remove(ob);
						this.bg.getRemovedObstruction().add(ob);
					}	
					if((ob.getType()==4 || ob.getType()==3) && upTime>0){
						ob.setType(2);
						ob.setImage();
					}
					
					upTime=0;
				}
			}
			
			for (int i=0;i<this.bg.getAllEnemy().size();i++){
				Enemy e=this.bg.getAllEnemy().get(i);
				if(e.getX()+50>this.x && e.getX()-50<this.x && (e.getY()+60>this.y && e.getY()-60<this.y)){
					this.dead();
				}
				if(e.getY()==this.y+60 && (e.getX()+60>this.x && e.getX()-60<this.x)){
					if(e.getType()==1){
						e.dead();
						this.upTime=10;
						this.ymove=-5;
					}else if (e.getType()==2){
						this.dead();
						
					}
					
				}	
				
			}
			if(onLand && upTime==0){
				if(this.status.indexOf("left")!=-1){
						if(xmove!=0){
							this.status="left--moving";
						}else{
							this.status="left--standing";
						}
				}else{
					if(xmove!=0){
						this.status="right--moving";
					}else{
						this.status="right--standing";
					}
				}
			}else{
				if(upTime!=0){
					upTime--;
				}else{
					this.down();
				}
				y +=ymove;
			}
			if(this.y>600){
				this.dead();
			}
			if (canLeft && xmove<0 || (canRight && xmove>0)){
			x+=xmove;
			if(x<0){
				x=0;
				}
			}	
			}
			int temp=0;
			if(this.status.indexOf("left")!=-1){
				temp+=5;
			}

			if(this.status.indexOf("moving")!=-1){
				temp+=this.moving;
				moving++;
				if(moving==4){
					moving=0;
				}
			}
			
			if(this.status.indexOf("jumping")!=-1){
				temp +=4;
			}
			
			
			this.showImage=StaticValue.allMarioImage.get(temp);		
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	public void setX(int x) {
		this.x = x;
	}
	public void setY(int y) {
		this.y = y;
	}
	
}
  • 大小: 63.5 KB
分享到:
评论
13 楼 com0606 2011-05-20  
start方法调用的位置错了,玛丽对象还没初始化呢,会出现空指针异常
12 楼 windFeng 2011-05-18  
第一次运行会报错,第二次可以正常运行
11 楼 sebatinsky 2011-05-17  
呵呵,几乎没有写过应用。。
10 楼 彩蝶飞 2011-05-17  
下载下来体验下
9 楼 carlzhao531 2011-05-17  
Exception in thread "Thread-2" java.lang.NullPointerException
at org.liky.mario.MyFrame.run(MyFrame.java:126)
at java.lang.Thread.run(Unknown Source)

同楼上~
8 楼 lansuiyun 2011-05-17  
Exception in thread "Thread-2" java.lang.NullPointerException
at org.liky.mario.MyFrame.run(MyFrame.java:126)
at java.lang.Thread.run(Unknown Source)


有报错
7 楼 jdonlkm 2011-05-16  
llfzy 写道
代码打下包撒、、、、

已经打包传了
6 楼 jdonlkm 2011-05-16  
zhangxuewen1234 写道
我发现了一个小BUG,你的t.start()放错了位置,应该放在this.addKeyListener(this);   之后,就可以了,
总体还不错,就是玩起来不是太流畅,这可能就是为什么很少有人用JASE编客户端的原因吧,

谢谢啊,已经修正了,难怪有时启动会抛异常
5 楼 llfzy 2011-05-16  
代码打下包撒、、、、
4 楼 181054867 2011-05-16  
没图没真相,发文章不配图认人怎么看啊,晕死
3 楼 zhangxuewen1234 2011-05-16  
我发现了一个小BUG,你的t.start()放错了位置,应该放在this.addKeyListener(this);   之后,就可以了,
总体还不错,就是玩起来不是太流畅,这可能就是为什么很少有人用JASE编客户端的原因吧,
2 楼 iehyou 2011-05-16  
没图 没真相.
1 楼 Technoboy 2011-05-16  

相关推荐

    C语言游戏源码 超级玛丽游戏源码

    C语言游戏源码 超级玛丽游戏源码C语言游戏源码 超级玛丽游戏源码C语言游戏源码 超级玛丽游戏源码C语言游戏源码 超级玛丽游戏源码C语言游戏源码 超级玛丽游戏源码C语言游戏源码 超级玛丽游戏源码C语言游戏源码 超级...

    使用C++编写的超级玛丽小游戏源码.zip

    使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏...

    超级玛丽教程+源码分享

    超级玛丽游戏教程+源码 创建游戏主窗口 pygame 专门提供了一个 模块 pygame.display 用于创建、管理游戏窗口 方法 说明 pygame.display.set_mode() 初始化游戏显示窗口 pygame.display.update() 刷新屏幕内容显示 ...

    python超级玛丽小游戏+可执行程序+源码+程序配置说明.zip

    python超级玛丽小游戏+可执行程序+源码+程序配置说明 在PyCharm中运行《玛丽冒险》即可进入如图1所示的游戏主界面。 具体的操作步骤如下: (1)游戏主窗体界面显示后,游戏的背景地图将自动加载与移动,此时会随机...

    基于C++语言实现的超级玛丽游戏源码(含图片和背景音乐)

    基于C++语言实现的超级玛丽游戏源码(含图片和背景音乐) 基于C++语言实现的超级玛丽游戏源码(含图片和背景音乐) 基于C++语言实现的超级玛丽游戏源码(含图片和背景音乐) 基于C++语言实现的超级玛丽游戏源码(含图片和...

    经典超级玛丽源码

    《经典超级玛丽源码解析与学习指南》 超级玛丽,这款经典的8位游戏,承载了无数人的童年记忆。本文将围绕“经典超级玛丽源码”这一主题,详细讲解C# Unity2D环境下如何实现这款游戏,并深入探讨其背后的编程原理和...

    超级玛丽H5源码,超级玛丽H5源码

    【超级玛丽H5源码详解】 在当前的互联网环境中,HTML5技术已经成为了构建网页游戏和互动应用的重要工具。本篇文章将详细探讨基于HTML5的"超级玛丽H5源码",帮助读者理解如何利用这项技术重制经典游戏。 一、HTML5...

    Unity 3D超级玛丽游戏源码

    在这个“Unity 3D超级玛丽游戏源码”项目中,我们可以深入学习Unity引擎在构建经典平台跳跃游戏时所涉及的关键技术和概念。 首先,源码结构可能包括多个场景(Scenes)文件,每个场景代表游戏的一个关卡。在Unity中...

    HTML5实现的超级玛丽游戏源码

    "HTML5实现的超级玛丽游戏源码"是一个基于HTML5、CSS3和JavaScript构建的致敬经典游戏《超级玛丽》的项目。这个项目展示了HTML5在游戏开发领域的应用,以及如何通过WebGL或Canvas元素来实现2D渲染。 首先,我们要...

    超级玛丽_超级玛丽游戏源码_超级玛丽_

    经典的超级玛丽游戏源码,完美实现了原游戏的所有细节,文件里有说明文档,可以自己编译后续关卡,需要的图片的资源都在文件里面

    android超级玛丽源码

    【Android超级玛丽源码解析】 在移动开发领域,Android是一个非常流行的操作系统,它为开发者提供了丰富的工具和框架来创建各种应用程序,包括游戏。"Android超级玛丽源码"是一个典型的移动游戏开发示例,它基于...

    python超级玛丽项目源码.rar

    在"python超级玛丽项目源码"中,pygame 1.9.2版本被使用,它为游戏的图形界面、音乐播放、碰撞检测等关键部分提供了支持。例如,pygame.display模块用于创建和管理游戏窗口,pygame.image模块用于加载和显示图片,...

    超级玛丽Android源码_android_超级玛丽_

    【超级玛丽Android源码】项目是一个将经典游戏“超级玛丽”移植到Android平台的实例,旨在帮助开发者了解如何在移动设备上构建2D游戏。这个项目涵盖了Android游戏开发中的多个重要知识点,包括游戏循环、碰撞检测、...

    c语言实现的超级玛丽游戏源码完整版.zip

    "C语言实现的超级玛丽游戏源码完整版"是一个学习C语言编程和游戏开发的绝佳实例。下面将详细探讨这个项目中涉及的相关知识点。 1. **C语言基础**: - 变量与数据类型:C语言中的基本数据类型如int、char、float等...

    超级玛丽游戏源码

    超级玛丽源码中的碰撞检测代码可能包含复杂的几何判断和坐标系统,这对于游戏中的物理模拟和交互性至关重要。 关卡设计是游戏体验的关键组成部分。源码中可能包含关卡数据的结构,以及加载和解析这些数据的算法。这...

    超级玛丽游戏GUI(源码+lun文+视频齐全).zip

    超级玛丽游戏GUI(源码+lun文+视频齐全)超级玛丽游戏GUI(源码+lun文+视频齐全)超级玛丽游戏GUI(源码+lun文+视频齐全)超级玛丽游戏GUI(源码+lun文+视频齐全)超级玛丽游戏GUI(源码+lun文+视频齐全)超级玛丽游戏GUI(源码...

    超级玛丽游戏源码.zip

    《超级玛丽游戏源码》是一款基于经典游戏"超级玛丽"的源代码集合,它包含了游戏的前四个关卡。这个游戏自上世纪80年代问世以来,以其独特的玩法、丰富的关卡设计和可爱的角色形象赢得了全球玩家的喜爱。源码的开放为...

    Android童年小游戏超级玛丽源码_android游戏_android_

    《Android童年小游戏超级玛丽源码解析与学习指南》 在Android平台上开发游戏,不仅可以满足开发者的技术探索欲望,也能为玩家带来独特的娱乐体验。本篇文章将深入探讨一款基于Android平台的童年经典游戏——超级...

    超级玛丽python源码

    《超级玛丽Python源码解析与游戏开发初探》 在编程世界中,经典游戏的重制或复刻经常被用来作为学习新语言或框架的实践项目。本文将深入探讨一个基于Python的“超级玛丽”游戏源码,通过分析源码,我们可以了解...

    Python小游戏源码-超级玛丽项目源码

    【Python小游戏源码-超级玛丽项目源码】 Python作为一种易学且功能强大的编程语言,不仅在数据处理、科学计算等领域广泛应用,还非常适合开发各种类型的游戏,包括经典的2D平台游戏,如“超级玛丽”。这个项目源码...

Global site tag (gtag.js) - Google Analytics