package solitaire.game;
import java.util.ArrayList;
import java.util.Random;
import solitaire.pile.*;
import solitaire.card.*;
public class Game {
static public ArrayList<Card> allCard;
static public CardPile allPiles [];
static public DeckPile deckPile;
static public DiscardPile discardPile;
static public TablePile tablePile [];
static public SuitPile suitPile [];
static public MoveCardPile moveCard;
static{
//初始化纸牌
allCard = new ArrayList<Card>();
for (int i = 0; i < 4; i++)
for (int j = 0; j <= 12; j++)
allCard.add(new Card(j, i));
Random generator = new Random();
for (int i = 0; i < 52; i++) {
int j = Math.abs(generator.nextInt() % 52);
// swap the two card values
Card temp = allCard.get(i);
allCard.set(i, allCard.get(j));
allCard.set(j, temp);
}
//初始化牌堆
allPiles = new CardPile[13];
suitPile = new SuitPile[4];
tablePile = new TablePile[7];
// then fill them in
allPiles[0] = deckPile = new DeckPile(200, 40);
allPiles[1] = discardPile = new DiscardPile(200+Card.width+50, 40);
for (int i = 0; i < 4; i++)
allPiles[2+i] = suitPile[i] =
new SuitPile(200+Card.width+50 + Card.width + 150 + (40+Card.width) * i, 40);
for (int i = 0; i < 7; i++)
allPiles[6+i] = tablePile[i] =
new TablePile(200 + (50+Card.width) * i, 40 + Card.height + 40, i);
for (int i = 0; i < 7; i++){
ArrayList<Card> al = new ArrayList<Card>();
for(int j = 0;j < tablePile[i].getCardNum();j++){
al.add(allCard.remove(allCard.size()-1));
}
tablePile[i].addCard(al);
tablePile[i].setCardNum(tablePile[i].getNotFlipNum()+1);
//System.out.println(tablePile[i].getCardNum());
tablePile[i].top().setFaceup(true);
}
int rest = allCard.size();
for(int i = 0;i < rest;i++ ){
deckPile.addCard(allCard.remove(allCard.size()-1));
//System.out.println( i);
}
moveCard = new MoveCardPile();
}
public static void transferFromDiscardToDeck(){
// System.out.println( "transferFromDiscardToDeck");
while(!(discardPile.isEmpty())){
Card card = discardPile.pop();
card.setFaceup(false);
deckPile.addCard(card);
}
}
public static boolean testDeckPile(int x,int y){
int selectNum = deckPile.select(x, y);
if(selectNum >= 0){
discardPile.addCard(deckPile.pop());
// System.out.println("deckPile_selectNum:"+selectNum);
return true;
}
else if(selectNum == -2){
Game.transferFromDiscardToDeck();
// System.out.println("deckPile_selectNum:"+-2);
return true;
}
else{
// System.out.println("deckPile_selectNum:"+-1);
return false;
}
// System.out.println("deckSize:"+deckPile.thePile.size() );
}
public static boolean testDisCardPile(int x,int y){
int selectNum = discardPile.select(x, y);
if(selectNum >= 0){
moveCard.clear();
moveCard.addCard(discardPile.pop());
moveCard.setFromPile(discardPile);
// System.out.println("discardPile_selectNum:"+selectNum);
return true;
}
else if(selectNum == -2){
// System.out.println("discardPile_selectNum:"+-2);
}
else{
// System.out.println("discardPile_selectNum:"+-1);
}
//System.out.println("discardSize:"+discardPile.thePile.size() );
return false;
}
public static boolean testTablePile(int x,int y){
boolean isDrag = false;
for(int i = 0;i<tablePile.length;i++){
int selectNum = tablePile[i].select(x, y);
if(selectNum >= 0){
moveCard.clear();
int num = tablePile[i].getCardNum();
for(int j = selectNum;j < num;j++){
moveCard.addCard(tablePile[i].pop());
}
moveCard.setFromPile(tablePile[i]);
//System.out.println("moveCard_size:"+moveCard.size() );
return true;
}
else{
// System.out.println("tablePile["+i+"]_selectNum:"+-1);
}
//System.out.println("tablePile["+i+"]_size:"+tablePile[i].thePile.size() );
}
return isDrag;
}
public static boolean isCanAddToSuitPile(int x,int y){
if(moveCard.size()==1){
for(int i = 0;i < 4;i++){
if(suitPile[i].includes(x, y)){
if(suitPile[i].isCanAdd(moveCard.getCard())){
suitPile[i].addCard(moveCard.removeCard());
return true;
}
}
}
}
return false;
}
public static boolean isCanAddtoTablePile(int x,int y){
for(int i=0;i<7;i++){
if(tablePile[i].includes(x, y)){
if(tablePile[i].hashCode()!=moveCard.getFromPile().hashCode())
if(tablePile[i].isCanAdd(moveCard.getCard())){
tablePile[i].addCard(moveCard.clear());
return true;
}
}
}
return false;
}
public static void refreshTablePile(){
// System.out.println("refreshTablePile");
for(int i=0;i<7;i++){
if(tablePile[i].top() != null)
if(!(tablePile[i].top().isFaceup())){
tablePile[i].top().setFaceup(true);
tablePile[i].setNotFlipNum(tablePile[i].getNotFlipNum()-1);
}
}
}
public static void returnToFromPile(){
if(moveCard.getFromPile()!=null)
if(moveCard.getFromPile().hashCode()==discardPile.hashCode()){
while(!(moveCard.isEmpty())){
moveCard.getFromPile().addCard(moveCard.removeCard());
}
}
else
moveCard.getFromPile().addCard(moveCard.clear());
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java语言 solitaire 纸牌游戏
共80个文件
png:55个
java:11个
class:11个
需积分: 48 9 下载量 149 浏览量
2017-06-23
11:31:42
上传
评论
收藏 89KB RAR 举报
温馨提示
单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。。。第7堆7张,每一堆的第一张牌朝上,其他朝下。牌桌上还有4个suitpiles,一个deck card堆和一个discard card堆。 运用面向对象封装、继承、抽象类、抽象方法、多态、动态绑定等概念。 山东大学 面向对象课程设计
资源推荐
资源详情
资源评论
收起资源包目录
solitaire.rar (80个子文件)
solitaire
.project 383B
src
solitaire
pile
MoveCardPile.java 2KB
TablePile.java 4KB
SuitPile.java 436B
DiscardPile.java 333B
CardPile.java 2KB
DeckPile.java 206B
game
Game.java 5KB
Main.java 468B
Solitaire.java 3KB
card
Card.java 2KB
test.java 620B
.settings
org.eclipse.jdt.core.prefs 629B
picture
1-0.png 451B
1-7.png 391B
2-8.png 1KB
1-6.png 405B
3-7.png 381B
1-2.png 357B
3-6.png 1KB
3-2.png 921B
2-11.png 2KB
1-1.png 343B
3-8.png 430B
3-12.png 2KB
2-4.png 878B
0-1.png 749B
cardSkin1.png 7KB
1-5.png 388B
1-10.png 2KB
back.png 2KB
0-11.png 2KB
1-11.png 2KB
1-8.png 431B
2-2.png 784B
3-11.png 2KB
2-3.png 792B
0-7.png 1KB
0-8.png 1KB
0-9.png 1KB
0-12.png 2KB
2-10.png 2KB
1-3.png 357B
3-5.png 368B
0-6.png 1000B
3-9.png 444B
2-9.png 1KB
1-4.png 396B
2-5.png 889B
0-10.png 2KB
0-3.png 829B
1-9.png 445B
0-4.png 935B
2-7.png 993B
0-5.png 956B
3-4.png 383B
0.png 817B
3-3.png 906B
3-1.png 829B
2-1.png 719B
2-0.png 647B
3-10.png 2KB
2-12.png 2KB
2-6.png 934B
1-12.png 2KB
0-0.png 705B
0-2.png 836B
3-0.png 736B
.classpath 301B
bin
solitaire
pile
DeckPile.class 326B
CardPile.class 3KB
SuitPile.class 718B
TablePile.class 4KB
DiscardPile.class 778B
MoveCardPile.class 3KB
game
Solitaire.class 3KB
Main.class 864B
Game.class 5KB
card
Card.class 3KB
test.class 1KB
共 80 条
- 1
资源评论
renchao118
- 粉丝: 16
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功