Andriod应用与游戏开发(纸牌小游戏)实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Andriod应用与游戏开发
——纸牌小游戏实例
这是胡老师给的纸牌小游戏,我用eclipse载入solitaire项目,再选择andriod运行方式运行这个项目,自动启动andriod模拟器之后,这个游戏就运行起来了。不知道为什么游戏在andriod模拟器上运行时是倒着的,不过还是可以玩的。
这是正宗的电脑上的纸牌小游戏,可见使用java编写的纸牌游戏仿真度也是很高的。
由于是在andriod模拟器上运行,对于我那个配置不高的本本电脑,光运行模拟器就卡个半死,运行这游戏卡到无语可想而知,
上图中的梅花6在移动时都可以停在红桃7下面半天,使我已经没有在模拟器上玩它的欲望了。。。
不说废话了直接进入正题,来看看编写此游戏的java代码。
首先我们看看src文件夹下的各个类
对此介绍一下各个类,因为我自己也对这些类不太熟悉,肯定会有一些错误的地方,所以仅供参考。
AnimateCard类负责驱动游戏,连接其他类别。
Card类是纸牌操作类,包括各种操作方法。
CardAnchor类则与普遍的cardmain类一样是纸牌操作的具体步骤。
Deck类顾名思义是桌面。
Move类与movecard类都讲述了具体的鼠标移动纸牌的事件。Options类规定了各个界面的布局。
Replay类是重新开始游戏。
Rules类是纸牌游戏的具体规则,反正我是看不懂。
Solitaire类以及stats类的确不知道是什么类。
还是看看其中规则的实现代码吧
public class Card extends JLabel implements MouseListener, MouseMotionListener { public Point point, oldPoint;// point是初始鼠标位置
CardMain m = null;
public String name;// 卡片名称1-1
public String up = "rear";// 默认反面
public int currentCol = 0;
public boolean canmove = false;// 判断当前卡片是否可以拖拽
public Card(CardMain m) {
this.m = m;
this.setSize(71, 96);
this.setVisible(true);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public Card(CardMain m, String name, String flag) {
this.m = m;
= name;
if (flag == "front")
this.turnFront();
else {
this.turnRear();
}
this.setSize(71, 96);
this.setVisible(true);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public Card getNext(Point point) {
Card card = null;
point.y += m.min;
card = (Card) m.table.get(point);
if (card != null)
return card;
point.y += m.max - m.min;
card = (Card) m.table.get(point);
return card;
}
public void moveto(Point from, Point to) {
Point to2 = new Point();
to2 = to;
Card card = this.getNext(from);
m.table.remove(from);
this.setLocation(to2);
m.table.put(to2, this);
if (card != null)
card.moveto(card.getLocation(), new Point(to2.x, to2.y + m.max));// 递归
}
public void moving(int x, int y) // 拖拽事件
{
for(Card card:m.dragList)
{
Point p = card.getLocation();
m.table.remove(p);
p.x += x;
p.y += y;
card.setLocation(p);
m.container.setComponentZOrder(card, 0);
m.table.put(p, card);
}
//Card card = this.getNext(this.getLocation());
// 解决某个bug
// if(this.getCol()==currentCol)
// System.out.println(this.getCol()+":"+currentCol);
//Point p = this.getLocation();
/*m.table.remove(p);
p.x += x;
p.y += y;
this.setLocation(p);
m.container.setComponentZOrder(this, 0);
m.table.put(p, this);
if (card != null)
card.moving(x, y);// 递归*/
}