블랙잭/script.js: 두 판 사이의 차이
< 블랙잭
백괴게임>Riemann 잔글편집 요약 없음 |
잔글편집 요약 없음 |
||
(사용자 3명의 중간 판 31개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
var title = mw.config.get('wgPageName'); | |||
if (title.slice( 1, 2 ) == "라") { | |||
var blind = true; | |||
var defa = 20; | |||
} else { | |||
var blind = false; | |||
var defa = 10; | |||
} | |||
var mult = defa; | |||
$("#multiplier").text(mult); | |||
var coins = 100; | |||
var wincount = 0; | |||
var losecount = 0; | |||
//$("#console").text("스코어: " + coins + "점"); | |||
$("#console").text("스코어: " + wincount + "승 " + losecount + "패"); | |||
$("#console").append("\n블랙잭에 오신 것을 환영합니다."); | |||
const pcLst = [ | const pcLst = [ | ||
0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAD,0xAE, | 0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAD,0xAE, | ||
20번째 줄: | 24번째 줄: | ||
const pointData = {a1:1,a2:2,a3:3,a4:4,a5:5,a6:6,a7:7,a8:8,a9:9,aa:10,ab:10,ad:10,ae:10,b1:1,b2:2,b3:3,b4:4,b5:5,b6:6,b7:7,b8:8,b9:9,ba:10,bb:10,bd:10,be:10,c1:1,c2:2,c3:3,c4:4,c5:5,c6:6,c7:7,c8:8,c9:9,ca:10,cb:10,cd:10,ce:10,d1:1,d2:2,d3:3,d4:4,d5:5,d6:6,d7:7,d8:8,d9:9,da:10,db:10,dd:10,de:10}; | const pointData = {a1:1,a2:2,a3:3,a4:4,a5:5,a6:6,a7:7,a8:8,a9:9,aa:10,ab:10,ad:10,ae:10,b1:1,b2:2,b3:3,b4:4,b5:5,b6:6,b7:7,b8:8,b9:9,ba:10,bb:10,bd:10,be:10,c1:1,c2:2,c3:3,c4:4,c5:5,c6:6,c7:7,c8:8,c9:9,ca:10,cb:10,cd:10,ce:10,d1:1,d2:2,d3:3,d4:4,d5:5,d6:6,d7:7,d8:8,d9:9,da:10,db:10,dd:10,de:10}; | ||
var pcSet = []; | var pcSet = []; | ||
function hexToChar(x) { | function hexToChar(x) { | ||
return String.fromCharCode(0xD83C) +String.fromCharCode(x + 0xDC00); | return String.fromCharCode(0xD83C) +String.fromCharCode(x + 0xDC00); | ||
29번째 줄: | 32번째 줄: | ||
var dealerD, guestD; | var dealerD, guestD; | ||
$("#deal").click(function(){ | $("#deal").click(function(){ | ||
$("#console").text(" | //$("#console").text("스코어: " + coins + "점"); | ||
$("#console").append(" | $("#console").text("스코어: " + wincount + "승 " + losecount + "패"); | ||
$("#console").append("\n새 판을 엽니다."); | |||
$("#deal").css("display", "none"); | $("#deal").css("display", "none"); | ||
$("#dealerDeck").text(""); | $("#dealerDeck").text(""); | ||
46번째 줄: | 50번째 줄: | ||
return 0; | return 0; | ||
}); | }); | ||
$("#surrender").click(function(){ | |||
surrender(); | |||
return 0; | |||
}); | |||
$("#plus").click(function(){ | |||
inc(); | |||
return 0; | |||
}); | |||
$("#minus").click(function(){ | |||
dec(); | |||
return 0; | |||
}); | |||
$("#reset").click(function(){ | |||
reset(); | |||
return 0; | |||
}); | |||
function reset() { | |||
mult = defa; | |||
$("#multiplier").text(mult); | |||
} | |||
/* | |||
function inc() { | |||
if (mult < 100) { | |||
mult += 2; | |||
} else { | |||
alert("최대 100 코인까지만 걸 수 있습니다."); | |||
} | |||
$("#multiplier").text(mult); | |||
} | |||
function dec() { | |||
if (mult > 2) { | |||
mult -= 2; | |||
} else { | |||
alert("설마 빚을 판돈으로 거시려고요?"); | |||
} | |||
$("#multiplier").text(mult); | |||
} | |||
*/ | |||
function deal() { | function deal() { | ||
dealerD = []; | dealerD = []; | ||
53번째 줄: | 98번째 줄: | ||
dealerD.push(cardPop()); | dealerD.push(cardPop()); | ||
guestD.push(cardPop()); | guestD.push(cardPop()); | ||
$("#dealerDeck").text(hexToChar(dealerD[0]) + "\u{1F0A0}"); | if (blind == true) { | ||
$("#dealerDeck").text("\u{1F0A0}\u{1F0A0}"); | |||
} else { | |||
$("#dealerDeck").text(hexToChar(dealerD[0]) + "\u{1F0A0}"); | |||
} | |||
$("#dealerS").text("?"); | $("#dealerS").text("?"); | ||
$("#guestDeck").text(hexToChar(guestD[0]) + hexToChar(guestD[1])); | if (blind == true) { | ||
$("#guestDeck").text("\u{1F0A0}\u{1F0A0}"); | |||
} else { | |||
$("#guestDeck").text(hexToChar(guestD[0]) + hexToChar(guestD[1])); | |||
} | |||
var guestScore = []; | var guestScore = []; | ||
var score = pointData[hexToStr(guestD[0])] + pointData[hexToStr(guestD[1])]; | var score = pointData[hexToStr(guestD[0])] + pointData[hexToStr(guestD[1])]; | ||
65번째 줄: | 118번째 줄: | ||
$("#hit").css("display", "inline-flex"); | $("#hit").css("display", "inline-flex"); | ||
$("#stand").css("display", "inline-flex"); | $("#stand").css("display", "inline-flex"); | ||
$("#surrender").css("display", "inline-flex"); | |||
} | } | ||
} | } | ||
function hit() { | function hit() { | ||
$("#hit").css("display", "none"); | $("#hit").css("display", "none"); | ||
$("#stand").css("display", "none"); | $("#stand").css("display", "none"); | ||
$("#surrender").css("display", "none"); | |||
guestD.push(cardPop()); | guestD.push(cardPop()); | ||
var guestDeq = ""; | var guestDeq = ""; | ||
75번째 줄: | 130번째 줄: | ||
guestDeq += hexToChar(guestD[i]); | guestDeq += hexToChar(guestD[i]); | ||
} | } | ||
$("#guestDeck").text(guestDeq); | if (blind == true) { | ||
$("#guestDeck").text("\u{1F0A0}".repeat(guestDeq.length / 2)); | |||
} else { | |||
$("#guestDeck").text(guestDeq); | |||
} | |||
var guestScore = []; | var guestScore = []; | ||
var score = 0; | var score = 0; | ||
84번째 줄: | 143번째 줄: | ||
$("#guestS").text(score); | $("#guestS").text(score); | ||
if (score == 21 || (score == 11 && guestScore.includes(1))) { | if (score == 21 || (score == 11 && guestScore.includes(1))) { | ||
$("#console").append(" | $("#console").append("\n21점이므로 자동으로 스탠드를 외쳤습니다."); | ||
stand(dealerD,guestD); | stand(dealerD,guestD); | ||
} else if (score > 21) { | } else if (score > 21) { | ||
97번째 줄: | 156번째 줄: | ||
$("#hit").css("display", "none"); | $("#hit").css("display", "none"); | ||
$("#stand").css("display", "none"); | $("#stand").css("display", "none"); | ||
$("#surrender").css("display", "none"); | |||
var dScore = 0; | var dScore = 0; | ||
var dealerScore = [] | var dealerScore = []; | ||
for (i = 0; i < dealerD.length; i++) { | for (i = 0; i < dealerD.length; i++) { | ||
dealerScore.push(pointData[hexToStr(dealerD[i])]); | dealerScore.push(pointData[hexToStr(dealerD[i])]); | ||
105번째 줄: | 165번째 줄: | ||
while (dScore < 17) { | while (dScore < 17) { | ||
dealerD.push(cardPop()); | dealerD.push(cardPop()); | ||
$("#console").append(" | $("#console").append("\n딜러가 카드를 뽑았습니다."); | ||
dealerScore = []; | dealerScore = []; | ||
dScore = 0; | dScore = 0; | ||
114번째 줄: | 174번째 줄: | ||
} | } | ||
} | } | ||
var dealerDeq = ""; | var dealerDeq = ""; | ||
for (i = 0; i < dealerD.length; i++) { | for (i = 0; i < dealerD.length; i++) { | ||
129번째 줄: | 188번째 줄: | ||
$("#guestS").text(score); | $("#guestS").text(score); | ||
if (score > 21) { | if (score > 21) { | ||
bust() | bust(); | ||
} else if (dScore > 21) { | } else if (dScore > 21) { | ||
win() | $("#console").append("\n딜러의 버스트."); | ||
win(); | |||
} else { | } else { | ||
$("#console").append("\n딜러의 스탠드."); | |||
compare(dealerD,guestD); | compare(dealerD,guestD); | ||
} | } | ||
151번째 줄: | 212번째 줄: | ||
} | } | ||
if (dScore < 12 && dealerScore.includes(1)) { | if (dScore < 12 && dealerScore.includes(1)) { | ||
dScore += 10 | dScore += 10; | ||
} | } | ||
if (score < 12 && guestScore.includes(1)) { | if (score < 12 && guestScore.includes(1)) { | ||
score += 10 | score += 10; | ||
} | } | ||
$("#dealerS").text(dScore); | $("#dealerS").text(dScore); | ||
$("#guestS").text(score); | $("#guestS").text(score); | ||
if (dScore > score) { | if (dScore > score) { | ||
lose() | lose(); | ||
} else if (dScore == score) { | } else if (dScore == score) { | ||
push() | push(); | ||
} else { | } else { | ||
win() | win(); | ||
} | } | ||
return 0; | return 0; | ||
} | } | ||
function win() { | function win() { | ||
$("#console").append(" | $("#console").append("\n축하합니다! 이겼습니다."); | ||
$("#console").append(" | //$("#console").append("\n" + mult + "점을 얻었습니다."); | ||
coins += | //coins += mult; | ||
wincount += 1; | |||
$("#deal").css("display", "inline-flex"); | $("#deal").css("display", "inline-flex"); | ||
return 0; | return 0; | ||
} | } | ||
function lose() { | function lose() { | ||
$("#console").append(" | $("#console").append("\n졌습니다..."); | ||
$("#console").append(" | //$("#console").append("\n" + mult + "점을 잃었습니다."); | ||
coins += | //coins -= mult; | ||
losecount += 1; | |||
$("#deal").css("display", "inline-flex"); | $("#deal").css("display", "inline-flex"); | ||
publicAd(); | |||
return 0; | return 0; | ||
} | } | ||
function push() { | function push() { | ||
$("#console").append(" | $("#console").append("\n비겼습니다."); | ||
$("#deal").css("display", "inline-flex"); | |||
return 0; | |||
} | |||
function surrender() { | |||
$("#hit").css("display", "none"); | |||
$("#stand").css("display", "none"); | |||
$("#surrender").css("display", "none"); | |||
$("#console").append("\n이번 판을 포기하셨습니다 (패배로 처리됩니다)."); | |||
//$("#console").append("\n" + (0.5 * mult) + "점을 잃었습니다."); | |||
//coins -= 0.5 * mult; | |||
losecount += 1; | |||
$("#deal").css("display", "inline-flex"); | $("#deal").css("display", "inline-flex"); | ||
publicAd(); | |||
return 0; | return 0; | ||
} | } | ||
function bust() { | function bust() { | ||
$("#console").append(" | $("#console").append("\n버스트! 유감입니다. 졌습니다..."); | ||
$("#console").append(" | //$("#console").append("\n" + mult + "점을 잃었습니다."); | ||
coins -= | //coins -= mult; | ||
losecount += 1; | |||
$("#hit").css("display", "none"); | $("#hit").css("display", "none"); | ||
$("#stand").css("display", "none"); | $("#stand").css("display", "none"); | ||
$("#deal").css("display", "inline-flex"); | $("#deal").css("display", "inline-flex"); | ||
publicAd(); | |||
return 0; | return 0; | ||
} | } | ||
function jack() { | function jack() { | ||
$("#console").append(" | $("#console").append("\n블랙잭 달성! 축하합니다. 이겼습니다!"); | ||
$("#console").append(" | //$("#console").append("\n" + (1.5 * mult) + "점을 획득했습니다."); | ||
coins += | //coins += 1.5 * mult; | ||
wincount += 1; | |||
$("#deal").css("display", "inline-flex"); | $("#deal").css("display", "inline-flex"); | ||
return 0; | return 0; | ||
} | } | ||
function publicAd() { | |||
if (coins < 0) { | |||
$("#notice").text("땀 흘려 번 돈이 아름답습니다."); | |||
} | |||
return 0; | |||
} | |||
function cardPop() { | function cardPop() { | ||
var j, ret; | var j, ret; | ||
210번째 줄: | 294번째 줄: | ||
return ret; | return ret; | ||
} | } | ||
2024년 6월 17일 (월) 21:07 기준 최신판
var title = mw.config.get('wgPageName');
if (title.slice( 1, 2 ) == "라") {
var blind = true;
var defa = 20;
} else {
var blind = false;
var defa = 10;
}
var mult = defa;
$("#multiplier").text(mult);
var coins = 100;
var wincount = 0;
var losecount = 0;
//$("#console").text("스코어: " + coins + "점");
$("#console").text("스코어: " + wincount + "승 " + losecount + "패");
$("#console").append("\n블랙잭에 오신 것을 환영합니다.");
const pcLst = [
0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAD,0xAE,
0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBD,0xBE,
0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCD,0xCE,
0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDD,0xDE];
const pointData = {a1:1,a2:2,a3:3,a4:4,a5:5,a6:6,a7:7,a8:8,a9:9,aa:10,ab:10,ad:10,ae:10,b1:1,b2:2,b3:3,b4:4,b5:5,b6:6,b7:7,b8:8,b9:9,ba:10,bb:10,bd:10,be:10,c1:1,c2:2,c3:3,c4:4,c5:5,c6:6,c7:7,c8:8,c9:9,ca:10,cb:10,cd:10,ce:10,d1:1,d2:2,d3:3,d4:4,d5:5,d6:6,d7:7,d8:8,d9:9,da:10,db:10,dd:10,de:10};
var pcSet = [];
function hexToChar(x) {
return String.fromCharCode(0xD83C) +String.fromCharCode(x + 0xDC00);
}
function hexToStr(x) {
return x.toString(16);
}
var dealerD, guestD;
$("#deal").click(function(){
//$("#console").text("스코어: " + coins + "점");
$("#console").text("스코어: " + wincount + "승 " + losecount + "패");
$("#console").append("\n새 판을 엽니다.");
$("#deal").css("display", "none");
$("#dealerDeck").text("");
$("#guestDeck").text("");
pcSet = Object.create(pcLst);
deal();
return 0;
});
$("#hit").click(function(){
hit();
return 0;
});
$("#stand").click(function(){
stand();
return 0;
});
$("#surrender").click(function(){
surrender();
return 0;
});
$("#plus").click(function(){
inc();
return 0;
});
$("#minus").click(function(){
dec();
return 0;
});
$("#reset").click(function(){
reset();
return 0;
});
function reset() {
mult = defa;
$("#multiplier").text(mult);
}
/*
function inc() {
if (mult < 100) {
mult += 2;
} else {
alert("최대 100 코인까지만 걸 수 있습니다.");
}
$("#multiplier").text(mult);
}
function dec() {
if (mult > 2) {
mult -= 2;
} else {
alert("설마 빚을 판돈으로 거시려고요?");
}
$("#multiplier").text(mult);
}
*/
function deal() {
dealerD = [];
guestD = [];
dealerD.push(cardPop());
guestD.push(cardPop());
dealerD.push(cardPop());
guestD.push(cardPop());
if (blind == true) {
$("#dealerDeck").text("\u{1F0A0}\u{1F0A0}");
} else {
$("#dealerDeck").text(hexToChar(dealerD[0]) + "\u{1F0A0}");
}
$("#dealerS").text("?");
if (blind == true) {
$("#guestDeck").text("\u{1F0A0}\u{1F0A0}");
} else {
$("#guestDeck").text(hexToChar(guestD[0]) + hexToChar(guestD[1]));
}
var guestScore = [];
var score = pointData[hexToStr(guestD[0])] + pointData[hexToStr(guestD[1])];
$("#guestS").text(score);
if ((pointData[hexToStr(guestD[0])] == 1 && pointData[hexToStr(guestD[1])] == 10) || (pointData[hexToStr(guestD[0])] == 10 && pointData[hexToStr(guestD[1])] == 1)) {
$("#guestS").text(21);
jack();
} else {
$("#hit").css("display", "inline-flex");
$("#stand").css("display", "inline-flex");
$("#surrender").css("display", "inline-flex");
}
}
function hit() {
$("#hit").css("display", "none");
$("#stand").css("display", "none");
$("#surrender").css("display", "none");
guestD.push(cardPop());
var guestDeq = "";
for (i = 0; i < guestD.length; i++) {
guestDeq += hexToChar(guestD[i]);
}
if (blind == true) {
$("#guestDeck").text("\u{1F0A0}".repeat(guestDeq.length / 2));
} else {
$("#guestDeck").text(guestDeq);
}
var guestScore = [];
var score = 0;
for (i = 0; i < guestD.length; i++) {
guestScore.push(pointData[hexToStr(guestD[i])]);
score += guestScore[i];
}
$("#guestS").text(score);
if (score == 21 || (score == 11 && guestScore.includes(1))) {
$("#console").append("\n21점이므로 자동으로 스탠드를 외쳤습니다.");
stand(dealerD,guestD);
} else if (score > 21) {
bust();
} else {
$("#hit").css("display", "inline-flex");
$("#stand").css("display", "inline-flex");
}
return 0;
}
function stand() {
$("#hit").css("display", "none");
$("#stand").css("display", "none");
$("#surrender").css("display", "none");
var dScore = 0;
var dealerScore = [];
for (i = 0; i < dealerD.length; i++) {
dealerScore.push(pointData[hexToStr(dealerD[i])]);
dScore += dealerScore[i];
}
while (dScore < 17) {
dealerD.push(cardPop());
$("#console").append("\n딜러가 카드를 뽑았습니다.");
dealerScore = [];
dScore = 0;
for (i = 0; i < dealerD.length; i++) {
dealerScore.push(pointData[hexToStr(dealerD[i])]);
dScore += dealerScore[i];
dealerDeq += hexToChar(dealerD[i]);
}
}
var dealerDeq = "";
for (i = 0; i < dealerD.length; i++) {
dealerDeq += hexToChar(dealerD[i]);
}
$("#dealerS").text(dScore);
$("#dealerDeck").text(dealerDeq);
guestScore = [];
score = 0;
for (i = 0; i < guestD.length; i++) {
guestScore.push(pointData[hexToStr(guestD[i])]);
score += guestScore[i];
}
$("#guestS").text(score);
if (score > 21) {
bust();
} else if (dScore > 21) {
$("#console").append("\n딜러의 버스트.");
win();
} else {
$("#console").append("\n딜러의 스탠드.");
compare(dealerD,guestD);
}
return 0;
}
function compare() {
var dealerScore = [];
var dScore = 0;
for (i = 0; i < dealerD.length; i++) {
dealerScore.push(pointData[hexToStr(dealerD[i])]);
dScore += dealerScore[i];
}
var guestScore = [];
var score = 0;
for (i = 0; i < guestD.length; i++) {
guestScore.push(pointData[hexToStr(guestD[i])]);
score += guestScore[i];
}
if (dScore < 12 && dealerScore.includes(1)) {
dScore += 10;
}
if (score < 12 && guestScore.includes(1)) {
score += 10;
}
$("#dealerS").text(dScore);
$("#guestS").text(score);
if (dScore > score) {
lose();
} else if (dScore == score) {
push();
} else {
win();
}
return 0;
}
function win() {
$("#console").append("\n축하합니다! 이겼습니다.");
//$("#console").append("\n" + mult + "점을 얻었습니다.");
//coins += mult;
wincount += 1;
$("#deal").css("display", "inline-flex");
return 0;
}
function lose() {
$("#console").append("\n졌습니다...");
//$("#console").append("\n" + mult + "점을 잃었습니다.");
//coins -= mult;
losecount += 1;
$("#deal").css("display", "inline-flex");
publicAd();
return 0;
}
function push() {
$("#console").append("\n비겼습니다.");
$("#deal").css("display", "inline-flex");
return 0;
}
function surrender() {
$("#hit").css("display", "none");
$("#stand").css("display", "none");
$("#surrender").css("display", "none");
$("#console").append("\n이번 판을 포기하셨습니다 (패배로 처리됩니다).");
//$("#console").append("\n" + (0.5 * mult) + "점을 잃었습니다.");
//coins -= 0.5 * mult;
losecount += 1;
$("#deal").css("display", "inline-flex");
publicAd();
return 0;
}
function bust() {
$("#console").append("\n버스트! 유감입니다. 졌습니다...");
//$("#console").append("\n" + mult + "점을 잃었습니다.");
//coins -= mult;
losecount += 1;
$("#hit").css("display", "none");
$("#stand").css("display", "none");
$("#deal").css("display", "inline-flex");
publicAd();
return 0;
}
function jack() {
$("#console").append("\n블랙잭 달성! 축하합니다. 이겼습니다!");
//$("#console").append("\n" + (1.5 * mult) + "점을 획득했습니다.");
//coins += 1.5 * mult;
wincount += 1;
$("#deal").css("display", "inline-flex");
return 0;
}
function publicAd() {
if (coins < 0) {
$("#notice").text("땀 흘려 번 돈이 아름답습니다.");
}
return 0;
}
function cardPop() {
var j, ret;
j = Math.floor(Math.random() * pcSet.length);
ret = pcSet[j];
pcSet.splice(j,1);
return ret;
}