`
932035345
  • 浏览: 2438 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

小游戏,知识多

阅读更多
                          连连看小游戏
    要做好一款小游戏,要的不仅是对游戏的理解,更是对于知识的应用,把所学到的知识融会贯通,下面要做的是一款简单的连连看小游戏。
一、我们先来分析一下这个项目
      1.目的:这个项目的目的是找出两张相同的图片,然后再达到把这两张图片消除的效果。
      2.首先做出一个界面框架,能够让图片存放的界面框架,做出界面框架之后,再写出一个面板来来存放这些图片,因为要把图片放入这个界面内,这是第一步。
      3.第二步:图片的坐标和位置,用一个二维数组定义图片的大小,几行几列,然后再定义第一张图片的大小,放在左上角的位置,定义一个数组来存放需要显示在面板上所有的图片。
      4.第三步:把图片存储到面板上的坐标内,首先应该要知道,图片的位置是要随机排列的,但是图片得是偶数,并且是两两对应的,这样最后才不会出现几张单独的图片,定义一个随机对象,用来随机图片,循环所需要图片个数的一半,每随机一张图片,就往队里中放两次,保证每一张图片都是两个。
      5.第四步:消除两张相同的图片,先创建一个鼠标监听器,用来记录和点击图片位置的坐标,判断两张图片是否相同,再用remove方法移除两张相同图片的下标位置的元素。

下面是代码:

import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * 连连看界面
 * 
 */
public class LLKFrame extends JFrame implements Config {

	/**
	 * 初始化游戏图片的方法
	 */
	public void initPicData() {
		// 用来存储图片的临时队列
		ArrayList<ImageIcon> iconList = new ArrayList<ImageIcon>();
		// 定义随机数对象,随机图片
		Random rd = new Random();
		// 循环所需图片个数的一半,每随机一张图片就,就往队列中放两次
		// 结果是:队列中的图片总数就是所需要的图片数,保证每张图片都是偶数个
		for (int i = 0; i < ROWS * COLS / 2; i++) {
			int num = rd.nextInt(9);
			// 拼接图片路径字符串
			String url = "imgs/" + num + ".gif";
			// 创建图片对象
			ImageIcon icon = new ImageIcon(url);
			// 将图片放入队列中,每张图片装两次
			iconList.add(icon);
			iconList.add(icon);
		}
		//将队列中的图片随机取出,放入二维数组中
		for(int i=0;i<ROWS;i++){
			for(int j=0;j<COLS;j++){
				int index=rd.nextInt(iconList.size());
				//根据下标取得队列中的一种图片
				//remove方法是取出并移除该下标位置的元素
				ICONS[i][j]=iconList.remove(index);
			}
		}
	}

	public static void main(String[] args) {
		LLKFrame llk = new LLKFrame();
		// 调用方法初始化数据
		llk.initPicData();
		llk.initUI();
	}

	public void initUI() {

		this.setTitle("连连看V1.0");
		this.setSize(600, 400);
		this.setResizable(false);
		this.setDefaultCloseOperation(3);

		// 添加游戏区域面板
		JPanel gamePanel = new MyPanel();
		gamePanel.setBackground(Color.BLACK);

		this.add(gamePanel);

		this.setVisible(true);

		// 创建鼠标监听器
		LLKListener lis = new LLKListener();
		gamePanel.addMouseListener(lis);

	}

	class MyPanel extends JPanel {
		@Override
		public void paint(Graphics g) {
			super.paint(g);

			// 循环取出二维数组中的图片,绘制出来
			for (int i = 0; i < ROWS; i++) {
				for (int j = 0; j < COLS; j++) {
					ImageIcon img = ICONS[i][j];
					if (img != null) {
						// 计算图片的下标
						g.drawImage(img.getImage(), X0 + SIZE * j, Y0 + SIZE
								* i, SIZE, SIZE, null);
					}
				}
			}

		}
	}

}



import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

/**
 * 游戏监听器,继承鼠标适配器类(实现鼠标监听器接口)
 * 
 * 
 */
public class LLKListener extends MouseAdapter implements Config {

	ImageIcon icon1, icon2;// 用来保存两次选中的图片对象
	int i1, j1, i2, j2;
	int count = 0;// 计数器,用来记录点击次数

	public void mouseReleased(MouseEvent e) {
		// 获得事件源对象:产生事件的对象,即为游戏面板
		JPanel panel = (JPanel) e.getSource();

		// 获得光标按下的位置
		int x = e.getX();
		int y = e.getY();

		if (count == 0) {
			icon1 = getIconByLocation(x, y);
			// 根据坐标计算下标
			i1 = (y - Y0) / SIZE;
			j1 = (x - X0) / SIZE;
			System.out.println(i1 + " " + j1);
			count++;

		} else {
			icon2 = getIconByLocation(x, y);
			i2 = (y - Y0) / SIZE;
			j2 = (x - X0) / SIZE;

			// 当第二次点击完毕,就开始判断两次选中的图片是不是一样的
			// System.out.println(icon1 + "<>" + icon2);

			if (icon1 != null && icon2 != null && (i1!=i2||j1!=j2)
					&& icon1.toString().equals(icon2.toString())) {
				System.out.println("相同,可消除");

				ICONS[i1][j1] = null;
				ICONS[i2][j2] = null;
				// 刷新一下
				panel.repaint();
			} else {
				System.out.println("bu可消除");
			}

			count--;

		}

	}

	private ImageIcon getIconByLocation(int x, int y) {
		for (int i = 0; i < ROWS; i++) {
			for (int j = 0; j < COLS; j++) {
				// 获得该图片左上角的坐标
				int x1 = X0 + SIZE * j;
				int y1 = Y0 + SIZE * i;
				// 如果在范围内,表示当次选中的是,i,j位置的数据
				if (x - x1 < SIZE && y - y1 < SIZE) {
					// 取出数组中ij位置的数据
					ImageIcon icon = ICONS[i][j];
					return icon;
				}

			}

		}
		return null;
	}
}



import javax.swing.ImageIcon;

/**
 * 用来定义常量的接口
 *
 * 
 */
public interface Config {
	// 游戏中可能使用到的数据
	// 开始放置图片的左上角的位置
	public static final int X0 = 60;
	public static final int Y0 = 30;

	// 图片的大小
	public static final int SIZE = 30;

	// 总行数和列数
	public static final int ROWS = 8;
	public static final int COLS = 10;

	// 定义一个数组来存放需要显示在面板上的所有图片
	public static ImageIcon[][] ICONS = new ImageIcon[ROWS][COLS];

}

分享到:
评论

相关推荐

    h5小游戏,白鹭小游戏

    在学习白鹭小游戏开发的过程中,你需要掌握以下几个关键知识点: 1. **HTML5基础知识**:HTML5是超文本标记语言的最新版本,提供了更多的语义元素和API接口,如Canvas用于绘制图形,Audio和Video元素处理多媒体,...

    unity转微信小游戏广告demo

    总之,将Unity项目转换为微信小游戏涉及多个步骤和技术要点,从导出格式、API对接到性能优化和用户体验设计,都需要开发者具备全面的技术能力和对微信小游戏生态的理解。这个压缩包中的内容无疑为学习这一过程提供了...

    cocos creator 小游戏源码

    《Cocos Creator小游戏源码详解》 ...通过深入研究这个Cocos Creator小游戏源码,开发者不仅能学习到游戏开发的基础知识,还能掌握微信小游戏平台的特性和开发流程,为未来创建更多吸引人的游戏奠定坚实基础。

    最新80套微信网页小游戏源码 微信网页小游戏整套网站源码+打包.rar

    微信网页小游戏源码是开发基于微信平台的轻量级游戏的一种资源,这些游戏通常...总之,这套80套微信网页小游戏源码集合是一份宝贵的教育资源,涵盖了前端开发的多个层面,无论是新手入门还是资深开发者,都能从中受益。

    c++各种小游戏(我们老师的)

    【标题】:“C++各种小游戏(我们老师的)” 在C++编程领域,开发小游戏是一种非常有效的学习实践方式,尤其对于初学者来说。本资源集合包含了我们老师精心制作的一系列C++小游戏,旨在帮助学生深入理解和掌握C++...

    60个H5小游戏源码.zip

    《60个H5小游戏源码.zip》是一个包含多种H5小游戏源代码的压缩包,提供了丰富的编程示例,适合开发者学习和参考。H5小游戏是基于HTML5技术开发的,能够在网页上直接运行,无需下载安装,方便快捷。下面我们将深入...

    80个在线小游戏HTML网页源码 星益小游戏平台源码

    这个源码库特别之处在于它提供了80款不同类型的小游戏,用户可以直接在网页上进行游玩,无需安装任何额外软件。这些游戏经过优化,大部分都实现了自适应设计,意味着它们能在不同设备上正常运行,尽管推荐使用电脑端...

    微信小游戏解包工具wxapkg

    这种格式的文件包含了小游戏的所有资源,如图片、音频、脚本等,并进行了加密和混淆处理,以保护游戏的知识产权。wxapkg解包器的作用就是将这个加密的文件转换回可读的形式,便于我们分析和操作。 使用wxapkg解包器...

    CocosCreator小游戏源码

    【CocosCreator小游戏源码】是一款基于CocosCreator开发的微信小游戏项目,旨在提供一个参照著名游戏《羊了个羊》的编程实践案例。通过下载并分析这个源码,开发者可以深入理解CocosCreator引擎在构建小游戏时的具体...

    微信小游戏找茬最新源码

    通过研究这个“微信小游戏找茬”的最新源码,开发者不仅可以学习到小游戏的基本开发技巧,还能了解到图像处理、用户交互设计、游戏逻辑控制等多方面的知识,对于提升自身技能有很大帮助。同时,这也是一个很好的实践...

    60套H5小游戏源码大合集-Html5小游戏JavaScript源码

    "60套H5小游戏源码大合集-Html5小游戏JavaScript源码"这个标题明确指出这是一个包含60个不同H5(HTML5)小游戏的源码集合,这些游戏均基于Html5技术和JavaScript编程语言开发。这意味着读者可以深入研究每个游戏的...

    flash小游戏打包

    在IT行业中,Flash小游戏曾是网络上...随着HTML5技术的崛起和Flash的逐渐退役,现代游戏开发者更多地转向了HTML5 Canvas、WebGL等技术,但了解Flash小游戏打包的知识对于理解早期互联网游戏的制作过程仍具有重要意义。

    laya发布QQ小游戏分包模板

    QQ小游戏是腾讯推出的一种轻量级游戏形式,它基于微信小程序平台,但具有更丰富的游戏功能和性能优化。LayaAir是一款跨平台的2D和3D游戏开发框架,它支持开发HTML5、移动端和QQ小游戏等项目。在这个“laya发布QQ小...

    c语言小游戏代码

    本压缩包中的“c语言小游戏代码”包含了多个小游戏的源代码,适合C语言学习者用来增强编程技能。下面将详细讨论这些游戏可能涉及的C语言知识点。 1. **基本语法**:所有C程序都基于基本语法,包括变量声明、函数...

    40款H5小游戏平台完整源码

    总的来说,"40款H5小游戏平台完整源码"是一份极具价值的学习资料,无论是对于新手入门还是资深开发者提升,都能从中汲取丰富的知识和灵感。通过深入研究和实践,我们可以更好地掌握H5小游戏的开发技术,创造出更多...

    JavaScript 小游戏代码汇总

    以下是 JavaScript 小游戏代码汇总的知识点: 1. HTML 基础:代码开头使用的 `&lt;!DOCTYPE html&gt;` 声明了文档类型为 HTML,並引入了 XHTML 1.0 Transitional 文档类型定义。`&lt;html&gt;` 元素是 HTML 文档的根元素,`...

    抖音小游戏自审报告模板

    4. **小游戏内容审核**:内容审查是关键环节,涵盖多个方面,包括但不限于: - 确保内容不违反宪法基本原则; - 不损害国家利益,不泄露国家秘密; - 避免民族仇恨、歧视或侵害民族风俗; - 杜绝邪教、迷信内容...

    微信小游戏超级染色体小游戏.zip

    它利用微信小游戏的便利性,使得玩家在享受游戏乐趣的同时,能够掌握复杂的遗传学知识。这种游戏化学习的方法不仅提高了玩家的学习兴趣,也反映了移动互联网时代教育与娱乐融合的趋势。通过玩微信小游戏超级染色体,...

    微信小游戏源码80套.zip

    "games"目录很可能包含了每个小游戏的独立源代码文件和资源,可能包含更多的HTML、CSS和JavaScript文件,以及游戏特定的图片、音频或其他素材。 "ceshi"目录可能是测试或示例的代码,用于演示某些功能或测试游戏的...

Global site tag (gtag.js) - Google Analytics