java 类

 

package com.lei3;
import javax.swing.*;
import javax.swing.plaf.FontUIResource;

import java.awt.event.*;//ActionListener方法需要导入此包
import java.util.ArrayList;
import java.util.List;
import java.awt.*;//Graphics绘画方法需要导入此包
public class GamePanel extends 	JPanel implements ActionListener{//用到继承类JPanel需要导入包javax.swing.*
	private JMenuBar jmb = null;
	private GameFrame mainFrame = null;
	private  GamePanel panel = null;
	private int[][] board = new int [16][16];//注意数组初始化
	public final int ROWS = 15;//行
	public final int COLS = 15;//列
	
	private String gameFlag = "start";//游戏状态
	//创建指示器二维数组
	public Pointer[][] pointers = new Pointer[ROWS][COLS];
//	private List qizis = new  ArrayList();
//	存棋子的集合
	public List<Qizi> qizis = new ArrayList<Qizi>();public GamePanel() {
		// TODO Auto-generated constructor stub
	}
	//构造方法
	public GamePanel(GameFrame mainFrame) {
		this.setLayout(null);
		this.setOpaque(false);
		this.mainFrame = mainFrame;
		this.panel = this;
//		图片的加载
		ImageValue.init();
		//创建菜单
		createMenu();
		//创建鼠标监听
		createMouseListener();
		//数组内容
        createPointers();	  	
	}
	
	private void createPointers() {
		int x = 0;
		int y = 0;
		int start = 26;
		Pointer pointer;
		for(int i=0;i<ROWS;i++) {
			for(int j=0;j<COLS;j++) {
				x=j*40+start;
				y=i*40+start;
				pointer = new Pointer(i,j,x,y);
				pointers[i][j] = pointer;
			}
		}
		// TODO Auto-generated method stub
		
	}
    int t1=1,k,t2=2;//作为模式选择的判断
//    方法实现清理前一步AI落子的标记
    private void clearAIList() {
    	Qizi qizi;
    	for(int i=0;i<qizis.size();i++) {
    		qizi = qizis.get(i);
    		if(qizi!=null&&qizi.getType()==1) {
    			qizi.setLast(false);
    		}
    	}
		// TODO Auto-generated method stub
		
	}

	private void createMouseListener() {
		MouseAdapter mouseAdapter = new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if(!"start".equals(gameFlag)) return ;
				//获取鼠标坐标
				int x = e.getX();
				int y = e.getY();
				//循环指示器二维数组
				Pointer pointer;
				
				
				for(int i=0;i<ROWS;i++) {
					for(int j=0;j<COLS;j++) {
						pointer = pointers[i][j];
					}
				}
				for(int i=0;i<ROWS;i++) {
					for(int j=0;j<COLS;j++) {
						board[i][j] = 0;
						//得到每一个指示器对象
						pointer = pointers[i][j];
						if(pointer.isPoint(x, y)&&pointer.getType()==0) {
//							System.out.println("落子");
							if(mode!=0)
							{
								Qizi qizi = new Qizi(pointer.getX(),pointer.getY(),t2);
								
//								添加棋子
							    qizis.add(qizi);
							    pointer.setType(2);
							    board[j][i] = t2;//没下一个棋子 就标注出对应位置的颜色 0表示没棋子 1表示白棋 2 表示黑棋
							
							}
							if(mode==1) {
								k = t1;
							t1 = t2;
							t2 = k;
							}	
					
							clearAIList();
							//重绘画布
							repaint();
//							电脑下下一步
							if(mode==2)
							{
								AI.next(panel);
								board[j][i] = 1;//电脑下白棋 用1表示
								if(AI.has5(pointer, panel)) {//你已经成功了
									
								}
								
		
							}
							
//							System.out.println(j+" "+i+" "+board[j][i]);
							return ;
						}
					    
					}
				}
				//重绘画布
				repaint();
			//	System.out.println("鼠标移动");
			}

			
		};
		//添加鼠标监听
		addMouseMotionListener(mouseAdapter);
		addMouseListener(mouseAdapter);
		
		// TODO Auto-generated method stub
	}
	
    @Override
	public void paint(Graphics g) {
		super.paint(g);
		//绘制棋盘格子
		drawGrid(g);
		//绘制五个小黑点
		deaw5Point(g);
		//绘制指示器
		drawPointer(g);
//		绘制棋子
		drawQizi(g);
	}
//    绘制棋子
	private void drawQizi(Graphics g) {
		Qizi qizi;
		for(int i=0;i<qizis.size();i++) {
			qizi = (Qizi) qizis.get(i);
			qizi.draw(g); 
		}
		// TODO Auto-generated method stub
		
	}

	//绘制指示器
	private void drawPointer(Graphics g) {
		Pointer pointer;
		for(int i=0;i<ROWS;i++) {
			for(int j=0;j<COLS;j++) {
				pointer = pointers[i][j];
				if(pointer!=null) {
					pointer.draw(g);
				}
			}
		}
		// TODO Auto-generated method stub
		
	}
 //绘制五个小黑点
	private void deaw5Point(Graphics g) {
		//绘制第一个点(左上)
		int x = 142;
		int y = 142;
		g.fillArc(x,y,8,8,0,360);
		//绘制第二个点(右上)
		x=462;
		g.fillArc(x,y,8,8,0,360);
		//绘制第三个点(左下)
		x = 142;
		y = 462;
		g.fillArc(x,y,8,8,0,360);
		//绘制第四个点(右下)
		x = 462;
		g.fillArc(x,y,8,8,0,360);
		//绘制第五个点(居中)
		x = 302;
		y = 302;
		g.fillArc(x,y,8,8,0,360);
		// TODO Auto-generated method stub
		
	}

	//绘制棋盘格子
	private void drawGrid(Graphics g) {
		int start = 26;
		int x1 = 26;
		int y1 = 26;
		int x2 = 586;
		int y2 = 26;
		int dis = 40;
		for(int i=0;i<ROWS;i++)
		{
		    y1 = i*dis+start;
		    y2 = y1;
			g.drawLine(x1,y1,x2,y2);
		}
		 y1 = 26;
		 x2 = 586;
		for(int i=0;i<COLS;i++) {
			x1 = i*dis+start;
			x2 = x1;
			g.drawLine(x1,y1,x2,y2);
		}
		// TODO Auto-generated method stub
		
	}
	//创建菜单
	public void createMenu() {
		jmb = new JMenuBar();

		JMenu jMenu1 = new JMenu("菜单");
		//创建菜单选项
		
		JMenu jMenu2 = new JMenu("帮助");
		//创建帮助
	
		JMenuItem jmi1 = new JMenuItem("单机模式");
		
		JMenuItem jmi2 = new JMenuItem("人机模式");
		
		JMenuItem jmi3 = new JMenuItem("重新开始");
		
		JMenuItem jmi4 = new JMenuItem("退出");
		
		JMenuItem jmi5 = new JMenuItem("操作帮助");
		
		JMenuItem jmi6 = new JMenuItem("获胜条件");
		
		//在菜单项中添加选项
		jMenu1.add(jmi1);
		jMenu1.add(jmi2);
		jMenu1.add(jmi3);
		jMenu1.add(jmi4);
		//在帮助中添加选项
		jMenu2.add(jmi5);
		jMenu2.add(jmi6);
		
		jmb.add(jMenu1);
		jmb.add(jMenu2);
		
		
		mainFrame.setJMenuBar(jmb);
		
		//添加监听
		jmi1.addActionListener(this);
		jmi2.addActionListener(this);
		jmi3.addActionListener(this);
		jmi4.addActionListener(this);
		jmi5.addActionListener(this);
		jmi6.addActionListener(this);
		//设置指令
		jmi1.setActionCommand("danji");
		jmi2.setActionCommand("renji");
		jmi3.setActionCommand("restart");
		jmi4.setActionCommand("exit");
		jmi5.setActionCommand("help");
		jmi6.setActionCommand("win");
	}
	int mode=0;
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("菜单子项被点击了");
		String command = e.getActionCommand();
		System.out.println(command);
		String s1 = "exit";
		String s2 = "danji";
		String s3 = "renji";
		if(s1==command) {
			System.out.println("退出游戏");
		}
		if(s2 == command) {
			mode=1;
		}
		if(s3==command) {
			mode=2;
		}
		// TODO Auto-generated method stub
		
	}
	//黑棋获胜 
	public void blackWin() {
		gameFlag = "end";
		//弹出游戏提示
		UIManager.put("OptionPane.buttonFont", new FontUIResource(new Font("思源宋体",Font.ITALIC,18)));
		UIManager.put("OptionPane.messageFont", new FontUIResource(new Font("思源宋体",Font.ITALIC,18)));
		JOptionPane.showMessageDialog(mainFrame, "恭喜 黑棋获胜");
	}
	//白棋获胜
	public void whiteWin() {
		gameFlag = "end";
		//弹出游戏提示
		UIManager.put("OptionPane.buttonFont", new FontUIResource(new Font("思源宋体",Font.ITALIC,18)));
		UIManager.put("OptionPane.messageFont", new FontUIResource(new Font("思源宋体",Font.ITALIC,18)));
		JOptionPane.showMessageDialog(mainFrame, "恭喜 白棋获胜");
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值