⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clockpanel.java

📁 完成黑白棋的开发
💻 JAVA
字号:
package BlackAndWhite;
import BlackAndWhite.*;

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.lang.*;

public class ClockPanel 
extends JPanel implements Observer{
	private static final int totalTime=90;
	private boolean turned;
	private boolean wait;
	private ImageIcon digit[]=new ImageIcon[10];
	private GregorianCalendar time;
	private int oldTime,currentTime;
	private int leftTime;
	private Object lock=new Object();
	private int currentP;
	private Chessboard cb;
	
	public ClockPanel(Chessboard cb){
		wait=true;
		turned=false;
		time=new GregorianCalendar();
		for(int i=0;i<10;i++){
			digit[i]=new ImageIcon("Images/CLOCK"+i+".GIF");
		} 
		synchronized(lock){
			oldTime=currentTime=time.get(Calendar.SECOND);
			leftTime=totalTime;
		}
		this.cb=cb;
		cb.addObserver(this);
		setPreferredSize(new Dimension(200, 60));
	}
	
	public synchronized void paint(Graphics g){
		super.paint(g);
		if(wait){
			g.setFont(new Font("Dialog",Font.BOLD,20));
			g.drawString("黑白棋",60,40);
		}
		else if(turned){
			time=new GregorianCalendar();
			currentTime=time.get(Calendar.SECOND);
			synchronized(lock){
				if(currentTime!=oldTime)
					leftTime--;
				if(leftTime<0)leftTime=0;
			}
			oldTime=currentTime;			
			g.setFont(new Font("Dialog",Font.BOLD,20));
			g.drawString("剩余时间:",20,40);
			synchronized(lock){
				if(leftTime<0){
					g.drawImage(digit[0].getImage(),130,0,25,50,this);
					g.drawImage(digit[0].getImage(),160,0,25,50,this);
				}
				if(leftTime<10){
					g.drawImage(digit[0].getImage(),130,0,25,50,this);
					g.drawImage(digit[leftTime].getImage(),160,0,25,50,this);
				}
				else{
					g.drawImage(digit[leftTime/10].getImage(),130,0,25,50,this);
					g.drawImage(digit[leftTime%10].getImage(),160,0,25,50,this);
				}
			}
		}
		else{
			time=new GregorianCalendar();
			currentTime=time.get(Calendar.SECOND);
			synchronized(lock){
				if(currentTime!=oldTime)
					leftTime--;
			}
			oldTime=currentTime;
			g.setFont(new Font("Dialog",Font.BOLD,20));
			String s="";
			for(int i=0;i<=((totalTime-leftTime)%6);i++)
				s+=".";
			g.drawString("等待对方下棋"+s,30,40);
		}
	}
	
	public synchronized void update(Observable o, Object arg){
		synchronized(lock){
			leftTime=totalTime;
		}
		if(currentP==cb.currentP)
			turned=true;
		else
			turned=false;
		repaint();
	}
	
	public synchronized void setTurned(boolean t){
		turned=t;
	}
	
	public synchronized void setWait(boolean w){
		wait=w;
	}
	
	public synchronized void reset(){		
		wait=true;
		turned=false;
		synchronized(lock){
			leftTime=totalTime;
		}
		repaint();
	}

	public void restart(){
		reset();
	}
	
	public void start(int p){
		time=new GregorianCalendar();
		oldTime=currentTime=time.get(Calendar.SECOND);
		wait=false;
		currentP=p;
		if(currentP==cb.currentP)
			turned=true;
		else
			turned=false;
		repaint();
	}
	
	public int getLT(){
		synchronized(lock){
			return leftTime;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -