재미있는 게시판

사용법은 알아서


var options={width:500,height:500}

var sounds={charge:{url:"/static/thermometer/sounds/charge.mp3"}}

function playSound(obj){if(obj.el&&!isTurnOffSound){obj.promise=obj.el.play();if(obj.promise!==undefined){obj.promise.then(_=>{}).catch(error=>{});}}}

function stopSound(obj){if(obj.el!==undefined){try{obj.el.pause();obj.el.currentTime=0;}catch(e){};}}

var isTurnOffSound;function toggleSound(){var turnOffSound=Cookies.get('turnOffSound');if(isTurnOffSound===undefined){isTurnOffSound=!turnOffSound;$("#soundOn, #soundOff").click(function(){toggleSound();});}

if(isTurnOffSound){Cookies.remove('turnOffSound');isTurnOffSound=false;$("#soundOn").show();$("#soundOff").hide();}

else{Cookies.set('turnOffSound',true,{secure:true});isTurnOffSound=true;$("#soundOn").hide();$("#soundOff").show();for(var i in sounds){if(sounds.hasOwnProperty(i)){stopSound(sounds[i]);}}}}

function scaleGame(){var game=$(".game");var ratio=game.parent().parent().width()/options.width;game.css({'transform':'scale('+ratio+')'});game.parent().width(options.width*ratio).height(options.height*ratio);}

function now(){return Math.round((new Date()).getTime()/1000);}

let lastTime,lastTurn;function eachSecond(){var currentTime=now();if(!lastTime)lastTime=currentTime-1;result.remain-=currentTime-lastTime;lastTime=currentTime;var el=$("#remain-time-message");if(el)el.html("("+result.remain+"초)");if(result.remain<5&&result.remain>0){createMessage(true);}

else if(result.remain<=0){clearTimeout(gameTimer);getFromServer();}}

function calcResult(num){num=(num==100?0:num/100);return{'x2':num*2,'x4':Math.floor(Math.pow(num,3)*4*100)/100,'x8':Math.floor(Math.pow(num,7)*8*100)/100};}

var result={};let gameTimer,retry;function getFromServer(){clearTimeout(gameTimer);$.ajax({url:"/api/thermometer.json",dataType:"json"}).done(function(gameinfo){if(result&&result.nextTurn!==gameinfo.nextTurn){$("[name='point']").val("");}

gameinfo.rv=100-gameinfo.v;result=gameinfo;if(!result||!result.remain||result.remain<0)

retry=retry+1;else retry=0;if(retry===0){createMessage();gameTimer=setInterval(function(){eachSecond();},1000);}}).fail(function(){result=undefined;$("[name='point']").val("");createMessage();if(retry<5)

setInterval(function(){getFromServer();},3000);retry+=1;});}

var submitting=false;function doPlaySubmit(){var turn=$("[name='turn']").val();var type=$("[name='type']").val();var value=$("[name='value']").val();if(!turn||!type||!value)

return false;if(submitting){alert("게임 참가가 진행중입니다.");return false;}

submitting=true;return true;}

function doPlay(type,value){if(!result){alert("게임이 로드되지 않았습니다.");return;}

var point=$("[name='point']").val();point=point.replace(/\,/g,"");if(point==""){alert("Pt. 입력해주세요.");return;}

if(point<100||point>1000000){alert("Pt.는 100~1,000,000 사이의 값이여야 합니다.");return;}

if(point!=parseInt(point)){alert("Pt.는 숫자만 입력이 가능합니다.");return;}

$("[name='type']").val(type);$("[name='value']").val(value);$("#doplay").submit();}

function createMessage(reset=false){var message={};if(!result||result.remain<0){message.info='게임 정보를 가져오지 못하였습니다.';}

else if(reset){updateInfoSide({v:0,rv:100,hash:"waiting"});}

else if(lastTurn!==result.turn&&result.remain>55){message.info=result.turn+'회차 진행중';start();}

else{message.info=result.nextTurn+'회차 대기중 <span id="remain-time-message">('+result.remain+'초)<span>';updateInfoSide(result);}

$(".game > .main > .info").html(message.info);$("[name='turn']").val(result.nextTurn);}

function start(){if(!isTurnOffSound)playSound(sounds.charge);updateInfoHash(result);$(".meter").animate({height:result.v+"%"},{duration:4000,progress:function(animation,progress,msRemaining){var data={v:Math.round(result.v*progress),rv:Math.round(100-result.v*progress)};updateInfoSideCalc(data);},complete:function(){lastTurn=result.turn;createMessage();

$(".info-side-list>div:not(:contains("+result.turn+"회차:"+"))").prepend(result.turn+"회차: "+result.v+"°C("+(result.v%2?"홀":"짝")+")/"+result.rv+"°C(R)<br>");

if(result.v%2){//홀

    $('.form-control').eq(0).val(100);//도박 성공시 수치

    $('.btn-danger').eq(0).click();

}else{//짝

    $('.form-control').eq(0).val($('.play-list .vcol').eq(6).text().replace(',','')*2);

    $('.btn-danger').eq(0).click();

}

}});}

function updateInfoSide(data){$(".meter").height(data.v+"%");updateInfoHash(data);updateInfoSideCalc(data);}

function updateInfoHash(data){$(".info-side:eq(0)").text("hash: "+data.hash);}

function updateInfoSideCalc(data){var calc=calcResult(data.v);var rCalc=calcResult(data.rv);if(data.v>=100)

$(".info-side:eq(2)").text("온도계가 폭발하였습니다.");else

$(".info-side:eq(2)").text(data.v+"°C("+(data.v%2?"홀":"짝")+") / "+(data.rv==100?"폭발":data.rv)+"°C(R)");$(".info-side:eq(3)").text("2x: "+calc.x2+" / 2x(R):"+rCalc.x2);$(".info-side:eq(4)").text("4x: "+calc.x4+" / 4x(R):"+rCalc.x4);$(".info-side:eq(5)").text("8x: "+calc.x8+" / 8x(R):"+rCalc.x8);}

function preload(){var html='<div class="meter"></div>'

for(var i=0;i<9;i++){html+='<div class="bar half"></div><div class="bar"></div>';}

html+='<div class="bar half"></div>';$(html).appendTo(".thermometer");for(var i in sounds){if(sounds.hasOwnProperty(i)){sounds[i].el=new Audio(sounds[i].url);}}

getFromServer();}

(function($){preload();scaleGame();toggleSound();$("input[name=point]").keyup(function(){$(this).val(numberWithCommas($(this).val()));});$("#doplay").on("submit",function(){return doPlaySubmit();})}(jQuery));$(window).on('resize',function(){scaleGame();});