📄 mainpanel.java~262~
字号:
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);
//把底牌给地主
}
}
}
//延时
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);
}
}
//显示底牌
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 + -