拼图游戏

package cn.hncu.gui.swing;

import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class LowLow extends JFrame implements ActionListener, MouseListener {
String pic1 = "pictures\\fff-";//被分割的小图的路径和名字
String pic2 = "pictures\\lll";//完整图的路径和名字
int MouseCount = 0;//玩家的移动次数
int number =200;//系统之前的移动次数,一定程度上可以控制图片乱序程度
String DaAn = null;
int brun = 15;
MyJButton[] b = new MyJButton[16];
MessageDialog dlg = new MessageDialog(this);
Icon[] image = new Icon[16];
int VisDong = -1;

public LowLow(String str){
super(str);
setBounds(600,200,400,400);
setResizable(false);
getContentPane().setLayout(new GridLayout(4, 4));
int[] Arr = Arr();

for(int i =0 ;i<16;i++){
image[i] = new ImageIcon(pic1+i+".png");
}
for(int i=0;i<16;i++){
b[i]=new MyJButton(image[i],i);
b[i].setSize(100, 100);
getContentPane().add(b[i]);
b[i].addActionListener(this);
b[i].addMouseListener(this);
}
run();

setVisible(true);
}

public void Rrun(int i){
MyJButton bb = new MyJButton();
bb.setIcon(b[brun].getIcon());bb.setZhi(b[brun].getZhi());
b[brun].setIcon(b[brun+i].getIcon());b[brun].setZhi(b[brun+i].getZhi());
b[brun+i].setIcon(bb.getIcon());b[brun+i].setZhi(bb.getZhi());
brun+=i;
}
private void run() {
int[] Arr = Arr();
for(int i =0;i<number;i++){
if(Arr[i]==-4&&brun-4>=0){//上
Rrun(Arr[i]);
DaAn = "下"+DaAn;
}
if(Arr[i]==4&&brun+4<=15){//下
Rrun(Arr[i]);
DaAn = "上"+DaAn;
}
if(Arr[i]==-1&&brun%4!=0){//左
Rrun(Arr[i]);
DaAn = "右"+DaAn;
}
if(Arr[i]==1&&(brun+1)%4!=0){//右
Rrun(Arr[i]);
DaAn = "左"+DaAn;
}
}
System.out.println("必胜:"+DaAn);
}

public static void main (String[] args){
new LowLow("低级拼图");

}
//产生随机数组
public int[] Arr(){
int[] t = {-1,1,-4,4};
int[] a = new int[number];
for(int i=0;i<number;i++){
int temp = (int) (Math.random()*10)%4;
a[i] = t[temp];
}
return a;
}
//判断是否移动
public boolean Mo(int i){
VisDong = -1;
for(int j=0;j<16;j++){
if(b[j].p==15){
VisDong=j;
break;
}
}
if(i+1==VisDong||i-1==VisDong||i+4==VisDong||i-4==VisDong){
return true;
}
return false;
}

//判断是否结束
public boolean gameOver(){
for(int i =0;i<16;i++){
if(b[i].p!=i)return false;
}
return true;
}

class MyJButton extends JButton{
private int p;
private Icon image;
public MyJButton(){

}
public MyJButton(Icon image,int p){
super(image);
this.p = p;
}
public int getZhi(){
return p;
}
public void setZhi(int p){
this.p=p;
}
}
@Override
public void actionPerformed(ActionEvent e) {
MouseCount++;
for(int i=0;i<16;i++){
if(e.getSource()==b[i]&&Mo(i)){
MyJButton bb = new MyJButton();
bb.setIcon(b[i].getIcon());bb.setZhi(b[i].getZhi());
b[i].setIcon(b[VisDong].getIcon());b[i].setZhi(b[VisDong].getZhi());
b[VisDong].setIcon(bb.getIcon());b[VisDong].setZhi(bb.getZhi());
}
}
if(gameOver()){
JOptionPane.showMessageDialog(this, "恭喜您赢了!!\r\n移动次数:"+MouseCount);
System.out.println("恭喜您赢了!!");
System.out.println("移动次数:"+MouseCount);
}
}

@Override
public void mouseClicked(MouseEvent e) {
}

@Override
public void mousePressed(MouseEvent e) {
for(int i=0;i<16;i++){
if(e.getSource()==b[i]&&b[i].p==15){
dlg.show("");
}
}
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}
//自定义的对话框类
class MessageDialog extends JDialog{
private JFrame jframe;
private JLabel label;
public MessageDialog(JFrame jframe){
super(jframe,"原图",true);
setBounds(150, 200, 400, 400);
setDefaultCloseOperation(HIDE_ON_CLOSE);
setResizable(false);
label = new JLabel(new ImageIcon(pic2+".png"));
getContentPane().add(label);
}
public void show(String str){
label.setText(str);
setVisible(true);
}
}
}

时间: 2024-10-28 21:50:00

拼图游戏的相关文章

一款html拼图游戏详解

本文是爱编程原创翻译,转载请看清文末的转载要求,谢谢合作! 游戏介绍 这篇文章是献给web游戏开发者用简单的开发工具开发一款游戏.此文介绍了用html.css.javascript只需简单和几个步骤开发一款2d游戏.在这里,我要呈现给大家如何创建一款拼图游戏,在这个游戏中你可以拖动小图块来拼成完整的大图. 点击这里查看游戏效果. 游戏规则 游戏规则非常简单,你只要拖动被切碎的图片块来组成完整的大图.需要用正确的方法才能最终拼成完整的图片.在游戏中拖动小图片的次数将被统计下来.所以.应该尽量用最少

Vue.js实现拼图游戏

Vue.js实现拼图游戏 之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5516065.html 前言 为了进一步让大家了解Vue.js的神奇魅力,了解Vue.js的一种以数据为驱动的理念,本文主要利用Vue实现了一个数字拼图游戏,其原理并不是很复杂,效果图如下: demo展示地址为:https://luozhihao.github.io/vue-puzz

Entanglement Web App(六边拼图游戏)

插件介绍: 对常常面对电脑工作的朋友们来说,一款能够让你们放松的游戏是必不可少的,今天为大家推荐一款度过休闲时光的小游戏.纠缠是gopherwood工作室为您做的六边拼图的益智游戏,试着使最长的路成为可能.旋转和放置六角形瓷砖蚀刻路径,以延长您的路径,而不运行到墙上. 使用说明: 将Entanglement Web App(六边拼图游戏)添加至chrome,并在应用中启动它. 功能介绍: - 挑战模式;你可以不断挑战自己或者他人的记录.- 樱花小树林:一个完全新的游戏游戏模式的纠缠!你有一个宽敞

JavaScript写一个拼图游戏

拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)?  因为图片是一整张jpg或者png, 我们要用把图片导入到canvas画布, 然后再调用上下文context的getImageData方法, 把图片处理成小图, 这些小图就作为拼图的基本单位: 如何判断游戏是否结束, 或者说如何判断用户拼成的大图是正确的? 我们就要在刚刚生成的小图上面添加自定义属性, 后期在小图被移动后再一

拼图游戏(数码还原游戏)算法的研究

将问题一般化,在M*N的方格里有M*N-1个不同元素和一个空元素,只有空元素可以与上下左右相邻的元素交换位置.M*N方格中M*N-1个元素和一个空元素的位置确定一个图形.拼图游戏的问题是:一个图形经过一连串的交换能否得到另一个图形,如何得到.从交换方式的可逆性看出这种关系满足等价三性质,如果图形A通过交换变成图形B我们则称它们是等价的.把M*N-1个元素用1至M*N-1编号,空元素编号0.然后展成一个排列.每个图形对应一个排列.确定了展开方式,图形和排列是一一对应的.这里用到的展开方式是行优先的

类似拼图游戏设计

客户端设计 1.如何绘制? 分上下两层,下层为最终图片,上层尺寸和下层一致,并将上层分割为 m 行 n 列的方格. 2.方格位置如何设定? m 行 n 列的方格,设定左上角坐标为(0,0),那么最右下角坐标为( (m-1) , (n-1) ). 3.如何定义方格对象,及方格拥有什么方法和属性? 方格Pane有4个属性: locationX,locationY,PaneState,visitor. (locationX,locationY)组成方格位置信息: PaneState包含3种状态,VIS

程序设计 之 C#实现《拼图游戏》 (下) 原理篇

前言:在 http://www.cnblogs.com/labixiaohei/p/6698887.html 程序设计 之 C#实现<拼图游戏>(上),上传了各模块代码,而在本文中将详细剖析原理,使读者更容易理解并学习,程序有诸多问题,欢迎指出,共同学习成长! 正文: 拼图是一个非常经典的游戏,基本每个人都知道他的玩法,他的开始,运行,结束.那么,当我们想要做拼图的时候如何入手呢?答案是:从现实出发,去描述需求(尽量描述为文档),当我们拥有了全面的需求,就能够提供可靠的策略,从而在代码中实现,

拼图游戏(数码还原游戏)的实现

一.游戏规则 首先,这里的拼图游戏是滑块拼图,类似于华容道,游戏者通过移动拼图块将拼图还原为初始形状.关于拼图,常见的有3x3,4x4,多的以至于有16x16不等.一般块数越多拼图越复杂. 这里对游戏规则进行较严格的定义: 1. 游戏初始化时,将图形分为nxn个正方形块,随机摆放在原图形位置.一般以原图形右下角的一块为空白块,已进行移动.这里初始化时,也令新图形的右下角为空. 2. 游戏中,拼图的移动只能向空白块移动.从移动方向来说,有两种情况,分别是横移与纵移. 3. 游戏的胜利条件是将打乱的

拼图游戏---需求分析

各位领导/投资人/用户/合作伙伴:我们的产品--趣拼图是为了游戏中的暴力因素以及无聊.,我们有独特的办法制作一个游戏,它能给用户带来更多好处,比如生活知识的普及,智力的开发等,同时我们有更高效率的一传十,十传百的方法,能让更多用户知道我们的产品,并进一步的传播. 在经过众多假设以及实践,我们组决定做一个开发智力的拼图游戏.我发现现在大多数游戏都是按部就班,玩家需要按照游戏制定的规则来活动,那这样,游戏除了娱乐也就没有其他的意义.经过调查,发现现在人,喜欢玩一些格斗[比如拳皇].跑酷[比如神庙逃亡

Java GUI 基础 Eight Puzzle (拼图游戏)

很简单使用java GUI 制作一个简单的拼图游戏 // main package HW1; import java.io.IOException; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class HW1 extends JFrame{ /** * */ public HW1_0586(String s