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

📄 mainpanel.java~268~

📁 别人的大作
💻 JAVA~268~
字号:
package poker;

/**
 * <p>Title: 斗地主</p>
 * <p>Description: 面板类</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author 李艳生
 * @version 1.0
 */
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import java.io.PrintStream;
import javax.swing.JComponent;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.util.Vector;
import java2d.AnimatingControlsSurface;
import java2d.CustomControls;


public class MainPanel extends JPanel implements Runnable{
	Thread thread;
	//出牌音乐
	private Sound postsound = new Sound("post.wav");

	int x1, y1;
	int x2, y2;
	int x3, y3;
	//two玩家的每张牌的坐标
	int twoX[] = new int[20];
	int twoY[] = new int[20];
	//two玩家的每张牌的状态:false:没有选中
	boolean twoStatus[] = new boolean[20];

    public MainPanel() {
		try {
			jbInit();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
    }

	public void run(){
		while(true){
			if(PokerKernal.posted){
				repaint();
				//延时3秒
				delay(3000);
				//叫牌,并找出最终拿牌人
				callPoker();
				PokerKernal.posted = false;
				repaint();
			}
			if(PokerKernal.take){
				repaint();
				//延时3秒
				delay(3000);
				//把底牌给地主
				CardOperation.takeLow();
				repaint();
				PokerKernal.take = false;
			}
		}
	}

	//延时
	public void delay(int time){
		try{
			thread.sleep(time);
		}
		catch(Exception e){}
	}

	//叫牌,并找出最终拿牌人
	public  void callPoker(){
		CallPokerDialog cpd = new CallPokerDialog();
		//叫牌
		if(PokerKernal.master.equalsIgnoreCase("one")){
			//根据手中的牌来叫牌
			PokerKernal.one.call = 1;
			PokerKernal.score = 1;
			cpd.show();
			if(PokerKernal.score<3){
				//根据手中的牌来叫牌
				PokerKernal.score = 3;
				PokerKernal.three.call = 3;
			}
		}
		else if(PokerKernal.master.equalsIgnoreCase("two")){
			cpd.show();
			if(PokerKernal.score<3){
				//根据手中的牌来叫牌
				PokerKernal.one.call = 2;
				PokerKernal.score = 2;
			}
			if(PokerKernal.score<3){
				//根据手中的牌来叫牌
				PokerKernal.score = 3;
				PokerKernal.three.call = 3;
			}
		}
		if(PokerKernal.master.equalsIgnoreCase("three")){
			PokerKernal.three.call = 1;
			PokerKernal.score = 1;
			cpd.show();
			if(PokerKernal.score<3){
				PokerKernal.score = 3;
				PokerKernal.one.call = 3;
			}
		}
		//确定拿牌人
		int one = PokerKernal.one.call;
		int two = PokerKernal.two.call;
		int three = PokerKernal.three.call;

		if((one>three)&&(one>two)){
			PokerKernal.master = "one";
		}
		else if((two>one)&&(two>three)){
			PokerKernal.master = "two";
		}
		else if((three>one)&&(three>two)){
			PokerKernal.master = "three";
		}

		PokerKernal.take = true;
	}

	public void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;

		//判断游戏状态
		if(PokerKernal.status){
			//理牌
			PokerKernal.sortOneCards();
			PokerKernal.sortTwoCards();
			PokerKernal.sortThreeCards();

			//显示地主
			displayMaster(g2);
			//输入玩家信息
			displayPlayer(g2);
			//显示最初发的牌
			displayFirst(g2);
		}
	}

	//显示最初发的牌
	public void displayFirst(Graphics2D g2){
		x1 = 10;y1 = 60;
		y2 = 415;
		x3 = 712; y3 = 60;

		for (int i = 0; i < 17; i++) {
			if (PokerKernal.master.equalsIgnoreCase("one")) {
				//g2.drawImage( ( (Card) PokerKernal.oneCards.get(i)).getImg(), x1, y1, 71, 96, null);
				g2.drawImage(((Card)CardOperation.cards.get(54)).getImg(),x1,y1,71,96,null);
				y1 += 15;
				//g2.drawImage(((Card)CardOperation.cards.get(54)).getImg(),330,130, 71, 96, null);
				g2.drawImage( ( (Card) PokerKernal.twoCards.get(i)).getImg(), twoX[i], twoY[i], 71, 96, null);
				g2.drawImage( ( (Card) PokerKernal.threeCards.get(i)).getImg(), x3, y3, 71, 96, null);
				y3 += 15;
			}
			else if (PokerKernal.master.equalsIgnoreCase("two")) {
				g2.drawImage( ( (Card) PokerKernal.twoCards.get(i)).getImg(),twoX[i], twoY[i], 71, 96, null);
				g2.drawImage( ( (Card) PokerKernal.threeCards.get(i)).getImg(), x3, y3, 71, 96, null);
				y3 += 15;
				//g2.drawImage( ( (Card) PokerKernal.oneCards.get(i)).getImg(), x1, y1, 71, 96, null);
				g2.drawImage(((Card)CardOperation.cards.get(54)).getImg(),x1,y1,71,96,null);
				y1 += 15;
			}
			else if (PokerKernal.master.equalsIgnoreCase("three")) {
				g2.drawImage( ( (Card) PokerKernal.threeCards.get(i)).getImg(), x3, y3, 71, 96, null);
				y3 += 15;
				//g2.drawImage( ( (Card) PokerKernal.oneCards.get(i)).getImg(),x1, y1, 71, 96, null);
				g2.drawImage(((Card)CardOperation.cards.get(54)).getImg(),x1,y1,71,96,null);
				y1 += 15;
				g2.drawImage( ( (Card) PokerKernal.twoCards.get(i)).getImg(), twoX[i], twoY[i], 71, 96, null);
			}
		}
        //显示底牌
		if(PokerKernal.takelow){
			if(PokerKernal.master.equalsIgnoreCase("one")){
				for (int i = 0; i < 3; i++) {

				}
			}
		}
		else{
			displayLow(g2);
		}
	}

	//显示地主的图像
	public void displayMaster(Graphics2D g2){
		String master = PokerKernal.master;
		Image img = null;

		if(master.equalsIgnoreCase("one")){
			img = PokerKernal.one.image;
		}
		else if(master.equalsIgnoreCase("two")){
			img = PokerKernal.two.image;
		}
		else if(master.equalsIgnoreCase("three")){
			img = PokerKernal.three.image;
		}

		g2.drawImage(img,(800-71)/2, 0, 71,54, null);
		//g2.drawString(String.valueOf(PokerKernal.score), 300,70);
	}

	//输出玩家信息
	public void displayPlayer(Graphics2D g2){
		//输出玩家信息
		//g2.drawString(PokerKernal.one.name,10,40);
		g2.drawImage(PokerKernal.one.image, x1, 0, 71, 54, null);

		//g2.drawString(PokerKernal.three.name,695,40);
		g2.drawImage(PokerKernal.three.image, x3, 0, 71, 54, null);

		//g2.drawString(PokerKernal.two.name, 365,480);
		g2.drawImage(PokerKernal.two.image, x1, y2 + 42, 71, 54, null);
		g2.drawImage(PokerKernal.two.image, x3, y2 + 42, 71, 54, null);
	}

	//显示底牌
	public void displayLow(Graphics2D g2){
		//是否明底牌
		if(PokerKernal.take){
			g2.drawImage( ( (Card) CardOperation.cards.get(51)).getImg(), 280,
						 130, 71, 96, null);
			g2.drawImage( ( (Card) CardOperation.cards.get(52)).getImg(), 365,
						 130, 71, 96, null);
			g2.drawImage( ( (Card) CardOperation.cards.get(53)).getImg(), 450,
						 130, 71, 96, null);
		}
		else{
	        //没有明牌
			g2.drawImage( ( (Card) CardOperation.cards.get(54)).getImg(), 280,
								 130, 71, 96, null);
			g2.drawImage( ( (Card) CardOperation.cards.get(54)).getImg(), 365,
								 130, 71, 96, null);
			g2.drawImage( ( (Card) CardOperation.cards.get(54)).getImg(), 450,
								 130, 71, 96, null);
		}
	}

    private void jbInit() throws Exception {
		this.setFont(new java.awt.Font("Dialog", 0, 13));
		this.setForeground(Color.green);
		this.addMouseMotionListener(new MainPanel_this_mouseMotionAdapter(this));
		this.addMouseListener(new MainPanel_this_mouseAdapter(this));

		x1 = 10;
		y1 = 60;
		x2 = 90 + (631 - (81 + 16 * 25)) / 2;
		y2 = 415;
		x3 = 712;
		y3 = 60;

		//初始化two玩家的每张牌的坐标
		for(int i=0;i<20;i++){
			twoX[i] = x2;
			x2 += 25;
			twoY[i] = y2;
			//初始化two玩家的每张牌的状态
			twoStatus[i] = false;
		}

		thread = new Thread(this);
		thread.start();
    }

    void this_mousePressed(MouseEvent e) {
		int x = e.getX(), y= e.getY();
		int beginX = 166,beginY = 415;

		//if(!PokerKernal.take) return ;
		//JOptionPane.showMessageDialog(this,"("+x+","+y+")","hello",0);

		//查找选中是哪一张牌
		for(int i=0;i<17;i++){
			if (twoStatus[i]) {
				//选中
				if ( (x > (beginX + i * 25)) && (y > beginY - 20) &&
					(x < (beginX + i * 25 + 25)) && (y < (beginY + 96 - 20))) {
					twoY[i] = twoY[i] + 20;
					twoStatus[i] = false;
					postsound.play();
					repaint();
					break;
				}
			}
			else {
				//没有选中
				if ( (x > (beginX + i * 25)) && (y > beginY) &&(x < (beginX + i * 25 + 25)) && (y < (beginY + 96))) {
					twoY[i] = twoY[i] - 20;
					twoStatus[i] = true;
					postsound.play();
					repaint();
					break;
				}
			}
		}
    }

    void this_mouseMoved(MouseEvent e) {

    }
}

class MainPanel_this_mouseAdapter extends java.awt.event.MouseAdapter {
    MainPanel adaptee;

    MainPanel_this_mouseAdapter(MainPanel adaptee) {
		this.adaptee = adaptee;
    }
    public void mousePressed(MouseEvent e) {
		adaptee.this_mousePressed(e);
    }
}

class MainPanel_this_mouseMotionAdapter extends java.awt.event.MouseMotionAdapter {
    MainPanel adaptee;

    MainPanel_this_mouseMotionAdapter(MainPanel adaptee) {
	this.adaptee = adaptee;
    }
    public void mouseMoved(MouseEvent e) {
	adaptee.this_mouseMoved(e);
    }
}

⌨️ 快捷键说明

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