windows纸牌的java实现源代码及所用图片
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
package solitaire;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Card extends JLabel
{
/** 纸牌花色的常量——红桃*/
public static final int HONG_TAO = 0;
/** 纸牌花色的常量——方片*/
public static final int FANG_PIAN = 1;
/** 纸牌花色的常量——黑桃*/
public static final int HEI_TAO = 10;
/** 纸牌花色的常量——梅花*/
public static final int MEI_HUA = 11;
/** 纸牌长度的常量*/
public static final int WIDTH = 71;
/** 纸牌高度的常量*/
public static final int HEIGHT = 96;
/* 纸牌点数*/
private int num;
/* 纸牌花色*/
private int color;
/* 纸牌是否牌面向上*/
private boolean op;
/** 构造方法*/
public Card()
{
op = false;
}
/** 构造方法*/
public Card(int n, int c)
{
this();
this.setSize(71, 96);
setAll(n, c);
}
/* 设置点数,花色及图片*/
private void setAll(int n, int c)
{
num = n;
color = c;
setImg();
}
/** 得到点数*/
public int getNum()
{
return num;
}
/** 得到花色*/
public int getColor()
{
return color;
}
/* 设置图片*/
private void setImg()
{
if (op)
{
switch (color)
{
case (HONG_TAO):
setIcon(new ImageIcon(Card.class.getResource("/images/红桃" + num
+ ".gif")));
break;
case (FANG_PIAN):
setIcon(new ImageIcon(Card.class.getResource("/images/方片" + num
+ ".gif")));
break;
case (HEI_TAO):
setIcon(new ImageIcon(Card.class.getResource("/images/黑桃" + num
+ ".gif")));
break;
case (MEI_HUA):
setIcon(new ImageIcon(Card.class.getResource("/images/梅花" + num
+ ".gif")));
break;
}
}/* 如果没有被翻开,则显示纸牌的背面*/
else
{
setIcon(new ImageIcon(Card.class.getResource("/images/背面.gif")));
}
}
/** 翻开纸牌*/
public void open()
{
op = true;
setImg();
}
/** 盖上纸牌*/
public void close()
{
op = false;
setImg();
}
/** 得到纸牌的翻开状态*/
public boolean isOpen()
{
return op;
}
}
package solitaire;
import ponent;
import java.awt.Paint;
import java.awt.Point;
import java.util.Stack;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public abstract class Cards extends Stack
{
/** 牌叠间的间隔*/
public static final int SPACE = Card.WIDTH / 2;
/** 正在排序的牌叠间纸牌的纵向间隔*/
public static final int PILES_SPACE = Card.HEIGHT / 15;
/** 边框*/
protected JLabel lab = new JLabel(new ImageIcon(
Cards.class.getResource("/images/边框.gif")));
/** 构造函数*/
public Cards()
{
super();
lab.setSize(Card.WIDTH, Card.HEIGHT);
}
/** 设置牌叠内所有纸牌的位置及边框的位置*/
public abstract void setLocation();
/** 判断当前位置及其上面的纸牌是否可以移动*/
public abstract boolean canMove(int index);
/** 判断纸牌是否可以加入牌叠,传入的参数为要移动的牌叠中最底下的一张*/ public abstract boolean canAdd(Card c);
/** 判断当前点是否落入了牌叠中*/
public abstract boolean at(Point p);
/** 判断纸牌是否是牌叠中的纸牌*/
public boolean in(Component c)
{