1+ package com .xwintop .xJavaFxTool .services .games ;
2+
3+ import com .xwintop .xJavaFxTool .controller .games .BullsAndCowsGameController ;
4+ import com .xwintop .xJavaFxTool .utils .ConfigureUtil ;
5+ import com .xwintop .xcore .util .javafx .AlertUtil ;
6+ import javafx .application .Platform ;
7+ import javafx .scene .control .Label ;
8+ import javafx .scene .control .TextField ;
9+ import javafx .scene .layout .HBox ;
10+ import lombok .Getter ;
11+ import lombok .Setter ;
12+ import lombok .extern .slf4j .Slf4j ;
13+ import org .apache .commons .configuration .PropertiesConfiguration ;
14+ import org .apache .commons .io .FileUtils ;
15+ import org .apache .commons .lang3 .StringUtils ;
16+
17+ import java .io .File ;
18+ import java .util .Random ;
19+ import java .util .Timer ;
20+ import java .util .TimerTask ;
21+
22+ /**
23+ * @ClassName: BullsAndCowsGameService
24+ * @Description: 猜数字小游戏
25+ * @author: xufeng
26+ * @date: 2019/8/24 0024 15:06
27+ */
28+
29+ @ Getter
30+ @ Setter
31+ @ Slf4j
32+ public class BullsAndCowsGameService {
33+ private BullsAndCowsGameController bullsAndCowsGameController ;
34+ private int daojishiTime = 0 ;
35+ private int [] answerNumbers = new int [4 ];
36+ private int enterAnswerNumber = 0 ;
37+ private Timer timer ;
38+
39+ private int recordNumber = 0 ;
40+ private int recordTime = 0 ;
41+
42+ public BullsAndCowsGameService (BullsAndCowsGameController bullsAndCowsGameController ) {
43+ this .bullsAndCowsGameController = bullsAndCowsGameController ;
44+ }
45+
46+ public void initRecordData () {
47+ try {
48+ PropertiesConfiguration xmlConfigure = new PropertiesConfiguration (ConfigureUtil .getConfigureFile ("BullsAndCowsGameConfigure.properties" ));
49+ recordNumber = xmlConfigure .getInt ("recordNumber" , 0 );
50+ recordTime = xmlConfigure .getInt ("recordTime" , 0 );
51+ this .setRecordData ();
52+ } catch (Exception e ) {
53+ log .error ("加载配置失败!" );
54+ }
55+ }
56+
57+ public void initAnswerNumber () {
58+ daojishiTime = 0 ;
59+ enterAnswerNumber = 0 ;
60+ for (int i = 0 ; i < answerNumbers .length ; i ++) {
61+ Random ran = new Random ();
62+ int a = ran .nextInt (10 );
63+ if (i - 1 != -1 ) {
64+ for (int j = 0 ; j < i ; j ++) {
65+ if (a == answerNumbers [j ]) {
66+ i --;
67+ break ;
68+ } else {
69+ answerNumbers [i ] = a ;
70+ }
71+ }
72+ } else {
73+ answerNumbers [i ] = a ;
74+ }
75+ }
76+ timer = new Timer ();
77+ timer .schedule (new TimerTask () {
78+ @ Override
79+ public void run () {
80+ daojishiTime ++;
81+ int hours = daojishiTime / 60 / 60 ;
82+ int minutes = daojishiTime / 60 ;
83+ int seconds = daojishiTime % 60 ;
84+ Platform .runLater (() -> {
85+ bullsAndCowsGameController .getDaojishiTimeLabel ().setText ("计时: " + hours + " 小时 " + minutes + " 分 " + seconds + " 秒" );
86+ });
87+ }
88+ }, 0 , 1000 );
89+ Platform .runLater (() -> {
90+ for (int i = 0 ; i < 20 ; i ++) {
91+ HBox answerHbox = bullsAndCowsGameController .getAnswerHboxs ()[i ];
92+ ((Label ) answerHbox .getChildren ().get (1 )).setText ("" );
93+ ((Label ) answerHbox .getChildren ().get (3 )).setText ("" );
94+ ((Label ) answerHbox .getChildren ().get (5 )).setText ("" );
95+ }
96+ });
97+ }
98+
99+ public void enterInputNumber () {
100+ String inputNumberString = "" ;
101+ int [] inputNumsArray = new int [4 ];
102+ for (int i = 0 ; i < 4 ; i ++) {
103+ TextField inputNumberTextField = bullsAndCowsGameController .getInputNumberTextFields ()[i ];
104+ if (StringUtils .isEmpty (inputNumberTextField .getText ())) {
105+ AlertUtil .showInfoAlert ("请输入四个0-9的数字!" );
106+ return ;
107+ }
108+ inputNumsArray [i ] = Integer .parseInt (inputNumberTextField .getText ());
109+ inputNumberString += inputNumsArray [i ];
110+ }
111+ int aA = 0 ;
112+ int bB = 0 ;
113+ for (int i = 0 ; i < answerNumbers .length ; i ++) {
114+ if (inputNumsArray [i ] == answerNumbers [i ]) {
115+ aA += 1 ;
116+ }
117+ for (int j = 0 ; j < 4 ; j ++) {
118+ if (inputNumsArray [j ] == answerNumbers [i ]) {
119+ bB += 1 ;
120+ break ;
121+ }
122+ }
123+ }
124+ HBox answerHbox = bullsAndCowsGameController .getAnswerHboxs ()[enterAnswerNumber ];
125+ ((Label ) answerHbox .getChildren ().get (1 )).setText (inputNumberString );
126+ ((Label ) answerHbox .getChildren ().get (5 )).setText ("" + aA );
127+ ((Label ) answerHbox .getChildren ().get (3 )).setText ("" + bB );
128+ enterAnswerNumber ++;
129+ if (aA == 4 ) {
130+ timer .cancel ();
131+ timer = null ;
132+ AlertUtil .showInfoAlert ("恭喜你,答对了!答案是:" + inputNumberString );
133+ bullsAndCowsGameController .getRightAnswersLabel ().setText ("正确答案:" + inputNumberString );
134+ bullsAndCowsGameController .getEnterButton ().setText ("重玩" );
135+ bullsAndCowsGameController .getRightAnswersLabel ().setVisible (true );
136+ if (recordNumber == 0 || enterAnswerNumber < recordNumber ) {
137+ recordNumber = enterAnswerNumber ;
138+ }
139+ if (daojishiTime == 0 || recordTime < daojishiTime ) {
140+ recordTime = daojishiTime ;
141+ }
142+ setRecordData ();
143+ }
144+ if (enterAnswerNumber == 10 ) {
145+ AlertUtil .showInfoAlert ("您还有10次机会!" );
146+ }
147+ if (enterAnswerNumber >= 20 ) {
148+ timer .cancel ();
149+ timer = null ;
150+ AlertUtil .showInfoAlert ("挑战失败,点击\" 重玩\" 继续游戏!" );
151+ bullsAndCowsGameController .getRightAnswersLabel ().setText ("正确答案:" + answerNumbers [0 ] + answerNumbers [1 ] + answerNumbers [2 ] + answerNumbers [3 ]);
152+ bullsAndCowsGameController .getEnterButton ().setText ("重玩" );
153+ bullsAndCowsGameController .getRightAnswersLabel ().setVisible (true );
154+ }
155+ System .out .println ("答案是:" + answerNumbers [0 ] + answerNumbers [1 ] + answerNumbers [2 ] + answerNumbers [3 ]);
156+ }
157+
158+ private void setRecordData () {
159+ int hours = recordTime / 60 / 60 ;
160+ int minutes = recordTime / 60 ;
161+ int seconds = recordTime % 60 ;
162+ Platform .runLater (() -> {
163+ bullsAndCowsGameController .getRecordNumberLabel ().setText ("最少次数:第 " + recordNumber + " 次完成" );
164+ bullsAndCowsGameController .getRecordTimeLabel ().setText ("最短时间: " + hours + " 小时 " + minutes + " 分 " + seconds + " 秒" );
165+ });
166+ try {
167+ File file = ConfigureUtil .getConfigureFile ("BullsAndCowsGameConfigure.properties" );
168+ FileUtils .touch (file );
169+ PropertiesConfiguration xmlConfigure = new PropertiesConfiguration (ConfigureUtil .getConfigureFile ("BullsAndCowsGameConfigure.properties" ));
170+ xmlConfigure .setProperty ("recordNumber" , recordNumber );
171+ xmlConfigure .setProperty ("recordTime" , recordTime );
172+ xmlConfigure .save ();
173+ } catch (Exception e ) {
174+ log .error ("保存配置失败!" , e );
175+ }
176+ }
177+ }
0 commit comments