
正文
java代码和思维 java编程思路
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
怎么用Java实现拼图游戏,求思维和代码
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.GroupLayout.Alignment;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Jigsaw implements ActionListener {
private JFrame frame;
private JPanel panel;
private JButtonx[] button;
private JPanel panel_right;
private int level = 4;
private JMenuBar menubar;
private ImageIcon imageicon;
private Image image;
private BufferedImage bufferedimage;
private BufferedImage[] image_button;
private JLabel label;
private JPanel panel_left;
private ImageIcon[] icon_button;
private JMenu menu1;
private JMenuItem menuitem1_1;
private JMenu menu2;
private JCheckBoxMenuItem menuitem2_1;
private JCheckBoxMenuItem menuitem2_2;
private JCheckBoxMenuItem menuitem2_3;
private int x=400;
private int y=400;
private JMenuItem menuitem1_2;
private JFileChooser jfc;
private String name="src/pic/1.jpg"; //起始图片位置,请自行设置
private JPanel panel_menu;
private JLabel label1_1;
private JLabel label1_2;
private JLabel label1_3;
private JLabel label2_1;
private JLabel label2_2;
private JLabel label2_3;
public void reset() {
frame = new JFrame("拼图");
panel = new JPanel();
panel_left = new JPanel();
panel_right = new JPanel();
panel.setLayout(new GridLayout(0, 2));
menubar = new JMenuBar();
menubar.setLayout(new BorderLayout());
panel_menu=new JPanel();
panel_menu.setLayout(null);
menu1 = new JMenu("开始游戏");
menuitem1_1=new JMenuItem("重新开始");
menuitem1_2=new JMenuItem("选择图片");
menu2=new JMenu("等级选择");
menuitem2_1=new JCheckBoxMenuItem("低级(3)");
menuitem2_2=new JCheckBoxMenuItem("高级(4)");
menuitem2_3=new JCheckBoxMenuItem("自定义");
imageicon = new ImageIcon(name);
image = imageicon.getImage();
bufferedimage=new BufferedImage(252, 405, BufferedImage.TYPE_INT_RGB);
bufferedimage.getGraphics().drawImage(image,0,0,252,405,null);
imageicon.setImage(bufferedimage);
label=new JLabel(imageicon);
panel_left.setLayout(new FlowLayout(FlowLayout.CENTER,0,0));
panel_left.add(label);
panel.add(panel_left);
jfc=new JFileChooser();
label1_1=new JLabel("您已经走了");
label1_1.setBounds(30, 0, 80, 25);
label1_2=new JLabel("0");
label1_2.setForeground(Color.RED);
label1_2.setBounds(120, 0, 40, 25);
label1_2.setFont(new Font("黑体",Font.BOLD,20));
label1_3=new JLabel("步");
label1_3.setBounds(160, 0, 30, 25);
label2_1=new JLabel("时间");
label2_1.setBounds(220, 0, 50, 25);
label2_2=new JLabel("0");
label2_2.setForeground(Color.RED);
label2_2.setBounds(280, 0, 40, 25);
label2_2.setFont(new Font("黑体",Font.BOLD,20));
label2_3=new JLabel("秒");
label2_3.setBounds(330, 0, 30, 25);
panel_right.setLayout(new GridLayout(level, level));
button = new JButtonx[level * level];
image_button=new BufferedImage[level*level];
for (int i = 0; i level*level/*-1*/; i++) {
image_button[i]=new BufferedImage(252/level, 405/level, BufferedImage.TYPE_INT_RGB);
image_button[i].getGraphics().drawImage(bufferedimage, 0,0,252/level,405/level,(i%level)*(252/level), (i/level)*(405/level), (i%level+1)*(252/level), (i/level+1)*(405/level),null);
}
icon_button=new ImageIcon[level * level];
for (int i = 0; i level * level; i++) {
button[i] = new JButtonx();
icon_button[i]=new ImageIcon(image_button[i],i+"");
button[i].setIcon(icon_button[i]);
button[i].num=i;
button[i].addActionListener(this);
panel_right.add(button[i]);
}
button[level*level-1].setVisible(false);
panel.add(panel_right);
menuitem1_1.addActionListener(this);
menuitem1_2.addActionListener(this);
menuitem2_1.addActionListener(this);
menuitem2_2.addActionListener(this);
menuitem2_3.addActionListener(this);
menu1.add(menuitem1_1);
menu1.add(menuitem1_2);
menu2.add(menuitem2_1);
menu2.add(menuitem2_2);
menu2.add(menuitem2_3);
menubar.add(menu1,BorderLayout.WEST);
menubar.add(menu2,BorderLayout.EAST);
menubar.add(panel_menu);
panel_menu.add(label1_1);
panel_menu.add(label1_2);
panel_menu.add(label1_3);
panel_menu.add(label2_1);
panel_menu.add(label2_2);
panel_menu.add(label2_3);
frame.setJMenuBar(menubar);
frame.add(panel);
frame.setBounds(x, y, 508+4, 459+5);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==menuitem1_1)
{
for (int i = 0; i level*level; i++)
button[i].setVisible(true);
int a[]=new int [level*level];
int index=level*level;
for (int i = 0; i level*level; i++) {
a[i]=i;
}
for (int i = 0; i level*level; i++) {
int x=(int)(Math.random()*index);
int temp=a[x];
a[x]=a[index-1];
a[index-1]=temp;
button[i].setIcon(icon_button[a[index-1]]);
if(a[index-1]==level*level-1)button[i].setVisible(false);
index--;
}
win();
}
else if(e.getSource()==menuitem1_2){if(jfc.showOpenDialog(panel)==0)name=jfc.getSelectedFile().getAbsolutePath();frame.setVisible(false);x=frame.getX();y=frame.getY();reset();}
else if(e.getSource()==menuitem2_1){level=4;frame.setVisible(false);x=frame.getX();y=frame.getY();reset();}
else if(e.getSource()==menuitem2_2){level=5;frame.setVisible(false);x=frame.getX();y=frame.getY();reset();}
else if(e.getSource()==menuitem2_3)try {level=Integer.parseInt(JOptionPane.showInputDialog(frame,"请输入行数:"));frame.setVisible(false);x=frame.getX();y=frame.getY();reset();} catch (Exception e2) {}
else
{
JButtonx but=(JButtonx)e.getSource();
if(but.isVisible())
{
if(but.num-level=0)judgemengt(but.num,but.num-level);
if(but.num+level=level*level-1)judgemengt(but.num,but.num+level);
if(but.num%level-1=0)judgemengt(but.num,but.num-1);
if(but.num%level+1=level-1)judgemengt(but.num,but.num+1);
}
win();
}
}
public void judgemengt(int i,int j)
{
if(button[j].isVisible()==false)
{
Icon icontemp_button=button[j].getIcon();
button[j].setIcon(button[i].getIcon());
button[i].setIcon(icontemp_button);
button[j].setVisible(true);
button[i].setVisible(false);
}
}
public void win()
{
int i;
for (i = 0; i level*level-1; i++) {
if(button[i].num!=Integer.parseInt(button[i].getIcon().toString()))break;
}
if(i==level*level-1)
{
JOptionPane.showMessageDialog(frame,"YOU WIN");
}
}
public static void main(String[] args) {
Jigsaw a=new Jigsaw();
a.reset();
}
}
class JButtonx extends JButton
{
int num;
}
相关问答
Q1: java中的思维逻辑怎么样?
Java逻辑思维的理解
在前面我们已经学习了不少java的语法,以及其应用方法。那么因此可知,如果要解决的问题十分复杂,可能需要上万行代码,像以前那样把代码全部放在一个java文件内会造成一个问题,那就是难以维护。那么今日就让我们进入面向对象的世界里,学习如何从另一个角度看待世界万物。
一、类和对象逻辑的理解
1.1 对象
1.1.1 对象的理解
如何去理解对象呢?对象其实是一个世界当中的一个具体事物。人们对万事万物的认知过程中把一个个的事物分类总结起来,所以世界可以说是由不同类别的事物构成的。这些一个个的具体事物在你想到它的特征时,就会在脑海里自然的浮现出它的形象。这些客观存在的万事万物中的一个就是对象。在Java的世界中,“万物皆对象”。
1.1.2 对象的解析
既然客观存在的任何事物都可以被看做对象,那么我们首先需要解决的问题就是如何对现实世界的对象进行分析和归纳,与要解决的相关问题有所联系。
Java是一种面向对象的编程语言(Object Oriented Programming Language,OOPL),因此我们需要学会使用面向对象的思维方式考虑问题和编写程序。那对于对象如何区分呢?其实每一个对象都有独有的特征,就像自然界中没有两片相同的叶子。而特征则可以分为静态特征与动态特征。静态特征是可以用文字、数字等数据来描述的特征。动态特征是当前对象所具有的动作、功能。
1.1.3 对象的属性和方法
在限定一个范围内,正是因为对象有了静态特征与动态特征,才能让我们把它与其他东西区分开来。在面向对象的编程思想中,把对象的静态特征与动态特征分别称为对象的“属性”和“方法”,它们是构成对象的两个主要因素。。
对象:用来描述客观事物的一个实体,由一组属性和方法构成。
1.1.4 封装
封装就是把一个事物包装起来,并尽可能的隐藏内部的细节。而对象的属性和方法是不可分割的,它们共同组成了实体对象。因此,对象具有封装性。
1.2 类
1.2.1 什么是类
上文已经解释了什么是对象以及分析对象的属性和方法,但是一个对象的属性或方法并不是唯一的。这只是对象本身这一类中的一个实例,在将这些共同的属性和方法归为一个分类,这就是“类”。
1.2.2 类与对象的关系
类其实是我们用来更好更快的了解世间万物的实体所下的一个***抽象的统一定义***。而实体,也就是所谓的对象,就是这一个类中的一个实例。
1.2.3 类是对象的类型
在以前我们已经学习了不少数据类型,它们非常便于我们使用,在编程数只需声明变量即可。当然,在翻阅了以上文字之后,你应该对类与对象有了一定的了解。那么,如果描述一个现实中的事物,他的数据类型就应当是他所属的这个类。也就是说:类就是对象的类型。
1.3 Java是面向对象的语言
1.3.1 Java的类模板
编写时要注意代码规范,不要漏写public。
类的命名规则:
不能使用Java中的关键字。
不能包含任何嵌入的空格或点号“.”,以及除下划线“_”、字符“$”外的特殊字符。
不能以数字开头。
二、类的无参方法
2.1 类的方法的使用
2.1.1 如何定义类的方法
类的方法必须包括以下三个部分。
方法的名称。
方法的返回值类型。
方法的主体。
通常,编写方法时,分两步完成。
第一步:定义方法名和返回值类型。
第二步:在{}中编写方法的主体部分。
在编写方法时,要注意以下三点:
方法体放在一对大括号中。方法体就是一段程序代码,完成一定的工作。
方法名主要在调用这个方法时使用。在Java中一般采用骆驼命名法。
方法执行后可能会返回一个结果,该结果的类型称为返回值类型。使用return语句返回值。
2.1.2 返回值的使用注意
在编写程序时一定要注意方法声明中返回值的类型和方法体中真正返回值的类型是否匹配。如果不匹配,编译器就会报错。return是跳转语句的一种,它主要做两件事情。
跳出方法:意思是“我已经完成了,要离开这个方法”。
给出结果:如果方法产生一个值,这个值放在return后面,即表达式部分,意思是“离开方法,并将表达式的值返回给调用它的程序”。
2.1.3 方法调用
在程序中通过使用方法名称从而执行方法中包含的语句,这一过程就称为方法调用。
类的方法调用,均使用如下两种形式。
同一个类中的方法,直接使用方法名调用该方法。
不同类的方法,首先创建对象,再使用“对象名.方法名()”来调用。
2.2 如何区分变量
2.2.1 成员变量和局部变量
成员变量和局部变量是在运用类的方法中的两种作用域不同的变量。它们都是变量,只是在使用的过程中需要注意以下两点。
成员变量:AutoLion类的方法可以直接使用该类定义的成员变量。如果其他类的方法要访问它,必须首先创建该类的对象,然后才能通过操作符"."来引用。
局部变量:它的作用域仅仅在定义该变量的方法内,因此只有在这个方法中才能使用。
总的来说,使用成员变量和局部变量时需要注意一下几点内容
作用域不同:局部变量的作用域仅限于定义它的方法,在该方法外无法访问。成员变量的作用域在整个内部都是可见的,所以成员方法都可以使用,如果访问权限允许,还可以在类外部使用成员变量。
初始值不同:对于成员变量,如果在类定义中没有给他赋初始值。Java会给他一个默认值。基本数据类型的值为0,引用类型的值为null,但是Java不会给局内变量赋初始值,因此局部变量必须要定义赋值后再使用。
在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。
局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。
2.3 JavaDoc 注释的使用
程序是程序员的创作作品,它应该具有可读性、相对持久性和可维护性,否则自己以前的作品在之后的阅读中可能给自己或者他人留下障碍,因此,一定要从一开始就养成写注释的习惯。
JavaDoc是前Sun公司提供的一种技术,它能够从程序源代码中提取类、方法、成员等的注释,形成一个和源代码配套的API帮助文档(简单那来说,就是介绍该类、类的方法和成员变量的文档)。
JavaDoc注释的语法规则:
JavaDoc注释以"/**“开头,以”*/"结尾。
每个注释包含一些描述性的文本及若干个JavaDoc标签。
JavaDoc标签一般以"@"为前缀
Q2: java需要很高的逻辑思维吗?
不是java需要很高的逻辑思维,而是编程都需要有一定的逻辑思维能力,越是低层的代码对这些的要求越高,如果你只是想实现一下简单的增、删、查、改,那玩意儿就没多少技术含量,大家都可以勉强上,这样体现不出你的价值对吧,自己逻辑思维能力如果不行的话,做软件开发也难受。
Q3: java程序开发中的逻辑思维怎样学习的呢?
逻辑思维的培养对软件工程非常重要java代码和思维,思维快的能快速编写逻辑代码。可以从一下几个方面进行慢慢培养。
第一java代码和思维:明确学习目的
逻辑思维学习编程对多数IT业人员来说都是非常有用的。学编程java代码和思维,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。
第二打好基础,学好基础知识对我们开发也很重要学编程要具备一定的基础,总结之有以下几方面:
首先是数学基础 从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。
其次是逻辑思维能力的培养 学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。要想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。因此在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。谁都有第一次。有些问题只有通过实践后才能明白,也只有实践才能把老师和书上的知识变成自己的,高手都是这样成材的。最后是选择一种合适的入门语言 面对各种各样的语言,应按什么样的顺序学呢?程序设计工具不外乎如下几类: 1)本地开发 应用软件开发的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;数据库开发工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。 2)跨平台开发 开发工具如 Java 等。 3)网络开发 对客户端开发工具如:Java Script 等;对服务器开发工具如:PHP 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。 以上不同的环境下几种开发工具中 VB 法简单并容易理解,界面设计是可设化的,易学、易用。选 VB 作为入门的方向对出学者是较为适合的。
第三:注意理解一些重要概念
一本程序设计的书看到的无非就是变量、函数、条件语句、循环语句等概念,但要真正能进行编程应用,需要深入理解这些概念,在理解的基础上应用,不要只简单地学习语法、结构,而要吃透针对这些语法、结构的应用例子,做到举一反三,触类旁通。
第四:掌握编程思想,编程思想使用较多的就是oop编程思想
学习一门语言或开发工具,语法结构、功能调用是次要的,最主要是学习它的思想。例如学习 VC 就要学习 Windows 的内在机理、什么是线程......;学习 COM 就要知道VTALBE 、类厂、接口、idl......,关键是学一种思想,有了思想,那么我们就可以触类旁通。
第六:多实践、多交流,一切思维来自项目开发的积累
掌握编程思想必须在编程实际工作中去实践和体会。编程起步阶段要经常自己动手设计程序,具体设计时不要拘泥于固定的思维方式,遇到问题要多想几种解决的方案。这就要多交流,各人的思维方式不同、角度各异,各有高招,通过交流可不断吸收别人的长处,丰富编程实践,帮助自己提高水平。亲自动手进行程序设计是创造性思维应用的体现,也是培养逻辑思维的好方法。
第七:养成良好的编程习惯
编程入门不难,但入门后不断学习是十分重要的,相对来说较为漫长。在此期间要注意养成一些良好的编程习惯。编程风格的好坏很大程度影响程序质量。良好的编程风格可以使
程序结构清晰合理,且使程序代码便于维护。如代码的缩进编排、变量命令规则的一致性、代码的注释等。
第八:上网学编程
在网上可以学到很多不同的编程思想、方法、经验和技巧,有大量的工具和作品及相关的辅导材料供下载
8.加强计算机理论知识的再学习
思维培养学编程是符合“理论→实践→再理论→再实践”的一个认识过程。一开始要具有一定的计算机理论基础知识,包括编程所需的数学基础知识,具备了入门的条件,就可以
开始编程的实践,从实践中可以发现问题需要加强计算机理论知识的再学习。程序人人皆可编,但当你发现编到一定程度很难再提高的时候,就要回头来学习一些计算机科学和数
学基础理论。学过之后,很多以前遇到的问题都会迎刃而解,使人有豁然开朗之感。因此在学习编程的过程中要不断地针对应用中的困惑和问题深入学习数据结构、算法、计算机
原理、编译原理、操作系统原理、软件工程等计算机科学的理论基础和数理逻辑、代数系统、图论、离散数学等数学理论基础知识。这样经过不断的学习,再努力地实践,编程水平一定会不断提高到一个新高度。
关于java代码和思维和java编程思路的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







