记一次JAVA实训(开发连连看小游戏)(一)

这几天实训,是中软国际的老师

任务是开发一个连连看的小游戏,我也有网上查过实现代码,是要涉及算法的

这是我参考的博客 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



猜你喜欢

转载自blog.csdn.net/qq_36289732/article/details/80671874