自己写的一个移动拼图的雏形,自己可以在此基础上发展
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移动开发的良好实例。 游戏的核心功能包括: 1. **图片选择**:游戏可能允许用户从预设图片库中选择图片,或者加载自己的...
- 游戏规则介绍:文档可能会详细说明拼图游戏的基本玩法,例如如何移动拼图块,何时完成游戏等。 - 游戏实现功能:主窗口界面是用户与游戏交互的主要界面,可能包括游戏开始、暂停、重新开始等功能。主窗口菜单...
这个压缩包文件“java写的拼图游戏和坦克大战.zip”包含了一个使用Java编程语言开发的游戏项目,主要由“jigsaw-puzzle-master”目录组成。这个项目涵盖了多个IT知识点,非常适合那些想在Java游戏开发领域深化学习的...
这个游戏的核心理念是对1到15的数字进行重新排列,模拟拼图游戏的过程,增强用户的逻辑思维和问题解决能力。 首先,让我们深入了解JAVA语言。JAVA是一种面向对象的编程语言,以其“一次编写,到处运行”的特性而...
在本篇毕业设计中,学生将使用Java Swing组件来开发一款拼图游戏,旨在提供一个交互性强、功能丰富的图形界面应用。以下是对该设计的主要知识点的详细阐述: 1. **Java Swing**: Java Swing是一个用于创建桌面应用...
【九宫格拼图游戏】是一款基于Java编程语言开发的Android平台上的益智游戏应用。在这款游戏中,玩家需要将一个被分割成9个小方块的图像重新拼接起来,恢复成原来的完整图像。游戏的核心功能包括图片的加载、打乱、...
在这个拼图游戏中,`src`目录下的Java类文件会包含游戏的主要逻辑,而`res`目录则包含游戏的布局文件、图片资源等。 3. **图形绘制**:Android使用Canvas和Bitmap对象来绘制游戏画面。源码中可能会包含自定义View类...
本合集包含了多种基于Java编程的课程设计项目,包括贪吃蛇、21点、火柴人、俄罗斯方块和拼图游戏,这些都是经典的编程实践案例,涵盖了游戏开发、算法设计、图形用户界面(GUI)编程等多个领域。 1. 贪吃蛇游戏: ...
拼图游戏可能需要自定义UI元素,例如通过绘制矩形和线条来模拟拼图块。 6. **资源管理**:在移动设备上,资源(如内存、屏幕尺寸)有限,因此需要有效地管理图像和其他媒体资源。这可能涉及图片的压缩、动态加载和...
在移动设备上实现游戏,尤其是像拼图游戏这样简单而有趣的智力游戏,是J2ME应用的一个典型场景。本文将深入探讨基于J2ME的拼图游戏源码,带你走进这个小型但充满挑战的游戏世界。 首先,我们来看一下拼图游戏的基本...
- 益智游戏:通常需要玩家运用逻辑思维解决问题,例如经典的俄罗斯方块或拼图游戏。 - 休闲游戏:设计简单,易于上手,适合消磨时间,如跳跃或消除类游戏。 - 赛车游戏:模拟真实赛车体验,玩家可以通过触摸屏幕...
如“豪华水族箱”可能是模拟经营类,“星云的彼端》完全精排”可能是角色扮演游戏,“法老密匙”可能是解谜冒险游戏,“彩球人生”可能属于休闲益智类,“触屏智力拼图”显然是一款挑战智力的拼图游戏。 5. **内存...
Java仿2048游戏是一款基于Java编程语言实现的经典数字拼图游戏,灵感来源于2014年风靡全球的2048游戏。在这个游戏中,玩家需要通过滑动屏幕来合并数字,目标是达到2048这个数值。下面我们将深入探讨这款Java实现的...
《基于Java的拼图游戏设计》 在Java编程领域,设计一款小游戏是学习和实践语言特性的良好方式。本实验报告以设计一个简单的拼图游戏为例,深入探讨如何使用Java Swing库来创建图形用户界面(GUI)并实现游戏逻辑。 ...
2. **拼图游戏**:拼图游戏涉及到图像处理和图形用户界面(GUI)设计。Java的AWT或Swing库可以用来创建图形界面,同时需要理解如何分割和重组图片,这将运用到文件输入输出、位图处理等知识。 3. **模拟钢琴**:...
2048是一款广受欢迎的数字拼图游戏,由19岁的意大利开发者Gabriele Cirulli在2014年推出。这个游戏的目标是通过合并相同的数字来生成2048这个数字。在本文中,我们将深入探讨如何使用Java编程语言实现一个自己的2048...
在IT行业中,手机游戏开发是一项复杂且充满挑战的工作,尤其当涉及到特定类型的游戏,如拼图游戏时。本文将深入探讨“手机拼图小游戏.rar”这个压缩包所包含的主题,即如何利用技术来构建一款手机上的拼图游戏,并...
4. **拼图游戏**:标签提到了“拼图游戏”,这意味着程序可能包含了一个简单的游戏模块。这可能涉及到图像分割、拖放操作、位置验证等逻辑,通过Java的图形库实现。 5. **相册功能**:用户可以浏览和展示生日相关的...
拼图游戏是一种广受欢迎的休闲娱乐方式,尤其在移动设备上,由于其轻量级、易上手的特点,深受用户喜爱。在Android平台上开发这样的游戏,需要对Android应用开发有深入理解,尤其是涉及到游戏引擎、图形图像处理和...