这几天实训,是中软国际的老师
任务是开发一个连连看的小游戏,我也有网上查过实现代码,是要涉及算法的
这是我参考的博客 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