`
ling凌yue月
  • 浏览: 339225 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java移动拼图游戏模拟

    博客分类:
  • java
阅读更多
自己写的一个移动拼图的雏形,自己可以在此基础上发展
public class MovePuzzle {

	/**
	 * 
	 */
	static int rank[][];

	/**
	 * 0数组的索引
	 */
	public static int ZERO_INDEX_Y;
	public static int ZERO_INDEX_X;

	/**
	 * 
	 */
	private static int x = 3;
	private static int y = 3;

	/**
	 * 
	 * @param rak
	 */
	public MovePuzzle(int x, int y) {
		this.rank = new int[x][y];
		this.x = x;
		this.y = y;

	}

	/**
	 * 初始化this.rank
	 * 
	 * @return 返回一个初始化的二维数组
	 */
	public int[][] initRank() {
		return this.initRank(initRank(this.rank));
	}

	/**
	 * 初始化参数1
	 * 
	 * @param rak
	 * @return 将参数1的二维数组初始化成一个 从0开始的一个二维数组 0 1 2 3 4 5 6 7 8
	 */
	private int[][] initRank(int[][] rak) {
		for (int i = 0; i < rak.length; i++) {
			for (int j = 0; j < rak[i].length; j++) {
				rak[i][j] = i * rak.length + j;
				if (rak[i][j] == 0) {
					this.ZERO_INDEX_X = i;
					this.ZERO_INDEX_Y = j;
				}
			}
		}
		return rak;
	}

	/**
	 * 打印数组
	 */
	public void printArr() {
		this.print2DArr(this.rank);
	}

	/**
	 * 打印出所有的二维数组
	 */
	public void print2DArr(int[][] twoDArr) {
		for (int i = 0; i < twoDArr.length; i++) {
			for (int j = 0; j < twoDArr[i].length; j++) {
				System.out.print(twoDArr[i][j] + "\t");
			}
			System.out.println();
		}
	}

	/**
	 * 得到0值得x索引和y索引
	 * 
	 * @param twoDArr
	 */
	public void getZero_index(int[][] twoDArr) {
		for (int i = 0; i < twoDArr.length; i++) {
			for (int j = 0; j < twoDArr[i].length; j++) {
				if (twoDArr[i][j] == 0) {
					this.ZERO_INDEX_X = i;
					this.ZERO_INDEX_Y = j;
				}
			}
		}
	}

	/**
	 * 调换this.rank[oldX][oldY] 和 this.rank[newX][newY]的值
	 * 
	 * @param oldX
	 * @param oldY
	 * @param newX
	 * @param newY
	 * @return 是否调换成功
	 */
	public boolean exchangeBlock(int oldX, int oldY, int newX, int newY) {
		int tmp = 1;
		tmp = this.rank[oldX][oldY];
		this.rank[oldX][oldY] = this.rank[newX][newY];
		this.rank[newX][newY] = tmp;
		if (tmp == 0) {
			this.ZERO_INDEX_X = newX;
			this.ZERO_INDEX_Y = newY;
		}
		return true;
	}

	/**
	 * 检查是否可以移动
	 * 
	 * @param oldX
	 * @param oldY
	 * @param newX
	 * @param newY
	 * @return
	 */
	public boolean checkCanMove(int oldX, int oldY, int newX, int newY) {
		boolean result = true;
		if (this.rank[oldX][oldY] != 0 && this.rank[newX][newY] != 0) {
			result = false;
		} else if ((oldX != newX) && (oldY != newY)) {
			result = false;
		}
		return result;
	}

	/**
	 * 移动数字index
	 * 
	 * @param index
	 */
	public void moveBlock(int index) {
		int index_x = 0;
		int index_y = 0;
		/**
		 * 找出要移动的数字的位置
		 */
		for (int i = 0; i < this.rank.length; i++) {
			for (int j = 0; j < this.rank[i].length; j++) {
				if (this.rank[i][j] == index) {
					index_x = i;
					index_y = j;
				}
			}
		}
		if (checkCanMove(this.ZERO_INDEX_X, this.ZERO_INDEX_Y, index_x, index_y)) {
			exchangeBlock(this.ZERO_INDEX_X, this.ZERO_INDEX_Y, index_x,
					index_y);
		}
	}
}


下面是test类:
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MovePuzzle movePuzzle = new MovePuzzle(3, 3);
		movePuzzle.initRank();
		movePuzzle.printArr();
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,5);
		move(movePuzzle,4);
		move(movePuzzle,3);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,4);
		move(movePuzzle,8);
		move(movePuzzle,7);
		move(movePuzzle,6);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,5);
		move(movePuzzle,8);
		move(movePuzzle,7);
		move(movePuzzle,6);
		move(movePuzzle,4);
		move(movePuzzle,5);
		move(movePuzzle,8);
		move(movePuzzle,7);
		move(movePuzzle,6);
		move(movePuzzle,4);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,8);
		move(movePuzzle,5);
		move(movePuzzle,6);
		move(movePuzzle,4);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,6);
		move(movePuzzle,5);
		move(movePuzzle,7);
		move(movePuzzle,4);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,6);
		move(movePuzzle,8);
		move(movePuzzle,7);
		move(movePuzzle,4);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,6);
		move(movePuzzle,8);
		move(movePuzzle,7);
		move(movePuzzle,4);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,6);
		move(movePuzzle,8);
		move(movePuzzle,7);
		move(movePuzzle,4);
		move(movePuzzle,1);
		move(movePuzzle,2);
		move(movePuzzle,3);
		move(movePuzzle,6);
		move(movePuzzle,8);
		move(movePuzzle,7);
		move(movePuzzle,7);
		move(movePuzzle,8);
	}

	public static void move(MovePuzzle movePuzzle,int i){
		movePuzzle.moveBlock(i);
		System.out.println("-----调换后"+i+"后------");
		movePuzzle.printArr();
	}
}
分享到:
评论

相关推荐

    Java拼图游戏手机版

    这款拼图游戏简单易上手,适合不同年龄段的用户,同时也为开发者提供了一个学习和实践Java移动开发的良好实例。 游戏的核心功能包括: 1. **图片选择**:游戏可能允许用户从预设图片库中选择图片,或者加载自己的...

    基于Java的拼图游戏设计.doc

    - 游戏规则介绍:文档可能会详细说明拼图游戏的基本玩法,例如如何移动拼图块,何时完成游戏等。 - 游戏实现功能:主窗口界面是用户与游戏交互的主要界面,可能包括游戏开始、暂停、重新开始等功能。主窗口菜单...

    java写的拼图游戏和坦克大战.zip

    这个压缩包文件“java写的拼图游戏和坦克大战.zip”包含了一个使用Java编程语言开发的游戏项目,主要由“jigsaw-puzzle-master”目录组成。这个项目涵盖了多个IT知识点,非常适合那些想在Java游戏开发领域深化学习的...

    仿拼图的JAVA图形界面程序

    这个游戏的核心理念是对1到15的数字进行重新排列,模拟拼图游戏的过程,增强用户的逻辑思维和问题解决能力。 首先,让我们深入了解JAVA语言。JAVA是一种面向对象的编程语言,以其“一次编写,到处运行”的特性而...

    2020年基于JAVA的拼图游戏的毕业设计开题报告.doc

    在本篇毕业设计中,学生将使用Java Swing组件来开发一款拼图游戏,旨在提供一个交互性强、功能丰富的图形界面应用。以下是对该设计的主要知识点的详细阐述: 1. **Java Swing**: Java Swing是一个用于创建桌面应用...

    九宫格拼图游戏

    【九宫格拼图游戏】是一款基于Java编程语言开发的Android平台上的益智游戏应用。在这款游戏中,玩家需要将一个被分割成9个小方块的图像重新拼接起来,恢复成原来的完整图像。游戏的核心功能包括图片的加载、打乱、...

    安卓拼图游戏源码

    在这个拼图游戏中,`src`目录下的Java类文件会包含游戏的主要逻辑,而`res`目录则包含游戏的布局文件、图片资源等。 3. **图形绘制**:Android使用Canvas和Bitmap对象来绘制游戏画面。源码中可能会包含自定义View类...

    JAVA课程设计合集!!!大学课程。贪吃蛇,21点,火柴人,俄罗斯方块,拼图游戏等多款课程设计游戏!

    本合集包含了多种基于Java编程的课程设计项目,包括贪吃蛇、21点、火柴人、俄罗斯方块和拼图游戏,这些都是经典的编程实践案例,涵盖了游戏开发、算法设计、图形用户界面(GUI)编程等多个领域。 1. 贪吃蛇游戏: ...

    Jave me 游戏实例 拼图游戏源代码

    拼图游戏可能需要自定义UI元素,例如通过绘制矩形和线条来模拟拼图块。 6. **资源管理**:在移动设备上,资源(如内存、屏幕尺寸)有限,因此需要有效地管理图像和其他媒体资源。这可能涉及图片的压缩、动态加载和...

    j2me拼图游戏源码

    在移动设备上实现游戏,尤其是像拼图游戏这样简单而有趣的智力游戏,是J2ME应用的一个典型场景。本文将深入探讨基于J2ME的拼图游戏源码,带你走进这个小型但充满挑战的游戏世界。 首先,我们来看一下拼图游戏的基本...

    154个jar java 触屏游戏

    - 益智游戏:通常需要玩家运用逻辑思维解决问题,例如经典的俄罗斯方块或拼图游戏。 - 休闲游戏:设计简单,易于上手,适合消磨时间,如跳跃或消除类游戏。 - 赛车游戏:模拟真实赛车体验,玩家可以通过触摸屏幕...

    90款java手机游戏触屏

    如“豪华水族箱”可能是模拟经营类,“星云的彼端》完全精排”可能是角色扮演游戏,“法老密匙”可能是解谜冒险游戏,“彩球人生”可能属于休闲益智类,“触屏智力拼图”显然是一款挑战智力的拼图游戏。 5. **内存...

    java仿2048游戏实例源码

    Java仿2048游戏是一款基于Java编程语言实现的经典数字拼图游戏,灵感来源于2014年风靡全球的2048游戏。在这个游戏中,玩家需要通过滑动屏幕来合并数字,目标是达到2048这个数值。下面我们将深入探讨这款Java实现的...

    java小游戏设计.doc

    《基于Java的拼图游戏设计》 在Java编程领域,设计一款小游戏是学习和实践语言特性的良好方式。本实验报告以设计一个简单的拼图游戏为例,深入探讨如何使用Java Swing库来创建图形用户界面(GUI)并实现游戏逻辑。 ...

    java程序设计百练游戏篇

    2. **拼图游戏**:拼图游戏涉及到图像处理和图形用户界面(GUI)设计。Java的AWT或Swing库可以用来创建图形界面,同时需要理解如何分割和重组图片,这将运用到文件输入输出、位图处理等知识。 3. **模拟钢琴**:...

    自己制作的 java 版 2048游戏

    2048是一款广受欢迎的数字拼图游戏,由19岁的意大利开发者Gabriele Cirulli在2014年推出。这个游戏的目标是通过合并相同的数字来生成2048这个数字。在本文中,我们将深入探讨如何使用Java编程语言实现一个自己的2048...

    手机拼图小游戏.rar

    在IT行业中,手机游戏开发是一项复杂且充满挑战的工作,尤其当涉及到特定类型的游戏,如拼图游戏时。本文将深入探讨“手机拼图小游戏.rar”这个压缩包所包含的主题,即如何利用技术来构建一款手机上的拼图游戏,并...

    生日祝福java程序代码

    4. **拼图游戏**:标签提到了“拼图游戏”,这意味着程序可能包含了一个简单的游戏模块。这可能涉及到图像分割、拖放操作、位置验证等逻辑,通过Java的图形库实现。 5. **相册功能**:用户可以浏览和展示生日相关的...

    拼图游戏安卓

    拼图游戏是一种广受欢迎的休闲娱乐方式,尤其在移动设备上,由于其轻量级、易上手的特点,深受用户喜爱。在Android平台上开发这样的游戏,需要对Android应用开发有深入理解,尤其是涉及到游戏引擎、图形图像处理和...

Global site tag (gtag.js) - Google Analytics