package com.main;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Button;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
public class MainWindow {
protected static Shell shlTurnaround = new Shell(SWT.MIN);;
public static int mapSize=8;//设置游戏绘制方格的数目,默认8*8
public static int time=30;//设置超时时间,默认30S
public static int retime=30;//再设一个时间变量
public static int pattern=1;//游戏模式,人机(1)/人人(2),默认人机(1)
public static int mode=1;//反转模式,八方(0),垂直(1),对角(2),随机(3)
public static String userOnePath="./pictures/guishou.jpg";//玩家一的图片路径
public static String userTwoPath="./pictures/xiaobai.jpg";//玩家二的图片路径
public static int whoseTurn=0;//该谁下
public static int[] allFlag;//标识数组,用于记录所有Label的反转情况,0为未反转,1为已反转
private Label lblNewLabel;//玩家一头像标签
private Label lblNewLabel_1;//玩家二头像标签
private Label label_1 ;//显示该那个玩家下
public static Label label_3 ;//显示剩余时间
private boolean isNotLastOne=true;//是否不是最后一步
private Label lblNewLabel_2;//翻开方向
public static Label lblNewLabel_3;//翻开方向
private Label lblNewLabel_4;//显示电脑点击的位置
private Button button;//开始游戏
private Button button_1;//游戏设置
private Button button_2;//游戏规则
private Button button_3;//关于
private Button button_4;//退出
private Composite composite;//绘图区
private Thread thread;//计时线程
private Timer timer;//计时线程
private Image imageOne=new Image(shlTurnaround.getDisplay(), userOnePath);//图片一
private Image imageTwo=new Image(shlTurnaround.getDisplay(), userTwoPath);//图片二
private Rule rule;//规则对话框
private About about;//关于对话框
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
// File picOne=new File(userOnePath);
// File picTwo=new File(userTwoPath);
// if(picOne.exists()&&picTwo.exists())
// {
MainWindow window = new MainWindow();
window.open();
// }
// else
// {
// MessageDialog.openError(shlTurnaround, "错误提示", "图片文件丢失!\n请在根目录下创建pictures/guishou.jpg和pictures/xiaobai.jpg");
// }
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shlTurnaround.open();
shlTurnaround.pack();
shlTurnaround.layout();
while (!shlTurnaround.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
shlTurnaround.dispose();
}
/**
* Create contents of the window.
*/
protected void createContents() {
shlTurnaround.setSize(794, 694);
shlTurnaround.setText("TurnAround");
Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();
shlTurnaround.setLocation((scrSize.width-shlTurnaround.getSize().x)/2, (scrSize.height-shlTurnaround.getSize().y)/2);
shlTurnaround.setLayout(new FormLayout());
composite = new Composite(shlTurnaround, SWT.NONE);
FormData fd_composite = new FormData();
fd_composite.right = new FormAttachment(0, 570);
fd_composite.top = new FormAttachment(0, 70);
fd_composite.left = new FormAttachment(0, 10);
composite.setLayoutData(fd_composite);
composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_GRAY));
Group group = new Group(shlTurnaround, SWT.NONE);
fd_composite.bottom = new FormAttachment(group, -10, SWT.BOTTOM);
FormData fd_group = new FormData();
fd_group.bottom = new FormAttachment(0, 630);
fd_group.right = new FormAttachment(0, 762);
fd_group.top = new FormAttachment(0, 70);
fd_group.left = new FormAttachment(0, 603);
group.setLayoutData(fd_group);
group.setText("游戏相关");
button = new Button(group, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
//绘图
GridLayout grid=new GridLayout();
grid.numColumns=mapSize;
grid.horizontalSpacing=2;
grid.verticalSpacing=2;
composite.setLayout(grid);
final MyLabel[] label=new MyLabel[mapSize*mapSize];
for(Control c:composite.getChildren())
{
c.dispose();
}
// composite.pack();
for(int i=0;i<mapSize*mapSize;i++)
{
label[i]=new MyLabel(composite, SWT.BORDER, i);
if(mapSize==8)
{
//label[i].setText("\t \n\n\n\n\n");60
label[i].setBounds(((i%8)+1)*3+(i%8)*66, ((i/8)+1)*2+(i/8)*66, 66, 66);
label[i].setPicSize(66, 66);
}
if(mapSize==10)
{
// label[i].setText("\t\n\n\n\n");48
label[i].setBounds(((i%10)+1)*3+(i%10)*52, ((i/10)+1)*2+(i/10)*52, 52, 52);
label[i].setPicSize(52, 52);
}
if(mapSize==12)
{
// label[i].setText(" \n\n\n");38
label[i].setBounds(((i%12)+1)*3+(i%12)*43, ((i/12)+1)*2+(i/12)*43, 43, 43);
label[i].setPicSize(43, 43);
}
label[i].setImage(imageOne);
// labe.drawImage(1, imageOne);
//给每个label添加监听器
label[i].addMouseListener(new MyMouseListener(i) {
@Override
public void mouseUp(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDown(MouseEvent e) {
// TODO Auto-generated method stub
// System.out.println("你点击了"+getNumber());
Image pic;//声明用于加载的图片
if(whoseTurn==0)//如果是用户一,加载他的图片
{
pic=imageOne;
}
else//否则加载用户二的图片
{
pic=imageTwo;
}
int num=getNumber();//获取点击时本标签的num
clickTurnArround(num);//调用反转函数反转点击的Label
afterClick(num,pic);
if(pattern==1&&!isOver(allFlag))
{
pToC();
}
}//public void mouseDown(MouseEvent e)
@Override
public void mouseDoubleClick(MouseEvent e) {
// TODO Auto-generated method stub
}
});
}
// composite.pack();
button.setEnabled(false);
button_1.setEnabled(false);
lblNewLabel.setEnabled(false);
lblNewLabel.redraw();
lblNewLabel_1.setEnabled(false);
lblNewLabel_1.redraw();
//初始化计时线程并启动
timer=new Timer();
thread=new Thread(timer);
thread.start();
allFlag=new int[mapSize*mapSize];//初始Label化标识数组
//初始化方向
if(mode==0)
{
lblNewLabel_3.setText("↑↓←→↖↗↙↘");
}
if(mode==1)
{
lblNewLabel_3.setText("↑↓←→");
}
if(mode==2)
{
lblNewLabel_3.setText("↖↗↙↘");
}
if(mode==3)
{
lblNewLabel_3.setText("?");
}
if(whoseTurn==1&&pattern==1)
{
pToC();
}
}//点击函数
});
b