Showing
7 changed files
with
371 additions
and
38 deletions
... | @@ -25,10 +25,10 @@ | ... | @@ -25,10 +25,10 @@ |
25 | </ul> | 25 | </ul> |
26 | </nav> | 26 | </nav> |
27 | <div class="container2"> | 27 | <div class="container2"> |
28 | - <a href="https://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo&year=2021"><img src="pngs/rank.jpg" style="display:block; margin:0 auto; width:600px; height:400px;"></a> | 28 | + <a href="https://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo&year=2021"><img src="pngs/rank.JPG" style="display:block; margin:0 auto; width:600px; height:400px;"></a> |
29 | </div> | 29 | </div> |
30 | <div class="container3"> | 30 | <div class="container3"> |
31 | - <a href="https://sports.news.naver.com/kbaseball/schedule/index.nhn"><img src="pngs/today.jpg" style="display:block; margin:0 auto; width:655px; height:150px;"></a> | 31 | + <a href="https://sports.news.naver.com/kbaseball/schedule/index.nhn"><img src="pngs/today.JPG" style="display:block; margin:0 auto; width:655px; height:150px;"></a> |
32 | </div> | 32 | </div> |
33 | <div class="container4"> | 33 | <div class="container4"> |
34 | <img src="pngs/1.jpg" style="display:block; margin:0 auto; width:200px; height:100px;"> | 34 | <img src="pngs/1.jpg" style="display:block; margin:0 auto; width:200px; height:100px;"> | ... | ... |
This diff is collapsed. Click to expand it.
predict.js
0 → 100644
1 | +function add_predict(){ | ||
2 | + var s=""; | ||
3 | + s+=("<option value="+10+">"+10+"</option>"); | ||
4 | + s+=("<option value="+20+">"+20+"</option>"); | ||
5 | + s+=("<option value="+50+">"+50+"</option>"); | ||
6 | + s+=("<option value="+70+">"+70+"</option>"); | ||
7 | + s+=("<option value="+100+">"+100+"</option>"); | ||
8 | + s+=("<option value="+500+">"+500+"</option>"); | ||
9 | + s+=("<option value="+1000+">"+1000+"</option>"); | ||
10 | + s+=("<option value="+5000+">"+5000+"</option>"); | ||
11 | + s+=("<option value="+10000+">"+10000+"</option>"); | ||
12 | + s+=("<option value="+50000+">"+50000+"</option>"); | ||
13 | + s+=("<option value="+100000+">"+100000+"</option>"); | ||
14 | + document.getElementById('pr').innerHTML=s; | ||
15 | +} | ||
16 | + | ||
17 | +function predict(value, hitter_list1, hitter_list2, pitcher1, pitcher2){ | ||
18 | + var score=[0,0]; | ||
19 | + var w=0; | ||
20 | + var h=0; | ||
21 | + var d=0; | ||
22 | + for(var i=0; i<value; i++){ | ||
23 | + score=algorithms(hitter_list1, hitter_list2, pitcher1, pitcher2); | ||
24 | + if(score[0]>score[1]){ | ||
25 | + w++; | ||
26 | + }else if(score[0]<score[1]){ | ||
27 | + h++; | ||
28 | + }else{ | ||
29 | + d++; | ||
30 | + } | ||
31 | + } | ||
32 | + document.getElementById('jstest').innerHTML="예측 결과"+"<br\>"+"TEST "+value+"번"+"<br\><br\>"+"원정팀 승리 횟수 : "+w+"<br\>" | ||
33 | + +"홈팀 승리 횟수 : "+h+"<br\>"+"무승부 횟수 : "+d+"<br\><br\>"+"원정팀 승리 확률 : "+w*100/value+"%"+"<br\>"+"홈팀 승리 확률 : "+h*100/value+"%"+"<br\>"; | ||
34 | +} | ||
35 | + | ||
36 | +function algorithms(hitter_list1, hitter_list2, pitcher1, pitcher2){ | ||
37 | + var base1 = 0; var base2 = 0; var base3 = 0; //1이면 주자 있고 0이면 비어있는것 | ||
38 | + var out = 0; var ining = 1; var home_away = 1;//아웃카운트, 이닝, home이면 1이고 away이면 2. | ||
39 | + var score1 = 0; var score2 = 0; | ||
40 | + var hitter_num1 = 1; var hitter_num2 = 1; | ||
41 | + var hit=false; | ||
42 | + while(true){ | ||
43 | + if(ining == 9 && home_away == 2 && score1 < score2){//9회 초 후 home팀이 이기고 있을 때! | ||
44 | + break; | ||
45 | + } | ||
46 | + else if(ining==10 && home_away==1 && score1>score2 && hit==false){//9회 말 후 home팀이 이기고 있을 때! | ||
47 | + break; | ||
48 | + } | ||
49 | + else if(ining>9 && score1 < score2){//9회 말 후 home팀이 이기고 있을 때! | ||
50 | + break; | ||
51 | + } | ||
52 | + else if(ining>=11 && home_away==1 && hit==false && score1>score2){//연장 이후 원정팀이 이기고 있을 때! | ||
53 | + break; | ||
54 | + } | ||
55 | + else if(ining>=10 && home_away==2 && hit==true && score1<score2){//끝내기 | ||
56 | + break; | ||
57 | + } | ||
58 | + else if(ining==13 && score1==score2){//무승부 | ||
59 | + break; | ||
60 | + } | ||
61 | + | ||
62 | + if(home_away == 1){ | ||
63 | + var hitter = hitter_list1[hitter_num1]; //hitter = hitter_list1[hitter_number1%9] | ||
64 | + var pitcher = pitcher2; //pitcher = pitcher1 | ||
65 | + | ||
66 | + } | ||
67 | + else if(home_away == 2){ | ||
68 | + var hitter = hitter_list2[hitter_num2]; //hitter = hitter_list2[hitter_number2%9] | ||
69 | + var pitcher = pitcher1; //pitcher = pitcher2 | ||
70 | + | ||
71 | + } | ||
72 | + | ||
73 | + var num = Math.random(); | ||
74 | + //hitter_number1 = hitter_number(kia); hitter_number2 = hitter_number(dusan); | ||
75 | + var one = 0; var two = 0; var three = 0; var homerun = 0; | ||
76 | + one = pitcher[2] * (hitter[2] - hitter[3] - hitter[4] - hitter[5])/hitter[2]; | ||
77 | + two = pitcher[2] * hitter[3]/hitter[2]; | ||
78 | + three = pitcher[2] * hitter[4]/hitter[2]; | ||
79 | + homerun = pitcher[2] * hitter[5]/hitter[2]; | ||
80 | + hit=true; | ||
81 | + if(num <= one){ //안타 | ||
82 | + var num1 = Math.random(); | ||
83 | + if(num1 <= 0.5){ | ||
84 | + switch(home_away){ | ||
85 | + case 1: | ||
86 | + score1 = score1 + base3; | ||
87 | + break; | ||
88 | + case 2: | ||
89 | + score2 = score2 + base3; | ||
90 | + break; | ||
91 | + } | ||
92 | + base3 = base2; | ||
93 | + base2 = base1; | ||
94 | + base1 = 1; | ||
95 | + | ||
96 | + } | ||
97 | + else{ | ||
98 | + switch(home_away){ | ||
99 | + case 1: | ||
100 | + score1 = score1 + base3 + base2; | ||
101 | + break; | ||
102 | + case 2: | ||
103 | + score2 = score2 + base3 + base2; | ||
104 | + break; | ||
105 | + } | ||
106 | + base3 = base1; | ||
107 | + base2 = 0; | ||
108 | + base1 = 1; | ||
109 | + | ||
110 | + } | ||
111 | + | ||
112 | + } | ||
113 | + else if((one < num) && (num <= one + two)){//2루타 | ||
114 | + var num2 = Math.random(); | ||
115 | + if(num2 <= 0.4){ | ||
116 | + switch(home_away){ | ||
117 | + case 1: | ||
118 | + score1 = score1 + base3 + base2; | ||
119 | + break; | ||
120 | + case 2: | ||
121 | + score2 = score2 + base3 + base2; | ||
122 | + break; | ||
123 | + } | ||
124 | + base3 = base1; | ||
125 | + base2 = 1; | ||
126 | + base1 = 0; | ||
127 | + | ||
128 | + } | ||
129 | + else if(0.4 < num2 && num2 <=0.7){ | ||
130 | + switch(home_away){ | ||
131 | + case 1: | ||
132 | + score1 = score1 + base3 + base2 + base1; | ||
133 | + break; | ||
134 | + case 2: | ||
135 | + score2 = score2 + base3 + base2 + base1; | ||
136 | + break; | ||
137 | + } | ||
138 | + base3 = 0; | ||
139 | + base2 = 1; | ||
140 | + base1 = 0; | ||
141 | + | ||
142 | + } | ||
143 | + else{ | ||
144 | + switch(home_away){ | ||
145 | + case 1: | ||
146 | + score1 = score1 + base3 + base2; | ||
147 | + break; | ||
148 | + case 2: | ||
149 | + score2 = score2 + base3 + base2; | ||
150 | + break; | ||
151 | + } | ||
152 | + base3 = 0; | ||
153 | + base2 = 1; | ||
154 | + base1 = 0; | ||
155 | + | ||
156 | + } | ||
157 | + | ||
158 | + } | ||
159 | + else if((one + two < num) && (num <= one + two + three)){//3루타 | ||
160 | + switch(home_away){ | ||
161 | + case 1: | ||
162 | + score1 = score1 + base3 + base2 + base1; | ||
163 | + break; | ||
164 | + case 2: | ||
165 | + score2 = score2 + base3 + base2 + base1; | ||
166 | + break; | ||
167 | + } | ||
168 | + base3 = 1; | ||
169 | + base2 = 0; | ||
170 | + base1 = 0; | ||
171 | + | ||
172 | + } | ||
173 | + else if(one + two + three < num && num <= one + two + three + homerun){//홈런 | ||
174 | + switch(home_away){ | ||
175 | + case 1: | ||
176 | + score1 = score1 + base3 + base2 + base1 + 1; | ||
177 | + break; | ||
178 | + case 2: | ||
179 | + score2 = score2 + base3 + base2 + base1 + 1; | ||
180 | + break; | ||
181 | + } | ||
182 | + base3 = 0; | ||
183 | + base2 = 0; | ||
184 | + base1 = 0; | ||
185 | + | ||
186 | + } | ||
187 | + | ||
188 | + | ||
189 | + else if( pitcher[2] < num && (num <= pitcher[2] +pitcher[1]*0.01)){//볼넷 | ||
190 | + if(base1==1 && base2==1 && base3==1){//만루 밀어내기 득점 -> 스코어 ++ | ||
191 | + if(home_away==1){ | ||
192 | + score1++; | ||
193 | + } | ||
194 | + else{ | ||
195 | + score2++; | ||
196 | + } | ||
197 | + } | ||
198 | + else{//스코어 추가되지 않는 경우 | ||
199 | + if((base2==1 && base1==0 )||(base3==1 && base1==0)||(base2==1&&base3==1&&base1==0)){//2루만 채워져있거나 3루만 채워져있거나 2,3루만 채워져있거나 | ||
200 | + base1=1; | ||
201 | + } | ||
202 | + else if(base1==1 && base3==1 && base2==0){//1루 3루 채워져있고 2루 비워져있거나 | ||
203 | + base2=base1; | ||
204 | + base1=1; | ||
205 | + } | ||
206 | + else{ | ||
207 | + base3 = base2; | ||
208 | + base2 = base1; | ||
209 | + base1 = 1; | ||
210 | + } | ||
211 | + } | ||
212 | + | ||
213 | + } | ||
214 | + | ||
215 | + else{//아웃 | ||
216 | + out++; | ||
217 | + | ||
218 | + } | ||
219 | + | ||
220 | + if(out >= 3){ | ||
221 | + switch(home_away){ | ||
222 | + case 1: | ||
223 | + home_away = 2; | ||
224 | + hit=false; | ||
225 | + break; | ||
226 | + case 2: | ||
227 | + home_away = 1; | ||
228 | + ining++; | ||
229 | + hit=false; | ||
230 | + break; | ||
231 | + } | ||
232 | + out=0; | ||
233 | + base1=0; base2=0; base3=0; | ||
234 | + } | ||
235 | + else{ | ||
236 | + if(home_away == 1){ | ||
237 | + hitter_num1++; | ||
238 | + if(hitter_num1>=10){ | ||
239 | + hitter_num1=1; | ||
240 | + } | ||
241 | + } | ||
242 | + else if(home_away == 2){ | ||
243 | + hitter_num2++; | ||
244 | + if(hitter_num2>=10){ | ||
245 | + hitter_num2=1; | ||
246 | + } | ||
247 | + } | ||
248 | + } | ||
249 | + | ||
250 | + } | ||
251 | + var score = [score1, score2]; | ||
252 | + return score; | ||
253 | +} |
1 | const express = require('express'); | 1 | const express = require('express'); |
2 | const app = express(); | 2 | const app = express(); |
3 | -app.use(express.static(__dirname)); | ||
4 | 3 | ||
5 | app.listen(8080, function(){ | 4 | app.listen(8080, function(){ |
6 | console.log('listening on 8080'); | 5 | console.log('listening on 8080'); |
7 | }); | 6 | }); |
8 | 7 | ||
9 | -app.get('/', function(req, res){ | 8 | +app.get('/test', function(req, res){ |
10 | - res.sendFile(__dirname + '/main.html'); | 9 | + res.send('test'); |
11 | }); | 10 | }); |
12 | 11 | ||
13 | -app.get('/main.html', function(req, res){ | 12 | +app.get('/', function(req, res){ |
14 | res.sendFile(__dirname + '/main.html'); | 13 | res.sendFile(__dirname + '/main.html'); |
15 | -}); | 14 | + res.sendFile(__dirname + '/main.css'); |
16 | - | 15 | +}); |
17 | -app.get('/introduction.html', function(req, res){ | ||
18 | - res.sendFile(__dirname + '/introduction.html'); | ||
19 | -}); | ||
20 | - | ||
21 | -app.get('/calendar.html', function(req, res){ | ||
22 | - res.sendFile(__dirname + '/calendar.html'); | ||
23 | -}); | ||
24 | - | ||
25 | - | ||
26 | -app.get('/simulation.html', function(req, res){ | ||
27 | - res.sendFile(__dirname + '/simulation.html'); | ||
28 | -}); | ||
29 | - | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -78,6 +78,10 @@ body{ | ... | @@ -78,6 +78,10 @@ body{ |
78 | font-size:15px; | 78 | font-size:15px; |
79 | border-radius:5px; | 79 | border-radius:5px; |
80 | } | 80 | } |
81 | +.t1:hover{ | ||
82 | + color:#0053b3; | ||
83 | + background-color: #2E294E; | ||
84 | +} | ||
81 | .row{ | 85 | .row{ |
82 | display:flex; | 86 | display:flex; |
83 | justify-content: space-evenly; | 87 | justify-content: space-evenly; |
... | @@ -102,6 +106,10 @@ body{ | ... | @@ -102,6 +106,10 @@ body{ |
102 | font-size:15px; | 106 | font-size:15px; |
103 | border-radius:5px; | 107 | border-radius:5px; |
104 | } | 108 | } |
109 | +.t2:hover{ | ||
110 | + color:#be4209; | ||
111 | + background-color: #2E294E; | ||
112 | +} | ||
105 | .l{ | 113 | .l{ |
106 | width:33%; | 114 | width:33%; |
107 | height:200px; | 115 | height:200px; |
... | @@ -118,24 +126,26 @@ body{ | ... | @@ -118,24 +126,26 @@ body{ |
118 | text-align:center; | 126 | text-align:center; |
119 | } | 127 | } |
120 | .simul{ | 128 | .simul{ |
129 | + width:50%; | ||
121 | height:150px; | 130 | height:150px; |
122 | display:flex; | 131 | display:flex; |
123 | - float:left; | 132 | + margin: auto; |
124 | - margin-top:50px; | 133 | + text-align:center; |
125 | - margin-left:250px; | ||
126 | -} | ||
127 | -.but{ | ||
128 | - height:150px; | ||
129 | - margin: 0px auto; | ||
130 | } | 134 | } |
131 | .simulbtr{ | 135 | .simulbtr{ |
132 | - width:250px; | 136 | + width:200px; |
133 | height:50px; | 137 | height:50px; |
134 | color: #c9d6de; | 138 | color: #c9d6de; |
135 | border: 1px solid #c9d6de; | 139 | border: 1px solid #c9d6de; |
136 | background: black; | 140 | background: black; |
137 | - font-size:30px; | 141 | + margin-top:50px; |
142 | + font-size:20px; | ||
138 | border-radius:5px; | 143 | border-radius:5px; |
144 | + margin-right:5px; | ||
145 | +} | ||
146 | +.simulbtr:hover{ | ||
147 | + color:#7700ff; | ||
148 | + background-color: #2E294E; | ||
139 | } | 149 | } |
140 | .tb{ | 150 | .tb{ |
141 | padding: 10px 0px 0px 90px; | 151 | padding: 10px 0px 0px 90px; |
... | @@ -155,4 +165,10 @@ td{ | ... | @@ -155,4 +165,10 @@ td{ |
155 | overflow-y: scroll; | 165 | overflow-y: scroll; |
156 | overflow-x: auto; | 166 | overflow-x: auto; |
157 | background-color:white; | 167 | background-color:white; |
168 | +} | ||
169 | +#select_list{ | ||
170 | + width:50%; | ||
171 | + margin: auto; | ||
172 | + text-align:center; | ||
173 | + margin-bottom:50px; | ||
158 | } | 174 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -6,6 +6,7 @@ | ... | @@ -6,6 +6,7 @@ |
6 | <script src = "player.js"></script> | 6 | <script src = "player.js"></script> |
7 | <script src = "temp_algorithm.js"></script> | 7 | <script src = "temp_algorithm.js"></script> |
8 | <script src = "simulation.js"></script> | 8 | <script src = "simulation.js"></script> |
9 | + <script src = "predict.js"></script> | ||
9 | </head> | 10 | </head> |
10 | <body> | 11 | <body> |
11 | <div class="container1"> | 12 | <div class="container1"> |
... | @@ -125,12 +126,11 @@ | ... | @@ -125,12 +126,11 @@ |
125 | <img src="pngs/dusan.png" id="home" class="vs"> | 126 | <img src="pngs/dusan.png" id="home" class="vs"> |
126 | </div> | 127 | </div> |
127 | <div class="simul"> | 128 | <div class="simul"> |
128 | - <div class="but"> | 129 | + <input type="button" onclick="pre_algorithm(hitter_list1, hitter_list2, pitcher1, pitcher2);" class="simulbtr" value="시뮬레이션"> |
129 | - <input type="button" onclick="pre_algorithm(hitter_list1, hitter_list2, pitcher1, pitcher2);" class="simulbtr" value="시뮬레이션"> | 130 | + <input type="button" onclick="add_predict();" class="simulbtr" value="승률예측"> |
130 | - </div> | 131 | + </div> |
131 | - <div class="result"> | 132 | + <div id="select_list"> |
132 | - | 133 | + <select name="pr" id="pr" onclick="predict(this.value, hitter_list1, hitter_list2, pitcher1, pitcher2);"></select> |
133 | - </div> | ||
134 | </div> | 134 | </div> |
135 | <div id="jstest"></div> | 135 | <div id="jstest"></div> |
136 | </div> | 136 | </div> | ... | ... |
... | @@ -193,8 +193,84 @@ function pre_algorithm(hitter_list1, hitter_list2, pitcher1, pitcher2){//algorit | ... | @@ -193,8 +193,84 @@ function pre_algorithm(hitter_list1, hitter_list2, pitcher1, pitcher2){//algorit |
193 | } | 193 | } |
194 | 194 | ||
195 | else{//아웃 | 195 | else{//아웃 |
196 | - out++; | 196 | + var ran = Math.random()*0.2; |
197 | - document.getElementById('jstest').innerHTML+=("아웃!"); | 197 | + if(ran>0.197){ |
198 | + switch(home_away){ | ||
199 | + case 1: | ||
200 | + score1 = score1 + base3 + base2 + base1 + 1; | ||
201 | + break; | ||
202 | + case 2: | ||
203 | + score2 = score2 + base3 + base2 + base1 + 1; | ||
204 | + break; | ||
205 | + } | ||
206 | + base3 = 0; | ||
207 | + base2 = 0; | ||
208 | + base1 = 0; | ||
209 | + document.getElementById('jstest').innerHTML+=("홈런!"); | ||
210 | + }else if(ran>0.1955){ | ||
211 | + switch(home_away){ | ||
212 | + case 1: | ||
213 | + score1 = score1 + base3 + base2 + base1; | ||
214 | + break; | ||
215 | + case 2: | ||
216 | + score2 = score2 + base3 + base2 + base1; | ||
217 | + break; | ||
218 | + } | ||
219 | + base3 = 1; | ||
220 | + base2 = 0; | ||
221 | + base1 = 0; | ||
222 | + document.getElementById('jstest').innerHTML+=("3루타!"); | ||
223 | + }else if(ran>0.18){ | ||
224 | + var n = Math.random(); | ||
225 | + if(n <= 0.4){ | ||
226 | + switch(home_away){ | ||
227 | + case 1: | ||
228 | + score1 = score1 + base3 + base2; | ||
229 | + break; | ||
230 | + case 2: | ||
231 | + score2 = score2 + base3 + base2; | ||
232 | + break; | ||
233 | + } | ||
234 | + base3 = base1; | ||
235 | + base2 = 1; | ||
236 | + base1 = 0; | ||
237 | + document.getElementById('jstest').innerHTML+=("2루타!"); | ||
238 | + | ||
239 | + } | ||
240 | + else if(0.4 < n && n <=0.7){ | ||
241 | + switch(home_away){ | ||
242 | + case 1: | ||
243 | + score1 = score1 + base3 + base2 + base1; | ||
244 | + break; | ||
245 | + case 2: | ||
246 | + score2 = score2 + base3 + base2 + base1; | ||
247 | + break; | ||
248 | + } | ||
249 | + base3 = 0; | ||
250 | + base2 = 1; | ||
251 | + base1 = 0; | ||
252 | + document.getElementById('jstest').innerHTML+=("2루타!"); | ||
253 | + | ||
254 | + } | ||
255 | + else{ | ||
256 | + switch(home_away){ | ||
257 | + case 1: | ||
258 | + score1 = score1 + base3 + base2; | ||
259 | + break; | ||
260 | + case 2: | ||
261 | + score2 = score2 + base3 + base2; | ||
262 | + break; | ||
263 | + } | ||
264 | + base3 = 0; | ||
265 | + base2 = 1; | ||
266 | + base1 = 0; | ||
267 | + | ||
268 | + document.getElementById('jstest').innerHTML+=("2루타!"); | ||
269 | + } | ||
270 | + }else{ | ||
271 | + out++; | ||
272 | + document.getElementById('jstest').innerHTML+=("아웃!"); | ||
273 | + } | ||
198 | 274 | ||
199 | } | 275 | } |
200 | 276 | ||
... | @@ -234,4 +310,6 @@ function pre_algorithm(hitter_list1, hitter_list2, pitcher1, pitcher2){//algorit | ... | @@ -234,4 +310,6 @@ function pre_algorithm(hitter_list1, hitter_list2, pitcher1, pitcher2){//algorit |
234 | 310 | ||
235 | } | 311 | } |
236 | document.getElementById('jstest').innerHTML+=("<br\><br\>"+"최종스코어 : "+score1+"vs"+score2); | 312 | document.getElementById('jstest').innerHTML+=("<br\><br\>"+"최종스코어 : "+score1+"vs"+score2); |
313 | + var score = [score1, score2]; | ||
314 | + return score; | ||
237 | } | 315 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment