这几天实训,是中软国际的老师
任务是开发一个连连看的小游戏,我也有网上查过实现代码,是要涉及算法的
这是我参考的博客 https://blog.csdn.net/sxchen2012/article/details/7438588
实现思路大致相同。
此博客主要记录学习中各阶段的学习过程(实训现在还未结束)
开发工具为eclipse,语言为JAVA
(1)定义两个包,分别为com.icss.linkgame.data 、 com.icss.linkgame.view
现阶段主要做到用窗口的布局格式显示16张图片,并让每一张图片点击后消失,图片采用成对生成数据,并打乱
/** * */ package com.icss.linkgame.data; import java.util.Random; /** * @author Administrator * */ public class GameData { public static int row = 4; public static int cols = 4; public static int data[] = new int[row*cols]; public GameData() { //生成成对数据 init(); //打乱data中的数据 shuffle(); } /* * 生成成对数据,存入data */ private void init() { for(int i = 0; i<data.length; ++i) { data[i] = i/2+1; //data[i] = i%(data.length/2); } } /* * 打乱data中的数据 */ private void shuffle() { for(int i = 0; i < row*cols/2; ++i) { //随机获取数组的下标 Random random1 = new Random(); int index1 = random1.nextInt(data.length); int index2 = random1.nextInt(data.length); //交换这两个数 int temp = data[index1]; data[index1] = data[index2]; data[index2] = temp; } } }
package com.icss.linkgame.view; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import com.icss.linkgame.data.GameData; import javax.swing.AbstractButton; import javax.swing.ImageIcon; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; public class MainFrame extends JFrame { public MainFrame() { GameData gameData = new GameData(); int iniwidth = 500; int iniheight = 500; this.setTitle("连连看"); //窗体标题 Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize(); int width = (int)screensize.getWidth();//获取当前PC的分辨率 int height = (int)screensize.getHeight(); this.setSize(iniwidth,iniheight); //设置窗体的大小为400*400像素大小 this.setLocation((width-400)/2,(height-400)/2); //离显示屏上边缘xxx像素,离显示屏左边缘xxx像素 this.getContentPane().setLayout(new GridLayout(GameData.row,GameData.cols)); for(int i=0;i<GameData.row*GameData.cols;++i) { JButton f = new JButton(); String path = this.getClass().getResource("/").getPath(); f.setIcon(new ImageIcon(path+"/Image/fruit_"+GameData.data[i]+".png")); this.getContentPane().add(f); //获取顶层容器的内容面板 f.addActionListener(new ActionListener() { //内部类,ActionListener为接口 //对每个按钮设置监听器 @Override public void actionPerformed(ActionEvent e) { //找到点击的按钮,获取事件源 JButton button = (JButton)e.getSource(); button.setVisible(false); } }); } setVisible(true); //设置窗体可见,没有该语句,窗体将不可见 this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); } }
package com.icss.linkgame.view; import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JLabel; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub MainFrame f = new MainFrame(); } }
MainFrame类继承了Frame,调用其中方法可直接用this(书中是用new 生成对象,再获取容器对象)
其中java编译后文件在work-space的项目文件中的bin目录下
String path = this.getClass().getResource("/").getPath(); 这句语句获取的路径为bin目录下的路径
PS:
老师授课意见:文件名的定义要用英文,尽量不用拼音,拼音容易谐音
i++ 与 ++i 的区别
++i i++
int i; int i;
i+=1; int temp = i;
return i; i+=1; return temp;
明显++i比较省资源
现如今的编译器运行效率没有区别,因为即使是i++,软件也会编译成++i