码迷,mamicode.com
首页 > 其他好文 > 详细

结对项目实验报告

时间:2015-05-17 21:31:14      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

结对实验报告

 结对人曹文静的地址:

 http://www.cnblogs.com/liandiexueying/

一.实践目标:

  • 敏捷方法之结对编程实践
  • 学会与他人合作
  • 基于项目的Github源代码管理
  • 继续学习JUnit4单元测试
  • 形成良好的编码风格

二.结对项目参考题目

      连连看小游戏。

三.实验报告内容

1.题目简介

 游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。 
    该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。图片全部消完为游戏成功。游戏还将设置退出,再来一局的按钮,并实现该功能,方便用户进行操作。

     该游戏将有如下内容:

(1)游戏计分功能

   当消去两个相同的图片后分数将增加100分。

(2)退出功能

   该功能有一个“退出”按钮,当按下“退出”按钮后,将直接退出游戏。

(3)再来一局功能

  该功能有一个“再来一局”的按钮,当按下“再来一局”按钮后,图片将会重新排列,重新开始游戏。

(4)游戏倒计时功能

在游戏界面的上方有一个倒计时的进度条,增加游戏的难度,激发玩家的挑战兴趣。

(5)用户登录注册功能

在进入游戏界面之前,将会出现用户登录界面,如果没有注册的玩家在按下“注册”按钮后将进入注册界面,玩家需要填写用户名,密码,性别等信息完成注册,再进入登录界面,输入用户名和密码按下“确定”后就将进入游戏界面,开始游戏。

2.代码地址:

https://github.com/chudongrui/lianliankan/tree/master

 

 

3.结对分工情况

曹文静:主要负责登陆界面,时间到的界面,进度条界面。

初冬瑞:主要负责注册界面,执行界面,查找图片

技术分享

 

4.结对实践过程

 连连看游戏的设计目标为:

(1)该游戏开始前,将设置一个用户登录注册界面,如果没有注册的玩家在按下“注册”按钮后将进入注册界面,玩家需要填写用户名,密码,性别等信息完成注册,再进入登录界面,输入用户名和密码按下“确定”后就将进入游戏界面,开始游戏。

(2)游戏中将有“退出”功能,选择退出命令后程序将终止执行,关闭窗口。

还将有“再来一局”功能,选择再来一局命令后程序将对图片重新排列,重新开始游戏。该游戏还有一个时间倒计时的进度条,提醒玩家剩余的时间,增加游戏的难度。在界面的顶部有计分功能,当玩家消去图片后就会赢得相应的分数。

 4.1注册界面

技术分享

关键代码:

private void registerDialog(final JDialog regDialog) {

          

Box box1 = Box.createVerticalBox();

box1.add(new JLabel("用户名:", JLabel.RIGHT));

box1.add(Box.createVerticalStrut(10));

box1.add(new JLabel("性别:", JLabel.RIGHT));

box1.add(Box.createVerticalStrut(10));

box1.add(new JLabel("密码:", JLabel.RIGHT), -1);

box1.add(Box.createVerticalStrut(10));

box1.add(new JLabel("确认密码:", JLabel.RIGHT));

 

Box box2 = Box.createVerticalBox();

final JTextField nameTextField = new JTextField(10);

box2.add(nameTextField);

box2.add(Box.createVerticalStrut(8));

final CheckboxGroup cbg = new CheckboxGroup();

Box box21 = Box.createHorizontalBox();

final Checkbox cb1 = new Checkbox("男", cbg, true);

     box21.add(cb1);

     box21.add(new Checkbox("女", cbg, false));

     box2.add(box21);

box2.add(Box.createVerticalStrut(8));

final JPasswordField pass1 = new JPasswordField(10);

box2.add(pass1);

box2.add(Box.createVerticalStrut(8));

final JPasswordField pass2 = new JPasswordField(10);

box2.add(pass2);

 

Box baseBox = Box.createHorizontalBox();

baseBox.add(box1);

baseBox.add(box2);

 

regDialog.setLayout(new FlowLayout());

regDialog.add(baseBox);

JButton confirm = new JButton("确定");

JButton cancel  = new JButton("取消");

regDialog.add(confirm);

regDialog.add(cancel);

regDialog.setSize(400, 200);

regDialog.setResizable(false);

regDialog.setLocationRelativeTo(null);

 

confirm.addActionListener(new ActionListener() {

 

public void actionPerformed(ActionEvent arg0) {

String sex = null;

if (cbg.getSelectedCheckbox() == cb1)

sex = "男";

else

sex = "女";

 

if (saveUserData(nameTextField.getText().trim(), sex, 

new String(pass1.getPassword()), new String(pass2.getPassword())))

regDialog.setVisible(false);

else

JOptionPane.showMessageDialog(regDialog, "输入有误,请检查", "错误提示",

JOptionPane.ERROR_MESSAGE);

}

});

cancel.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

regDialog.setVisible(false);

}

});

 }

 

 private boolean saveUserData(String name, String sex, String password1, String password2) {

  if (!password1.equals(password2)) return false;

 

  try {

RandomAccessFile out = new RandomAccessFile("user.dat", "rw");

out.seek(out.length());

out.writeUTF(name);

out.writeUTF(sex);

out.writeUTF(password1);

out.close();

} catch (IOException e) {

e.printStackTrace();

return false;

}

  return true;

 }

 

4.3执行界面:

技术分享

 

技术分享

技术分享

代码:

package jing;

 

import java.awt.BorderLayout;

import java.awt.Checkbox;

import java.awt.CheckboxGroup;

import java.awt.Color;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.io.FilenameFilter;

import java.io.IOException;

import java.io.RandomAccessFile;

import javax.swing.Box;

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;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import javax.swing.Timer;

class MyPanel extends JPanel {

int cnt = 0;

public void paint(Graphics g) {

super.paint(g);

g.setColor(Color.red);

g.fillRect(this.getWidth() - cnt, 0, cnt, this.getHeight());

}

public boolean isEnd() {

if (cnt++ > this.getWidth())

return true;

repaint();

return false;

}

}

public class LianLianKan implements ActionListener {

JFrame mainFrame; // 主面板

JDialog login;

MyPanel time;

Container thisContainer;

JPanel centerPanel, southPanel, northPanel; // 子面板

JButton diamondsButton[][] = new JButton[6][5];// 游戏按钮数组

JButton exitButton, newlyButton; // 退出,重列,重新开始按钮

JLabel fractionLable = new JLabel("0"); // 分数标签

JButton firstButton, secondButton; // 分别记录两次被选中的按钮

Timer timer;

int grid[][] = new int[8][7];// 储存游戏按钮位置

static boolean pressInformation = false; // 判断是否有按钮被选中

int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0, validateLV; // 游戏按钮的位置坐标

int i, j, k, n;// 消除方法控制

// =====================================//

// =============调用图片================//

private static Icon[] icons = new ImageIcon[6 * 5];

private static final String imgDir = "c:/img";// 这里填上图片目录全名

static {

try// 发生异常的操作

{

File dir = new File(imgDir);

File[] imgFiles = dir.listFiles(new FilenameFilter() {

public boolean accept(File dir, String name) {

return name.toLowerCase().endsWith(".jpg");

}

});

for (int i = 0; i < 10 * 10; i++) {

icons[i] = new ImageIcon(imgFiles[i].getAbsolutePath());

}

} catch (Exception e) {

e.printStackTrace();// 异常处理

}

}

public void init() {

mainFrame = new JFrame("JKJ连连看");// 设置主面板的名称为"JKJ连连看"

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 结束窗体所在的应用程序

thisContainer = mainFrame.getContentPane();// 调用getContentPane()方法得到内容面板

thisContainer.setLayout(new BorderLayout());// 设置为BorderLayout()布局

centerPanel = new JPanel();// 设置面板

southPanel = new JPanel();

northPanel = new JPanel();

northPanel.setLayout(new BorderLayout());

thisContainer.add(centerPanel, "Center");// 添加组件

thisContainer.add(southPanel, "South");

thisContainer.add(northPanel, "North");

centerPanel.setLayout(new GridLayout(6, 5));// 设置一个6*5的网格布局

for (int cols = 0; cols < 6; cols++) {

for (int rows = 0; rows < 5; rows++) {

// diamondsButton[cols][rows] = new

// JButton(String.valueOf(grid[cols + 1][rows + 1]));

// ===========设置图片=============//

diamondsButton[cols][rows] = new JButton(

icons[grid[cols + 1][rows + 1] - 1]);

diamondsButton[cols][rows].addActionListener(this);

centerPanel.add(diamondsButton[cols][rows]);

}

}

exitButton = new JButton("退出");// 退出按钮

exitButton.addActionListener(this);

// resetButton = new JButton("重列");

// resetButton.addActionListener(this);

newlyButton = new JButton("再来一局");// 再来一局按钮

newlyButton.addActionListener(this);

southPanel.add(exitButton);// 添加退出按钮

// southPanel.add(resetButton);

southPanel.add(newlyButton);// 添加再来一局按钮

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable

.getText())));

time = new MyPanel();

northPanel.add(time, BorderLayout.CENTER);

northPanel.add(fractionLable, BorderLayout.WEST);

mainFrame.setSize(500, 450);// 设置主面板的大小

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible(true);//设置窗口可见

}

public void loginDialog() {//设置登录界面

timer = new Timer(50, this);//创建时间对象

login = new JDialog();//创建对象

login.setTitle("登录");//在文本框中写入名字

login.setLayout(new FlowLayout());//添加流布局

login.add(new JLabel("用户名:"));//添加标签

final JTextField name = new JTextField(10);//设置文本框长度

login.add(name);

login.add(new JLabel("密    码:"));//添加标签

final JPasswordField password = new JPasswordField(10); //设置文本框长度

password.setEchoChar(‘*‘);//密码以*返回

login.add(password);

JButton confirm = new JButton("登录");//添加按钮

confirm.addActionListener(new ActionListener() {//设置一个监视器

public void actionPerformed(ActionEvent e) {

if (compareUserData(name.getText().trim(),

new String(password.getPassword()))) {

login.setVisible(false);

init();

timer.start();

} else {

JOptionPane.showMessageDialog(login, "用户名或密码错误!", "错误提示",

JOptionPane.ERROR_MESSAGE);

}

}

});

整个项目截图如下:

技术分享

技术分享

 

五.测试情况

代码:

package jing;

 

import static org.junit.Assert.*;

 

import org.junit.Test;

 

public class LianLianKanTest {

 

@Test

public void testMain() {

 

 Double expectedAnswer = Double.valueOf(12);

    Double actualAnswer = Double.valueOf(2*6);

    assertEquals(expectedAnswer, actualAnswer);

 

}

 

}

截图如下:

技术分享

 

六.问题及心得

这次连连看小游戏是由我和曹文静共同完成的,这个游戏是水果连连看,在这次游戏中她负责主要负责登陆界面,时间到的界面,进度条界面。我主要负责注册界面,执行界面,查找图片。我们通过上网查资料,通过一次又一次的调试我们才运行成功,测试过程中又出现了很多问题,因为请教同学才可以测试成功。

虽然很过程很痛苦,但我在编程方面又进步了不少,而且通过结对项目我懂得了合作的重要性,以后希望自己和同学们多多加油!

 

 

附录全局代码:

 

package jing;

 

import java.awt.BorderLayout;

import java.awt.Checkbox;

import java.awt.CheckboxGroup;

import java.awt.Color;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.io.FilenameFilter;

import java.io.IOException;

import java.io.RandomAccessFile;

import javax.swing.Box;

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;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

import javax.swing.Timer;

class MyPanel extends JPanel {

int cnt = 0;

public void paint(Graphics g) {

super.paint(g);

g.setColor(Color.red);

g.fillRect(this.getWidth() - cnt, 0, cnt, this.getHeight());

}

public boolean isEnd() {

if (cnt++ > this.getWidth())

return true;

repaint();

return false;

}

}

public class LianLianKan implements ActionListener {

JFrame mainFrame; // 主面板

JDialog login;

MyPanel time;

Container thisContainer;

JPanel centerPanel, southPanel, northPanel; // 子面板

JButton diamondsButton[][] = new JButton[6][5];// 游戏按钮数组

JButton exitButton, newlyButton; // 退出,重列,重新开始按钮

JLabel fractionLable = new JLabel("0"); // 分数标签

JButton firstButton, secondButton; // 分别记录两次被选中的按钮

Timer timer;

int grid[][] = new int[8][7];// 储存游戏按钮位置

static boolean pressInformation = false; // 判断是否有按钮被选中

int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0, validateLV; // 游戏按钮的位置坐标

int i, j, k, n;// 消除方法控制

// =====================================//

// =============调用图片================//

private static Icon[] icons = new ImageIcon[6 * 5];

private static final String imgDir = "c:/img";// 这里填上图片目录全名

static {

try// 发生异常的操作

{

File dir = new File(imgDir);

File[] imgFiles = dir.listFiles(new FilenameFilter() {

public boolean accept(File dir, String name) {

return name.toLowerCase().endsWith(".jpg");

}

});

for (int i = 0; i < 10 * 10; i++) {

icons[i] = new ImageIcon(imgFiles[i].getAbsolutePath());

}

} catch (Exception e) {

e.printStackTrace();// 异常处理

}

}

public void init() {

mainFrame = new JFrame("JKJ连连看");// 设置主面板的名称为"JKJ连连看"

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 结束窗体所在的应用程序

thisContainer = mainFrame.getContentPane();// 调用getContentPane()方法得到内容面板

thisContainer.setLayout(new BorderLayout());// 设置为BorderLayout()布局

centerPanel = new JPanel();// 设置面板

southPanel = new JPanel();

northPanel = new JPanel();

northPanel.setLayout(new BorderLayout());

thisContainer.add(centerPanel, "Center");// 添加组件

thisContainer.add(southPanel, "South");

thisContainer.add(northPanel, "North");

centerPanel.setLayout(new GridLayout(6, 5));// 设置一个6*5的网格布局

for (int cols = 0; cols < 6; cols++) {

for (int rows = 0; rows < 5; rows++) {

// diamondsButton[cols][rows] = new

// JButton(String.valueOf(grid[cols + 1][rows + 1]));

// ===========设置图片=============//

diamondsButton[cols][rows] = new JButton(

icons[grid[cols + 1][rows + 1] - 1]);

diamondsButton[cols][rows].addActionListener(this);

centerPanel.add(diamondsButton[cols][rows]);

}

}

exitButton = new JButton("退出");// 退出按钮

exitButton.addActionListener(this);

// resetButton = new JButton("重列");

// resetButton.addActionListener(this);

newlyButton = new JButton("再来一局");// 再来一局按钮

newlyButton.addActionListener(this);

southPanel.add(exitButton);// 添加退出按钮

// southPanel.add(resetButton);

southPanel.add(newlyButton);// 添加再来一局按钮

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable

.getText())));

time = new MyPanel();

northPanel.add(time, BorderLayout.CENTER);

northPanel.add(fractionLable, BorderLayout.WEST);

mainFrame.setSize(500, 450);// 设置主面板的大小

mainFrame.setLocationRelativeTo(null);

mainFrame.setVisible(true);//设置窗口可见

}

public void loginDialog() {//设置登录界面

timer = new Timer(50, this);//创建时间对象

login = new JDialog();//创建对象

login.setTitle("登录");//在文本框中写入名字

login.setLayout(new FlowLayout());//添加流布局

login.add(new JLabel("用户名:"));//添加标签

final JTextField name = new JTextField(10);//设置文本框长度

login.add(name);

login.add(new JLabel("密    码:"));//添加标签

final JPasswordField password = new JPasswordField(10); //设置文本框长度

password.setEchoChar(‘*‘);//密码以*返回

login.add(password);

JButton confirm = new JButton("登录");//添加按钮

confirm.addActionListener(new ActionListener() {//设置一个监视器

public void actionPerformed(ActionEvent e) {

if (compareUserData(name.getText().trim(),

new String(password.getPassword()))) {

login.setVisible(false);

init();

timer.start();

} else {

JOptionPane.showMessageDialog(login, "用户名或密码错误!", "错误提示",

JOptionPane.ERROR_MESSAGE);

}

}

});

login.add(confirm);

final JDialog regDialog = new JDialog(login, "注册", true);

registerDialog(regDialog);

JButton register = new JButton("注册");//添加按钮

register.addActionListener(new ActionListener() {//设置一个监视器

public void actionPerformed(ActionEvent e) {

regDialog.setVisible(true);

}

});

login.add(register);//添加组件

login.setSize(400, 200);//设置登录界面的尺寸

login.setResizable(false);

login.setLocationRelativeTo(null);

login.setVisible(true);//窗口可见

}

private boolean compareUserData(String name, String password) {  //异常处理

try {

RandomAccessFile out = new RandomAccessFile("user.dat", "rw");

String fname, fpassword = null;

while (out.getFilePointer() < out.length()) {

fname = out.readUTF();

out.readUTF();

fpassword = out.readUTF();

if (fname.equals(name) && fpassword.equals(password))

return true;

}

out.close();

} catch (IOException e) {

e.printStackTrace();

}

return false;

}

private void registerDialog(final JDialog regDialog) {  //方法定义

Box box1 = Box.createVerticalBox();//创建一个窗口

box1.add(new JLabel("用户名:", JLabel.RIGHT));

box1.add(Box.createVerticalStrut(10));

box1.add(new JLabel("性别:", JLabel.RIGHT));

box1.add(Box.createVerticalStrut(10));

box1.add(new JLabel("密码:", JLabel.RIGHT), -1);

box1.add(Box.createVerticalStrut(10));

box1.add(new JLabel("确认密码:", JLabel.RIGHT));//添加组件

Box box2 = Box.createVerticalBox();//创建另一个窗口

final JTextField nameTextField = new JTextField(10);//设置文本框长度

box2.add(nameTextField);

box2.add(Box.createVerticalStrut(8));//添加组件

final CheckboxGroup cbg = new CheckboxGroup();

Box box21 = Box.createHorizontalBox();

final Checkbox cb1 = new Checkbox("男", cbg, true);

box21.add(cb1);

box21.add(new Checkbox("女", cbg, false));

box2.add(box21);

box2.add(Box.createVerticalStrut(8)); //添加组件

final JPasswordField pass1 = new JPasswordField(10); //设置文本框长度

box2.add(pass1);

box2.add(Box.createVerticalStrut(8)); //添加组件

final JPasswordField pass2 = new JPasswordField(10); //设置文本框长度

box2.add(pass2); //添加组件

Box baseBox = Box.createHorizontalBox();

baseBox.add(box1);

baseBox.add(box2); //添加组件

regDialog.setLayout(new FlowLayout());//创建流布局

regDialog.add(baseBox);

JButton confirm = new JButton("确定");

JButton cancel = new JButton("取消");

regDialog.add(confirm);

regDialog.add(cancel); //添加组件

regDialog.setSize(400, 200);//设置界面的大小

regDialog.setResizable(false);

regDialog.setLocationRelativeTo(null);

confirm.addActionListener(new ActionListener() {//设置监视器

public void actionPerformed(ActionEvent arg0) {

String sex = null;

if (cbg.getSelectedCheckbox() == cb1)

sex = "男";

else

sex = "女";

if (saveUserData(nameTextField.getText().trim(), sex,

new String(pass1.getPassword()),

new String(pass2.getPassword())))

regDialog.setVisible(false);

else

JOptionPane.showMessageDialog(regDialog, "输入有误,请检查",

"错误提示", JOptionPane.ERROR_MESSAGE);

}

});

cancel.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

regDialog.setVisible(false);

}

});

}

private boolean saveUserData(String name, String sex, String password1,

String password2) {

if (!password1.equals(password2))

return false;

try {       //捕捉异常

RandomAccessFile out = new RandomAccessFile("user.dat", "rw");

out.seek(out.length());

out.writeUTF(name);

out.writeUTF(sex);

out.writeUTF(password1);

out.close();

} catch (IOException e) {   //处理异常

e.printStackTrace();

return false;

}

return true;

}

 

public void randomBuild() // 实例方法声明

{

int randoms, cols, rows; // 变量定义

for (int twins = 1; twins <= 15; twins++) {

randoms = (int) (Math.random() * 25 + 1);

for (int alike = 1; alike <= 2; alike++) {

cols = (int) (Math.random() * 6 + 1);

rows = (int) (Math.random() * 5 + 1);

while (grid[cols][rows] != 0) {

cols = (int) (Math.random() * 6 + 1);

rows = (int) (Math.random() * 5 + 1);

}

this.grid[cols][rows] = randoms;

}

}

}

public void fraction()// 方法声明

{

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable

.getText()) + 100));

}

public void reload()// 方法声明

{

int save[] = new int[30]; // 创建声明数组

int n = 0, cols, rows; // 变量定义

int grid[][] = new int[8][7]; // 创建声明数组

for (int i = 0; i <= 6; i++) {

for (int j = 0; j <= 5; j++) {

if (this.grid[i][j] != 0) {

save[n] = this.grid[i][j];

n++;

}

}

}

n = n - 1;

this.grid = grid; // this出现在实例方法中,表示使用该方法的当前对象

while (n >= 0) // while循环

{

cols = (int) (Math.random() * 6 + 1);

rows = (int) (Math.random() * 5 + 1);

while (grid[cols][rows] != 0)// 循环嵌套

{

cols = (int) (Math.random() * 6 + 1);

rows = (int) (Math.random() * 5 + 1);

}

this.grid[cols][rows] = save[n]; // this出现在实例方法中,表示使用该方法的当前对象

n--;

}

mainFrame.setVisible(false);// 窗口不可见

pressInformation = false; // 这里一定要将按钮点击信息归为初始

init();

for (int i = 0; i < 6; i++)// for循环

{

for (int j = 0; j < 5; j++)// 循环嵌套

{

if (grid[i + 1][j + 1] == 0)

diamondsButton[i][j].setVisible(false);// 窗口不可见

}

}

}

public void estimateEven(int placeX, int placeY, JButton bz)// 有参数的实例方法

{

if (pressInformation == false)// 选择语句

{

x = placeX;

y = placeY;

secondMsg = grid[x][y];

secondButton = bz;

pressInformation = true;

} else {

x0 = x;

y0 = y;

fristMsg = secondMsg;

firstButton = secondButton;

x = placeX;

y = placeY;

secondMsg = grid[x][y];

secondButton = bz;

if (fristMsg == secondMsg && secondButton != firstButton) {

xiao();

}

}

}

 

public void xiao() // 相同的情况下能不能消去。

{

if ((x0 == x && (y0 == y + 1 || y0 == y - 1))

|| ((x0 == x + 1 || x0 == x - 1) && (y0 == y)))// 判断是否相邻

{

remove();

} else {

for (j = 0; j < 7; j++) {

if (grid[x0][j] == 0)// 判断第一个按钮同行哪个按钮为空

{

if (y > j) // 如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边

{

for (i = y - 1; i >= j; i--)// 判断第二按钮左侧直到第一按钮中间有没有按钮

{

if (grid[x][i] != 0) {

k = 0;

break;

} else {

k = 1;

} // K=1说明通过了第一次验证

}

if (k == 1) {

linePassOne();

}

}

if (y < j) // 如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边

{

for (i = y + 1; i <= j; i++)// 判断第二按钮左侧直到第一按钮中间有没有按钮

{

if (grid[x][i] != 0) {

k = 0;

break;

} else {

k = 1;

}

}

if (k == 1) {

linePassOne();

}

}

if (y == j) {

linePassOne();

}

}

if (k == 2) {

if (x0 == x) {

remove();

}

if (x0 < x) {

for (n = x0; n <= x - 1; n++) {

if (grid[n][j] != 0) {

k = 0;

break;

}

if (grid[n][j] == 0 && n == x - 1) {

remove();

}

}

}

if (x0 > x) {

for (n = x0; n >= x + 1; n--) {

if (grid[n][j] != 0) {

k = 0;

break;

}

if (grid[n][j] == 0 && n == x + 1) {

remove();

}

}

}

}

}

for (i = 0; i < 8; i++)// 列

{

if (grid[i][y0] == 0) {

if (x > i) {

for (j = x - 1; j >= i; j--) {

if (grid[j][y] != 0) {

k = 0;

break;

} else {

k = 1;

}

}

if (k == 1) {

rowPassOne();

}

}

if (x < i) {

for (j = x + 1; j <= i; j++) {

if (grid[j][y] != 0) {

k = 0;

break;

} else {

k = 1;

}

}

if (k == 1) {

rowPassOne();

}

}

if (x == i) {

rowPassOne();

}

}

if (k == 2) {

if (y0 == y) {

remove();

}

if (y0 < y) {

for (n = y0; n <= y - 1; n++) {

if (grid[i][n] != 0) {

k = 0;

break;

}

if (grid[i][n] == 0 && n == y - 1) {

remove();

}

}

}

if (y0 > y) {

for (n = y0; n >= y + 1; n--) {

if (grid[i][n] != 0) {

k = 0;

break;

}

if (grid[i][n] == 0 && n == y + 1) {

remove();

}

}

}

}

}

}

}

public void linePassOne() {

if (y0 > j)// 第一按钮同行空按钮在左边

{

for (i = y0 - 1; i >= j; i--)// 判断第一按钮同左侧空按钮之间有没按钮

{

if (grid[x0][i] != 0) {

k = 0;

break;

} else {

k = 2;

} // K=2说明通过了第二次验证

}

}

if (y0 < j)// 第一按钮同行空按钮在与第二按钮之间

{

for (i = y0 + 1; i <= j; i++) {

if (grid[x0][i] != 0) {

k = 0;

break;

} else {

k = 2;

}

}

}

}

public void rowPassOne() {

if (x0 > i) {

for (j = x0 - 1; j >= i; j--) {

if (grid[j][y0] != 0) {

k = 0;

break;

} else {

k = 2;

}

}

}

if (x0 < i) {

for (j = x0 + 1; j <= i; j++) {

if (grid[j][y0] != 0) {

k = 0;

break;

} else {

k = 2;

}

}

}

}

public void remove() {

firstButton.setVisible(false); // 不可见

secondButton.setVisible(false);

fraction();

pressInformation = false;

k = 0;

grid[x0][y0] = 0;

grid[x][y] = 0;

}

public void actionPerformed(ActionEvent e) {   //接口实现

if (e.getSource() == newlyButton) {

int grid[][] = new int[8][7];//创建数组

this.grid = grid;

randomBuild();

mainFrame.setVisible(false);//窗口不可见

pressInformation = false;

init();

}

if (e.getSource() == exitButton)

System.exit(0);

if (e.getSource() == timer) {

if (time.isEnd()) {

timer.stop();//时间到的提示

if (JOptionPane.showConfirmDialog(mainFrame,

"时间到了,o(︶︿︶)o \n要再来一局吗?", "提示",

JOptionPane.YES_NO_OPTION)== JOptionPane.OK_OPTION) {

int grid[][] = new int[8][7];

this.grid = grid;

randomBuild();

mainFrame.setVisible(false);//窗口不可见

pressInformation = false;

init();

timer.start();//启动线程

} else

System.exit(0);

}

}

for (int cols = 0; cols < 6; cols++) {

for (int rows = 0; rows < 5; rows++) {

if (e.getSource() == diamondsButton[cols][rows])

estimateEven(cols + 1, rows + 1, diamondsButton[cols][rows]);

}

}

}

public static void main(String[] args) {//主函数

LianLianKan llk = new LianLianKan();//创建对象

llk.randomBuild();//调用方法

llk.loginDialog();//调用方法

}

}

 

结对项目实验报告

标签:

原文地址:http://www.cnblogs.com/chudachuer/p/4510384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!