简易版井字棋 (MouseListener需重写所有函数&&数组对象设置监听方法)

【注意】必须重写所有的5个函数【注意】数组对象用循环设置监听时应这样使用,若用i则会使在该类中,只对jlb[9]起作用,即只获取当前i的值
摘要由CSDN通过智能技术生成

转载请标明出处:http://blog.csdn.net/idealism_xxm/article/details/50279075,本文出自: 【idealism_xxm的博客】

 

虽然C++都学过,但是 Introduction to Java Programming 前十一章基本都认真看过了,还做了少部分题...

虽然只学了各种基本组件,但是终于可以编界面程序了。

自己查了一下设置监听的方法,做了一个简易版井字棋,由于只为熟悉各种用法,所以电脑采取随机下子

图片是截取pdf的...

 

 

 

import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Tic_tac_toe extends JFrame{
	JLabel[] jlb=new JLabel[9];
	int clicked=0,i;
	ImageIcon x=new ImageIcon("x.png");
	ImageIcon o=new ImageIcon("o.png");
	public Tic_tac_toe() {
		setSize(67*3+15,67*3+15);
		setLayout(new GridLayout(3,3,5,5));
		for(i=0;i<9;++i) {
			jlb[i]=new JLabel();
			jlb[i].addMouseListener(new MouseListener() {//【注意】必须重写所有的5个函数
				int id=i;//【注意】数组对象用循环设置监听时应这样使用,若用i则会使在该类中,只对jlb[9]起作用,即只获取当前i的值
				@Override
				public void mouseClicked(MouseEvent e) {
					if(jlb[id].getIcon()==null) {//判断下棋子地方是否合法
						jlb[id].setIcon(x);
						if(Judge()) {
							JOptionPane.showMessageDialog(null,"You win!", "Congratulation", JOptionPane.PLAIN_MESSAGE, null);
							init();
						}
						else {
							if(++clicked==5) {
								JOptionPane.showMessageDialog(null,"Please try again!", "Draw", JOptionPane.PLAIN_MESSAGE, null);
								init();
							}
							else {//电脑随机下
								int index=((int)(Math.random()*9))%9;
								while(jlb[index].getIcon()!=null)
									index=((int)(Math.random()*9))%9;
								jlb[index].setIcon(o);
								if(Judge()) {
									JOptionPane.showMessageDialog(null,"You lose!", "What a pity", JOptionPane.PLAIN_MESSAGE, null);
									init();
								}
							}
						}
					}
					else
						JOptionPane.showMessageDialog(null,"Please select another!", "Illegal", JOptionPane.INFORMATION_MESSAGE, null);
				}
				
				@Override
				public void mouseEntered(MouseEvent e) {
					
				}
				
				@Override
				public void mousePressed(MouseEvent e) {
					
				}
				
				@Override
				public void mouseReleased(MouseEvent e) {
					
				}
				
				@Override
				public void mouseExited(MouseEvent e) {
					
				}
			});
			add(jlb[i]);
		}
		setResizable(false);
		setLocationRelativeTo(null);
		setVisible(true);
	}
	
	boolean Judge() {//判断当前局面是否有人赢
		if( (jlb[0].getIcon()!=null&&jlb[0].getIcon()==jlb[4].getIcon()&&jlb[0].getIcon()==jlb[8].getIcon())||
			(jlb[0].getIcon()!=null&&jlb[0].getIcon()==jlb[1].getIcon()&&jlb[0].getIcon()==jlb[2].getIcon())||
			(jlb[0].getIcon()!=null&&jlb[0].getIcon()==jlb[3].getIcon()&&jlb[0].getIcon()==jlb[6].getIcon())||
			(jlb[1].getIcon()!=null&&jlb[1].getIcon()==jlb[4].getIcon()&&jlb[1].getIcon()==jlb[7].getIcon())||
			(jlb[2].getIcon()!=null&&jlb[2].getIcon()==jlb[5].getIcon()&&jlb[2].getIcon()==jlb[8].getIcon())||
			(jlb[2].getIcon()!=null&&jlb[2].getIcon()==jlb[4].getIcon()&&jlb[2].getIcon()==jlb[6].getIcon())||
			(jlb[3].getIcon()!=null&&jlb[3].getIcon()==jlb[4].getIcon()&&jlb[3].getIcon()==jlb[5].getIcon())||
			(jlb[6].getIcon()!=null&&jlb[6].getIcon()==jlb[7].getIcon()&&jlb[6].getIcon()==jlb[8].getIcon()))
			return true;
		return false;
	}
	
	void init() {
		clicked=0;
		for(int j=0;j<9;++j)
			jlb[j].setIcon(null);
	}
	
	public static void main(String[] argv) {
		new Tic_tac_toe();
	}
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值