팀 상황
회원 | 작업 할당 | 팀 구성원의 블로그 | |
---|---|---|---|
춘 메이 비즈니스 | 형 디자인, 로직 설계, 게임 연산 코드 | 아니오 | 리더 |
팬 쑤 | 마스터 카드와 국가, 음악, 애니메이션 | 아니오 | 크루 |
Yanggeng 첸 | 전사 카드와 상태, CSS 테이블 | 아니오 | 크루 |
다른 프로젝트에 대한 참조 없습니다
Gitee 부분
https://gitee.com/suyuan37/java_card_game
기록을 제출 :
https://gitee.com/suyuan37/java_card_game/commits/master
예비 조사
게임 전체 계획과 전설 [마석가] [] [살인 미 나 렛 보름달] 세 게임에서 디자인 참조 유형의 참조의 기본 클래스의 미 나 렛을 죽일
기능 차트
객체 지향 설계
패키지 다이어그램 :
UML (전용 키 카테고리를 표시) :
프로젝트 실행 샷
- 로그인
- 주 메뉴
- 내 카드
- 생산 팀
- 전투 인터페이스
- 전리품 확보
키 코드 프로젝트
게임 모듈을 시작 (전장)
카드 : 카드는 카드에 의한 효과를 충족하기 위해 라이선스 요구 사항을 충족하는지 여부, 뷰의 나가서 카드 핸드 카드를 이동
public void play() { if (selectedIndex != -1) { Card card = myself.getHandCardList().get(selectedIndex); textArea.appendText("you use card: "+ card.nameProperty().getValue() +"\n" +card.effect(enemy, myself) + "\n\n"); boolean canUse = myself.use(card, enemy); if(canUse == false) { textArea.appendText("short of sp\nyou can't use the card\n\n"); return ; } myself.getHandCardList().remove(selectedIndex); showUsedCard(card); showHandCard(); showStatus(); selectedIndex = -1; // myHP.setText(myself.getHealthPower()+" "); if(Integer.parseInt(enemy.getHealthPower())<=0) { isWin = true; showResult(); } } else { textArea.appendText("please choose a card\n"); } }
최종 라운드 : 자신의 한판 승부 실행 적의 다시 라운드 후 라운드 종료 후 적의 라운드 구현
public void finish() { playCardImage.setImage(null); isYourTurn = false; turnLabel.setText("enemy turn"); enemy.settleStatus(); showStatus(); if(enemy.getCardLibrary().isEmpty()) enemy.freshCardLibrary(enemyTempLibrary); if(myself.getCardLibrary().isEmpty()) myself.freshCardLibrary(myTempLibrary); enemy.getTurnCard(); while (true) { if(!enemy.isActionable()) { break; } Card card = ai.getNextCard(); if (card == null) break; textArea.appendText("enemy use card: "+ card.nameProperty().getValue() +"\n" +card.effect(enemy, myself) + "\n\n"); enemy.use(card, myself); showStatus(); if(Integer.parseInt(myself.getHealthPower()) <= 0) { isWin = false; showResult(); return ; } } isYourTurn = true; myself.settleStatus(); turnLabel.setText("Your turn"); boolean getEnoughCard = myself.getTurnCard(); if (!getEnoughCard) myself.freshCardLibrary(myTempLibrary); showHandCard(); showStatus(); if(!myself.isActionable()) { playButton.setDisable(true); } else { playButton.setDisable(false); } }
게임 시작 (초기화) : 중공업은 상대의 도서관, 손의 첫 번째 라운드에 액세스, 게임을 시작하기를 씻어
public void gameStart() { myself.freshCardLibrary(myTempLibrary); showStatus(); myself.getHandCard(5); ai = new EasyAI(enemy, myself); ai.initialize(); showHandCard(); turnLabel.setText("Your turn"); }
카드 및 상태 모듈
카드 및 클래스 (카드, 상태)의 상태는, 게임의 다른 디자인 기능의 요구를 충족하기 위해 만들어졌다
public abstract boolean use(Creature myself, Creature enemy);
public abstract String effect(Creature myself,Creature enemy);
각 카드의 효과를 달성하기 위해 사용 된 방법을 사용하여, 효과에있어서 문자열 카드에 의한 효과를 얻기 위해, 텍스트 영역이 전투 메시지로서, 배틀 화면에서 각 등의 문자열을 저장하는 데있다
public abstract void addStatus(Creature myself,Creature enemy);
public abstract void settle(Creature myself);
addStatus 방법은 상태 정착을 달성하기 위해 사용 된 방법을 정착, 모든 상태의 각 라운드 시작의 시작 대응 효과를 달성하기 위해, 상태 막대의 결제를 수행하는 각각의 상태를 첨가 달성하는 데 사용
생기
애니메이션은 현재,,, 죽일 카드를 사용하여 애니메이션 및 기타 추가 조경을 사용하는 경우에 효과를 페이드 효과를 구현한다
public class Fade {
private FadeTransition ft;
public Fade(Node node)
{
FadeTransition ft = new FadeTransition(Duration.millis(1000), node);
this.ft = ft;
}
public void fadeFrom()
{
ft.setFromValue(1.0);
ft.setToValue(0.0);
ft.setAutoReverse(false);
ft.play();
}
public void fadeTo()
{
ft.setFromValue(0.0);
ft.setToValue(1.0);
ft.setAutoReverse(false);
ft.play();
}
}
코드 스캔 결과
코드를 스캔 후, 우리는 수정의 몇 시간 후, 틀린 문제를 많이 얻을, 그리고 마지막으로 필요한 수정을 완료
개선과 감정
- 이를 위해이 서둘러를 보이지만, 그룹의 각 구성원은 객체 지향 설계 기능은 처음부터이 부분에 자바 FX를위한 좋은 업그레이드도 큰 진전을 가지고 있지만, 클래스 기반.
- 课设时间太少,虽然是提前布置的,但是前期的时间被其他课目占用,并没有足够的时间准备,对于javafx的动画方面仅仅只是做了最基本的使用。
- 为卡牌设计出牌动画
- 完善AI算法
- 单纯为单机游戏,未使用数据库,未能实现多人功能