从拼图游戏开始(一)_简单java模拟

原创 2013年12月03日 18:32:14

       今天看Android,看到一个开源库android-FlipView,然后看着看着就绕到了拼图游戏上,现在我打算写一个简单的拼图游戏。这将是我第二个连载的系列文章,今天是第一天,简单的用java命令行模拟一下拼图游戏的实现。代码:

package com.wly.algorithmproblem;

import java.util.Scanner;

/**
 * 拼图游戏的简单模拟
 * @author wly
 *
 */
public class PicGame {

	private static int COLUMN = 4;
	private static int[][] elems = new int[COLUMN][COLUMN];
	
	public static void main(String[] args) {
		int elemsNum = elems.length*elems.length-1;
		
		for(int i=0;i<elems.length;i++) {
			for(int j=0;j<elems[0].length;j++) {
				elems[i][j] = i*elems.length + j; 
			}
		}
		
		//1.生成随机数据,随机的两两交换
		for(int i=0;i<elems.length;i++) {
			for(int j=0;j<elems[0].length;j++) {
				int random = (int)(Math.random() * elemsNum);
				exchangeElems(elems,i,j,random/elems.length,random%elems.length);
			}
		}
		printMatrix(elems);
		
		while(true) {
			System.out.print("输入x和y:");
			Scanner scanner = new Scanner(System.in);
			int x = scanner.nextInt();
			int y = scanner.nextInt();
			move(x, y);
			printMatrix(elems);
		}
	}
	
	public static void move(int line,int column) {
		
		//检查参数合法性
		if(line < 0 || line > (elems.length-1) || column < 0 || column > (elems.length -1)) {
			System.out.println("输入数据有误,不再有效范围内!");
			return;
		}
		
		if(line > 0) { //上
			if(elems[line-1][column] == 0) {
				exchangeElems(elems, line, column, line-1, column);
				return;
			}
		} 
		if(line < (elems.length-1)) { //下
			if(elems[line+1][column] == 0) {
				exchangeElems(elems, line, column, line+1, column);
				return;
			}
		} 
		if(column > 0) { //左
			if(elems[line][column-1] == 0) {
				exchangeElems(elems, line, column, line, column-1);
				return;
			}
		} 
		if(column < (elems.length-1)) { //右
			if(elems[line][column+1] == 0) {
				exchangeElems(elems, line, column, line, column+1);
				return;
			}
		} 
 
		System.out.println("不能移动当前元素");
		return;
	}
	
	
	/**
	 * 交换二维数组中相邻的两个元素
	 * @param array
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 */
	private static void exchangeElems(int[][] array,int x1,int y1,int x2,int y2) {
		int temp = array[x1][y1];
		array[x1][y1] = array[x2][y2];
		array[x2][y2] = temp;
	}
	
	/**
	 * 打印二维矩阵
	 * @param matrix
	 */
	private static void printMatrix(int[][] matrix) {
		for(int i=0;i<matrix.length;i++) {
			for(int j=0;j<matrix[0].length;j++) {
				System.out.print(matrix[i][j] + " ");
			}
			System.out.println();
		}
	}
}

       运行效果:

14 8 5 13 
10 6 1 7 
15 0 11 12 
4 3 9 2 
输入x和y:2 0
14 8 5 13 
10 6 1 7 
0 15 11 12 
4 3 9 2 
输入x和y:1 0
14 8 5 13 
0 6 1 7 
10 15 11 12 
4 3 9 2 
输入x和y:0 0
0 8 5 13 
14 6 1 7 
10 15 11 12 
4 3 9 2 
输入x和y:

      东西很简单,没什么好说的,仅仅想做一个简单的开篇。计划用5天时间讨论一下拼图游戏的算法问题。之后再用5天左右的时间,实现一下Android版的拼图游戏。敬请期待!

       注意:这里随机生成的谜题仅仅是简单的模拟矩阵的样子,实际上这样生成的谜题大约有%50左右是无解的,这将在下一篇博客中加以介绍。

       O啦~~~

       转载请保留出处:http://blog.csdn.net/u011638883/article/details/17099617

       谢谢!!

java大作业之拼图游戏

这个拼图游戏是帮同学做的,还是挺不错的,实现功能包括:自动选取图片,自动图片,且保证生成的一定有解,还有倒计时功能。 先说下如何保证有解,两种方法:1,先切割然后自己后台让空格自己随机移动。     ...

拼图游戏---java实现

游戏说明: 设计一款拼图游戏,要求点击图片按钮,实现图片按钮的移动,直到每一个按钮都到达指定位置游戏终止退出。 游戏设计思路: 1.准备一张图像文件; 2.创建N个按钮图标,每个按钮图标里面存...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

JAVA实现拼图游戏

package org.test;/** * Title: LoonFramework * Description:拼图图像处理[未优化](优化算法已内置于loonframework-game框架中。...

九宫格拼图 我的java学习之路

本游戏采用湖南城市学院兴城广场作为背景来制作九宫格地图,注意判断就好...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Java语言实现简单的拼图游戏(1.0)

暑期实习成果保留(一)day09 初步使用Java GUI编程,实现了简易的拼图游戏。功能很简单,只实现了图片的移动和拼接,另外附加一个步数累计label控制步数。 1、初步实现界面布局设计 上...

java学习心得 关于如何设计一个拼图游戏

拼图游戏的设计可以分为如下几个部分:1)ui设计,2)键盘监听,事件处理,3)游戏逻辑。ui设计较为简单,继承panel类即可实现;键盘监听功能继承KeyAdapter类或者实现KeyLisener接...
  • nufangn
  • nufangn
  • 2016年01月19日 20:58
  • 1650

java实现简单拼图游戏

  • 2017年07月21日 17:26
  • 1.22MB
  • 下载

从拼图游戏开始(四)_IDA*算法求解Java实现

终于,在学习了完深搜和广搜、Dijkstra、二叉堆和优先队列以及A*算法之后,可以看一下IDA*算法了。因为求解4x4的拼图游戏所要搜素的节点数很大,所以应该采用IDA*算法,而3x3的拼图游戏则可...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从拼图游戏开始(一)_简单java模拟
举报原因:
原因补充:

(最多只允许输入30个字)