`
GLC
  • 浏览: 112699 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

水果忍者游戏

阅读更多

水果忍者游戏
  此篇文章是在时间较为紧的情况之下写;不足之处、日后定当丰富之。。。。望见谅。
    做软件开发的同学应该知道:水果忍者游戏本身其实是个大随机:随机产生抛出水果、每个水果随机运动、、、而这一切使用最重要的就是线程的运用了。

    按照自己小组做出的水果忍者游戏的步骤:大至分为游戏选择界面--游戏界面--结束游戏的选择框界面。


   1、游戏选择界面:主要添加按钮及其动作命令;背景音乐,以及添加背景图片。
例如:

// 主界面的方法
	public void init() {
		this.setTitle("切水果");
		this.setSize(300, 250);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setResizable(false);

		// 增加一个容器,添加选择按钮
		JPanel jp = new JPanel();
		// 添加按钮
		JButton jb_start = new JButton("计时模式");
		jp.add(jb_start);
		
		// 设置一个间隔
		JLabel jl = new JLabel("   ");
		JButton jb1_close = new JButton();
		
		// 添加经典模式按钮
		JButton jb1_start = new JButton("经典模式");
		jp.add(jb1_start);
		
		// 设置动作命令
		jb1_close.setActionCommand("退出游戏");
		//设置开始按钮图片
		ImageIcon icon1=new ImageIcon("src/image/start.png");
		//获取图片大小
		int height1 = icon1.getIconHeight();
		int weight1 = icon1.getIconHeight();
		// 将按钮的大小设置成图片的大小
		jb_start.setPreferredSize(new Dimension(height1, weight1));
		
		// 设置退出游戏界面的图片
		ImageIcon icon = new ImageIcon("src/image/back.png");
		// 获取图片大小
		int height = icon.getIconHeight();
		int weight = icon.getIconHeight();
		// 将关闭按钮的大小设置成图片的大小
		jb1_close.setPreferredSize(new Dimension(height, weight));
		// 添加图片
		jb1_close.setIcon(icon);
		
		// 将开始按钮的大小设置成图片的大小
		jb_start.setPreferredSize(new Dimension(height1, weight1));
		// 添加图片
		jb_start.setIcon(icon1);
		// 将按钮添加到画板上
		jp.add(jb_start);
		jp.add(jb1_start);
		jp.add(jl);
		jp.add(jb1_close);

		// 添加容器到界面上
		this.add(jp, BorderLayout.SOUTH);
		this.setVisible(true);

		//实例化第一界面音乐对象
		MusicPlay2 mp=new MusicPlay2();
		//启动音乐线程
		mp.start();
		// 实例化监听器对象
        GoActionListener gal=new GoActionListener(this,mp);
	    //添加监听器
        jb_start.addActionListener(gal);
        jb1_close.addActionListener(gal);



接着是实现按钮的动作命令:如果命令是游戏模式时、其相应的执行命令中就会将第一界面关闭、调用游戏界面的方法
其代码如下:
 
/**
	 * 构造方法
	 * 
	 * @param m
	 *            游戏主界面
	 * @param ef
	 *            游戏结束界面
	 */
	public GoActionLis(MainLogin m, EndingFrame ef, String gameModel) {
		this.m = m;
		this.ef = ef;
		this.gameModel = gameModel;
	}

	public void actionPerformed(ActionEvent e) {
		// 如果点击的是开始游戏
		if (e.getActionCommand().equals("计时模式")) {
			// 实例化一个游戏主界面的对象
			MainLogin ml = new MainLogin(lo, count, ef, "计时模式");
			ml.LoginSh();
			// 关闭登陆界面的音乐
			lm.CloseMusic();
			// 播放背景音乐
			Music_Thread mt = new Music_Thread();
			mt.start();
		} else if (e.getActionCommand().equals("退出游戏")) {// 退出游戏判断
			System.exit(0);
		} else if (e.getActionCommand().equals("经典模式")) {// 判断是否进入经典模式
			// 实例化一个游戏主界面的对象
			MainLogin ml = new MainLogin(lo, count, ef, "经典模式");
			ml.LoginSh();
			// 关闭登陆界面的音乐
			lm.CloseMusic();
			// 播放背景音乐
			Music_Thread mt = new Music_Thread();
			mt.start();

		} else if (e.getActionCommand().equals("重新开始")) {
			// 关掉上一次游戏的界面
			m.dispose();
			// 表示进行过一次游戏
			count = 1;
			// 实例化一个游戏主界面的对象
			MainLogin ml = new MainLogin(lo, count, ef, gameModel);
			ml.LoginSh();
			// 播放背景音乐
			Music_Thread mt = new Music_Thread();
			mt.start();
		}
	}


接着进入游戏界面后,实例化抛出水果的线程、添加背景音乐、最复杂是就是在重绘画布中的水果运动线程添加、判断水果是否切到、切到水果后画出的水果图形、、、
需要提醒的一点:线程游戏一般会持续的闪烁、、所以,要想解决这种情况、我们需要使用 双缓冲:声明第二块画布,将所有画图都在次画布上实现。
例:

// 设置属性
		this.setTitle("水果忍者");
		System.out.println(width + "     " + height);
		this.setSize(new Dimension(width + 149, height));
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setCursor(HAND_CURSOR);
		this.setResizable(false);
		this.setLayout(new BorderLayout());
		// 添加一个计数面板
		jp1 = new JPanel();
		jp1.setPreferredSize(new Dimension(149, height));
		jp1.setBackground(Color.PINK);
		// 添加分数
		label = new JLabel();
		// 设置窗体可见
		this.setVisible(true);
		// 获取画布
		g = this.getGraphics();
		//实例化一个鼠标监听器对象
		fruitListenr = new Fruit_MouseListener();
		this.addMouseMotionListener(fruitListenr);
		this.addMouseListener(fruitListenr);
		// 创建一个线程,用来持续抛出水果
		throw_thread = new FruitThrow_Thread(this, g, fruitListenr, gameModel);
		throw_thread.start();
		// 创建双缓冲
		image = this.createImage(width + 149, height);
		// 获取次画布
		gra = image.getGraphics();
		// 倒计时标签
		time_label = new JLabel();
		// 实例化倒计时线程
		TimeThread time_thread = new TimeThread(time_label, gameModel);
		time_thread.start();
		//实例化一个连切的线程
		Pummel_Thread pummel_thread = new Pummel_Thread();
		pummel_thread.start();
	}
	// 获取图片的Image的画布
	/**
	 * 重绘方法,水果和背景图片
	 */
	public void paint(Graphics g) {
		super.paint(gra);
		// 绘制背景图片
		gra.drawImage(icon_1.getImage(), 0, 0, this);
		// 获得数组
		fruitArray = throw_thread.getArray();
		// 实例化一个随即类对象
		Random rand = new Random();
		// 随机获取图片
		drawfruit = throw_thread.getDrawfruit();
		int ran = rand.nextInt(180);
		// 获得球的半径
		size = throw_thread.getSize();
		if (fruitArray != null) {
			// 获取球心坐标
			if (null != fruitArray && fruitArray.length != 0) {
				// 画出水果
				for (int i = 0; i < fruitArray.length; i++) {
					FruitThread fruit_thread = fruitArray[i];
					// 判断是否进行过一次游戏
					if (count == 1) {
						fruit_thread.score = 0;
						count = 2;
					}
					if (fruit_thread != null) {
						// 判断水果是否被切到
						boolean cut = fruit_thread.getCut();
						// 如果水果被切到,则画出两个被裁减成两半的图形
						if (cut) {
							// 判断是否切到弹
							if (icon2[drawfruit[i]][1] == icon2[9][1]
									|| icon2[drawfruit[i]][1] == icon2[8][1]) {
								// 绘制爆炸后的图片
								gra.drawImage(
										icon2[drawfruit[i]][1].getImage(),
										fruit_thread.getX(),
										fruit_thread.getY(), null);
							} else {
								gra.drawImage(
										icon2[drawfruit[i]][1].getImage(),
										fruit_thread.getX() + 30,
										fruit_thread.getY() + 40, null);
								gra.drawImage(
										icon2[drawfruit[i]][0].getImage(),
										fruit_thread.getX() - 30,
										fruit_thread.getY() - 40, null);
								gra.drawImage(blood_icon.getImage(),
										fruit_thread.a, fruit_thread.b, null);
							}
							score = fruit_thread.getScore();
						} else {// 没有切到,则画出完整的图形
							gra.drawImage(icon[drawfruit[i]].getImage(),
									fruit_thread.getX(), fruit_thread.getY(),
									null);
						}
					}
				}
			}
		}



游戏需要判断是否结束;这就需要添加判断:时间判断和切到炸个数的判断以及掉下水果数目的判断。。。这些方法可以在球运动过程中调用。


最后的游戏结束框界面中,添加两个选择按钮:继续游戏和结束游戏。
每个界面都有其相应的音乐线程、
然而,值得注意的是,每个水果线程掉下后,都应该将其break掉;不然会使游戏运行越来越卡。。。。。

对于此游戏的介绍确实过于简单、、、为此,提供了自己所写的游戏代码。需要者可以下载查看。。。。你会有想不到的收获。。但较为可惜的是没能上传音乐。。。
分享到:
评论

相关推荐

    基于Cocos Creator的水果忍者游戏

    软件需求:Cocos Creator 内含:项目所有代码、课程报告、图片元素 ...经过系统测试,本水果忍者游戏在各主要平台上运行正常,各游戏界面之间切换良好,模块间响应及时,声音播放自如,可以很好地实现游戏的功能。

    H5水果忍者游戏源码

    【H5水果忍者游戏源码】是一款基于HTML5技术开发的在线小游戏,它复刻了经典的水果忍者玩法,让玩家在网页上也能体验到切水果的乐趣。HTML5是现代网页开发的重要标准,它提供了丰富的功能和API,使得开发者能够创建...

    基于CocosCreator制作的水果忍者游戏

    【基于CocosCreator制作的水果忍者游戏】是一款利用CocosCreator 2.4.5版本开发的游戏项目,但它也具备与其他版本CocosCreator的兼容性。CocosCreator是一款强大的2D游戏开发工具,它提供了丰富的图形渲染能力,便捷...

    html-水果忍者游戏

    【HTML 水果忍者游戏】是一款使用HTML、JavaScript技术开发的小型互动游戏,它模仿了经典的手机游戏“水果忍者”,为玩家提供了一种在网页上切水果的娱乐体验。这款游戏集成了图片和音效,使得游戏过程更加生动有趣...

    UNITY3D水果忍者游戏源代码程序

    《Unity3D水果忍者游戏源代码解析》 Unity3D是一款强大的跨平台游戏开发引擎,广泛应用于2D和3D游戏制作。本资源提供的"UNITY3D水果忍者游戏源代码程序"是基于Unity3D开发的一款经典游戏——水果忍者的源代码,非常...

    HTML5+javascript版水果忍者游戏源码

    用HTML5和javascript实现水果忍者游戏,前端同学值得一看。

    水果忍者游戏苏擦(跨平台)

    【水果忍者游戏苏擦(跨平台)】是一款广受欢迎的休闲娱乐游戏,以其独特的切水果玩法和精美的视觉效果吸引了大量玩家。本资源包包含了该游戏在不同平台上的实现元素,旨在为开发者提供参考和学习的素材。免费的下载...

    实战基于C++实现的水果忍者游戏项目(全套完整100集视频、源码、文档)

    游戏引擎是指一些已编写好的可...3)设计篇:水果忍者游戏设计算法精讲 4)实战篇:水果忍者代码实现部分演示与精讲 适用对象: 1)最好有一定C++基础知识 2)热衷于学习界面编程的人群 3)热衷于游戏设计和开发的人群

    水果忍者游戏广告策划方案.pptx

    【水果忍者游戏广告策划方案】的PPTX文件主要探讨了如何针对这款热门移动游戏进行有效的广告策划和市场推广。以下是对其中关键知识点的详细说明: 1. **市场分析**: - 《水果忍者》是一款由澳大利亚Halfbrick公司...

    易语言水果忍者游戏

    《易语言水果忍者游戏》是一款使用易语言开发的、基于经典游戏“水果忍者”的本地化版本。这款源码提供了完整的程序结构和逻辑,对于学习易语言编程以及游戏开发的初学者来说,是一个很好的实践案例。下面我们将深入...

    水果忍者游戏源码水果忍者游戏源码

    《水果忍者游戏源码详解》 在游戏开发领域,源码是理解游戏运作机制的钥匙,对于初学者和专业人士来说都有着极高的学习价值。本文将深入探讨“水果忍者”这一经典游戏的源码,旨在揭示其背后的编程逻辑和技术实现。...

    java实现的水果忍者游戏

    《Java实现的水果忍者游戏详解》 在编程领域,将流行的游戏转化为代码实现是一种常见的学习和实践方式。本文将深入探讨如何使用Java语言来构建一个简易版的“水果忍者”游戏,涵盖游戏的基本机制、GUI界面设计以及...

    HTML5+javascript版水果忍者游戏源码.rar_V75_lisy_水果忍者

    在这个水果忍者游戏中,JavaScript代码主要实现了以下功能: 1. **游戏初始化**:加载游戏资源,如图片、音频等,并设置游戏的基本参数。 2. **对象创建**:创建水果、刀片等游戏对象,每个对象都有自己的属性(如...

    html5+js实现网页版水果忍者游戏代码.rar

    《HTML5+JavaScript实现网页版水果忍者游戏详解》 在现代互联网技术中,HTML5与JavaScript已经成为构建交互式网页应用的重要工具。本教程将详细解析如何利用这两项技术实现一款网页版的“水果忍者”游戏。首先,...

    水果忍者游戏JQ代码

    【标题】"水果忍者游戏JQ代码"指的是使用JavaScript库jQuery实现的一款基于HTML5的水果忍者小游戏。这款游戏在教学环境中被广泛使用,帮助学生理解JavaScript编程和jQuery库的应用。 【描述】"纯jq代码编写。学校时...

    水果忍者HTML5+JS源码

    说起《水果忍者》,恐怕... 由百度JS小组开发的HTML5水果忍者游戏,基于HTML5实现,效果非常的逼真,虽然对于原版来说有些欠缺,但是已经很不错了,代码完全开源,大家还可以到github贡献自己的代码,让他更加的强大。

    易语言实现水果忍者游戏源码

    《易语言实现水果忍者游戏源码解析》 在编程世界中,开发一款游戏往往是一项技术性和创意性并重的任务。本次我们关注的是一个特别的案例——使用易语言实现的“水果忍者”游戏源码。易语言是中国自主研发的一种简单...

Global site tag (gtag.js) - Google Analytics