팀 프로그래밍 블로그 (카드 게임)

팀 상황

회원 작업 할당 팀 구성원의 블로그
춘 메이 비즈니스 형 디자인, 로직 설계, 게임 연산 코드 아니오 리더
팬 쑤 마스터 카드와 국가, 음악, 애니메이션 아니오 크루
Yanggeng 첸 전사 카드와 상태, CSS 테이블 아니오 크루

다른 프로젝트에 대한 참조 없습니다

Gitee 부분

https://gitee.com/suyuan37/java_card_game

기록을 제출 :

https://gitee.com/suyuan37/java_card_game/commits/master

예비 조사

게임 전체 계획과 전설 [마석가] [] [살인 미 나 렛 보름달] 세 게임에서 디자인 참조 유형의 참조의 기본 클래스의 미 나 렛을 죽일

기능 차트

객체 지향 설계

패키지 다이어그램 :

UML (전용 키 카테고리를 표시) :

프로젝트 실행 샷

  1. 로그인

  1. 주 메뉴

  1. 내 카드

  1. 생산 팀

  1. 전투 인터페이스

  1. 전리품 확보


키 코드 프로젝트

게임 모듈을 시작 (전장)

  1. 카드 : 카드는 카드에 의한 효과를 충족하기 위해 라이선스 요구 사항을 충족하는지 여부, 뷰의 나가서 카드 핸드 카드를 이동

    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");
         }
    
     }
  2. 최종 라운드 : 자신의 한판 승부 실행 적의 다시 라운드 후 라운드 종료 후 적의 라운드 구현

    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);
         }
    
     }
  3. 게임 시작 (초기화) : 중공업은 상대의 도서관, 손의 첫 번째 라운드에 액세스, 게임을 시작하기를 씻어

    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();
    }
}

코드 스캔 결과

코드를 스캔 후, 우리는 수정의 몇 시간 후, 틀린 문제를 많이 얻을, 그리고 마지막으로 필요한 수정을 완료

개선과 감정

  1. 이를 위해이 서둘러를 보이지만, 그룹의 각 구성원은 객체 지향 설계 기능은 처음부터이 부분에 자바 FX를위한 좋은 업그레이드도 큰 진전을 가지고 있지만, 클래스 기반.
  2. 课设时间太少,虽然是提前布置的,但是前期的时间被其他课目占用,并没有足够的时间准备,对于javafx的动画方面仅仅只是做了最基本的使用。
  3. 为卡牌设计出牌动画
  4. 完善AI算法
  5. 单纯为单机游戏,未使用数据库,未能实现多人功能

추천

출처www.cnblogs.com/suyuan333/p/12174361.html