사용자:Bd3076/common.js: 두 판 사이의 차이
백괴게임>Bd3076 (플러그인 switched_maze설치) |
백괴게임>Bd3076 (플러그인 switched_maze설치) |
||
1번째 줄: | 1번째 줄: | ||
/** 플러그인 switched_maze*************************** | /** 플러그인 switched_maze*************************** | ||
* 스위치 미로 게임 | * 스위치 미로 게임 | ||
* 버전 => 1. | * 버전 => 1.01 | ||
* 작성자 : [[사용자:Bd3076|Bd3076]] | * 작성자 : [[사용자:Bd3076|Bd3076]] | ||
* JSON => switched_maze = {"name":"switched_maze","descript":"스위치 미로 게임","version":"1. | * JSON => switched_maze = {"name":"switched_maze","descript":"스위치 미로 게임","version":"1.01","local":true,"creat":"Bd3076","state":"스위치 미로/plugin","executable":true}; | ||
*/ | */ | ||
function plugin_switched_maze(){ | function plugin_switched_maze(){ | ||
36번째 줄: | 39번째 줄: | ||
var stopWatchS = 0; | var stopWatchS = 0; | ||
var stopWatchSS = 0; | var stopWatchSS = 0; | ||
var moves; | |||
var addStopwatch = function(){ | var addStopwatch = function(){ | ||
133번째 줄: | 138번째 줄: | ||
ctx.fillText("레벨 " + level + " 클리어!", 240, 200); | ctx.fillText("레벨 " + level + " 클리어!", 240, 200); | ||
ctx.fillText("걸린 시간: " + stopWatchH + "시간 " + stopWatchM + "분 " + stopWatchS + "." + stopWatchSS + "초", 240, 240); | ctx.fillText("걸린 시간: " + stopWatchH + "시간 " + stopWatchM + "분 " + stopWatchS + "." + stopWatchSS + "초", 240, 240); | ||
ctx.fillText("다음 레벨로 넘어가시려면 [Space]를 누르세요.", 240, | ctx.fillText("움직인 횟수: " + moves + "회", 240, 280); | ||
ctx.fillText("다음 레벨로 넘어가시려면 [Space]를 누르세요.", 240, 320); | |||
setCookie("level", level+1); | setCookie("level", level+1); | ||
waitToPlayLevel(level+1); | waitToPlayLevel(level+1); | ||
265번째 줄: | 271번째 줄: | ||
if(levelData[level].lever_open[i] < 0) levelData[level].lever_open[i] = 0; | if(levelData[level].lever_open[i] < 0) levelData[level].lever_open[i] = 0; | ||
} | } | ||
moves++; | |||
if(keyPress[37] && x!=0 && road&4){ | if(keyPress[37] && x!=0 && road&4){ | ||
console.log("pressed left"); | console.log("pressed left"); | ||
299번째 줄: | 306번째 줄: | ||
var playLevel = function(level){ | var playLevel = function(level){ | ||
var thisLevelData = levelData[level]; | var thisLevelData = levelData[level]; | ||
moves = 0; | |||
setStopwatch(); | setStopwatch(); | ||
addStopwatch(); | addStopwatch(); | ||
322번째 줄: | 330번째 줄: | ||
ctx.fillText("스위치나 레버를 누르려면 [Space]를 누르세요.", 240, 270); | ctx.fillText("스위치나 레버를 누르려면 [Space]를 누르세요.", 240, 270); | ||
ctx.fillText("플레이하려면 [Space]를 누르세요.", 240, 360); | ctx.fillText("플레이하려면 [Space]를 누르세요.", 240, 360); | ||
waitToPlayLevel(level, 0); | |||
} | } | ||
} | } | ||
334번째 줄: | 342번째 줄: | ||
playLevel(level); | playLevel(level); | ||
} | } | ||
else if(mode==1 && keyPress[38]) playLevel(0); | else if(mode==1 && keyPress[38]){ | ||
else setTimeout(waitToPlayLevel, 100, level, mode); | playLevel(0); | ||
return; | |||
} | |||
else{ | |||
setTimeout(waitToPlayLevel, 100, level, mode); | |||
return; | |||
} | |||
} | } | ||
var lastLevel = function(){ | var lastLevel = function(){ | ||
ctx.fillStyle = "white"; | ctx.fillStyle = "white"; | ||
ctx.fillText("죄송합니다. 더 이상의 레벨이 준비되어 있지 않습니다.", 240, | ctx.fillText("죄송합니다. 더 이상의 레벨이 준비되어 있지 않습니다.", 240, 380); | ||
ctx.fillText("빠른 시일 내에 새로운 레벨을 준비하겠습니다. 감사합니다.", 240, | ctx.fillText("빠른 시일 내에 새로운 레벨을 준비하겠습니다. 감사합니다.", 240, 420); | ||
} | } | ||
2018년 10월 26일 (금) 17:08 판
/** 플러그인 switched_maze***************************
* 스위치 미로 게임
* 버전 => 1.01
* 작성자 : [[사용자:Bd3076|Bd3076]]
* JSON => switched_maze = {"name":"switched_maze","descript":"스위치 미로 게임","version":"1.01","local":true,"creat":"Bd3076","state":"스위치 미로/plugin","executable":true};
*/
function plugin_switched_maze(){
if($("[data-name='switched_maze']").length >= 1){
// 이부분에 코드 입력 //
var keyPress = new Array(128);
document.onkeydown = function(e){
e = e || window.event;
keyPress[e.keyCode] = 1;
}
document.onkeyup = function(e){
e = e || window.event;
keyPress[e.keyCode] = 0;
}
var cvs = document.getElementById("cvs");
cvs.innerHTML = ('<canvas id="canvas" width="480" height="480"></canvas>')
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
ctx.fillStyle = "black";
ctx.fillRect(0, 0, 500, 500);
var stopWatchH = 0;
var stopWatchM = 0;
var stopWatchS = 0;
var stopWatchSS = 0;
var moves;
var addStopwatch = function(){
stopWatchSS++;
if(stopWatchSS == 10){
stopWatchS++;
stopWatchSS = 0;
if(stopWatchS == 60){
stopWatchM++;
stopWatchS = 0;
if(stopWatchM == 60){
stopWatchH++;
stopWatchM = 0;
}
}
}
}
var setStopwatch = function(){
stopwatchH = 0;
stopwatchM = 0;
stopwatchS = 0;
stopwatchSS = 0;
setInterval(addStopwatch, 100);
}
var setCookie = function(name, value) {
var date = new Date();
date.setTime(date.getTime() + 12345678987654321);
document.cookie = name + '=' + value + ';expires=' + date.toUTCString() + ';path=/';
};
var getCookie = function(name) {
var value = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
return value? value[2] : null;
};
// road variable
// 2^0: right (+x)
// 2^1: down (-y)
// 2^2: left (-x)
// 2^3: up (+y)
var levelCount = 1;
var levelData = new Array(levelCount);
levelData[0] = {
x: 4,
y: 4,
startX: 0,
startY: 0,
finishX: 1,
finishY: 0,
road: [
[8, 3, 5, 12],
[11, 4, 1, 14],
[10, 8, 1, 6],
[2, 3, 5, 4]
],
switch_road: [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[[{dir:1, num:2}], [{dir:4, num:2}],0,0]
],
switch_num: [
[0, 0, 0, 0],
[0, 0, 0, 0],
[2, 0, 0, 0],
[0, 0, 0, 0]
],
lever_road: [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, [{dir:8, num:2}], 0],
[0, 0, [{dir:2, num:2}], 0]
],
lever: [
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 2]
],
lever_point: [
0, 0, 3
],
switch_open: [
0, 0, 0
],
lever_open: [
0, 0, 0
]
};
var levelClear = function(level){
ctx.fillStyle = "white";
ctx.fillText("레벨 " + level + " 클리어!", 240, 200);
ctx.fillText("걸린 시간: " + stopWatchH + "시간 " + stopWatchM + "분 " + stopWatchS + "." + stopWatchSS + "초", 240, 240);
ctx.fillText("움직인 횟수: " + moves + "회", 240, 280);
ctx.fillText("다음 레벨로 넘어가시려면 [Space]를 누르세요.", 240, 320);
setCookie("level", level+1);
waitToPlayLevel(level+1);
}
var displayRoom = function(level, x, y){
ctx.fillStyle = "black";
ctx.fillRect(0, 0, 500, 500);
console.log("x: " + x + ", y: " + y + ", road: " + levelData[level].road[y][x]);
if(x == levelData[level].finishX && y == levelData[level].finishY){
levelClear(level);
return;
}
var road = levelData[level].road[y][x];
var switch_road = levelData[level].switch_road[y][x];
var switch_num = levelData[level].switch_num[y][x];
var lever_road = levelData[level].lever_road[y][x];
var lever = levelData[level].lever[y][x];
var roadRight = (road & 1);
var roadDown = (road & 2) / 2;
var roadLeft = (road & 4) / 4;
var roadUp = (road & 8) / 8;
for(var i=0; i<switch_road.length; i++){
var t_sdir = switch_road[i].dir;
if(t_sdir & 1) roadRight = levelData[level].switch_open[switch_road[i].num] ? 1 : 2;
if(t_sdir & 2) roadDown = levelData[level].switch_open[switch_road[i].num] ? 1 : 2;
if(t_sdir & 4) roadLeft = levelData[level].switch_open[switch_road[i].num] ? 1 : 2;
if(t_sdir & 8) roadUp = levelData[level].switch_open[switch_road[i].num] ? 1 : 2;
}
for(var i=0; i<lever_road.length; i++){
var t_ldir = lever_road[i].dir;
if(t_ldir & 1) roadRight = levelData[level].lever_open[lever_road[i].num] ? 1 : 3;
if(t_ldir & 2) roadDown = levelData[level].lever_open[lever_road[i].num] ? 1 : 3;
if(t_ldir & 4) roadLeft = levelData[level].lever_open[lever_road[i].num] ? 1 : 3;
if(t_ldir & 8) roadUp = levelData[level].lever_open[lever_road[i].num] ? 1 : 3;
}
ctx.fillStyle = "white";
ctx.fillRect(120, 120, 240, 240);
if(roadRight){
ctx.fillStyle = roadRight == 1 ? "white" : roadRight == 2 ? "blue" : "purple";
ctx.fillRect(360, 180, 120, 120);
}
if(roadDown){
ctx.fillStyle = roadDown == 1 ? "white" : roadDown == 2 ? "blue" : "purple";
ctx.fillRect(180, 360, 120, 120);
}
if(roadLeft){
ctx.fillStyle = roadLeft == 1 ? "white" : roadLeft == 2 ? "blue" : "purple";
ctx.fillRect(0, 180, 120, 120);
}
if(roadUp){
ctx.fillStyle = roadUp == 1 ? "white" : roadUp == 2 ? "blue" : "purple";
ctx.fillRect(180, 0, 120, 120);
}
if(roadRight == 1) road |= 1;
if(roadDown == 1) road |= 2;
if(roadLeft == 1) road |= 4;
if(roadUp == 1) road |= 8;
setTimeout(waitForKey, 200, level, x, y, road);
if(levelData[level].switch_num[y][x]){
ctx.fillStyle = "blue";
if(levelData[level].switch_open[levelData[level].switch_num[y][x]]){
ctx.fillRect(130, 130, 50, 220);
}
else{
ctx.fillRect(140, 140, 30, 200);
}
}
if(levelData[level].lever[y][x]){
ctx.fillStyle = "purple";
if(levelData[level].lever_open[levelData[level].lever[y][x]]){
ctx.fillRect(300, 130, 50, 220);
}
else{
ctx.fillRect(310, 140, 30, 200);
}
}
}
var counter = 0;
var waitForKey = function(level, x, y, road){
counter++;
var canPressSpace;
if(levelData[level].switch_num[y][x] == 0 && levelData[level].lever[y][x] == 0){
canPressSpace = 0;
}
else{
canPressSpace = 1;
}
if((!keyPress[32] || !canPressSpace) &&
(!keyPress[37] || x==0 || !(road&4)) &&
(!keyPress[38] || y==levelData[level].y-1 || !(road&8)) &&
(!keyPress[39] || x==levelData[level].x-1 || !(road&1)) &&
(!keyPress[40] || y==0 || !(road&2))){
setTimeout(waitForKey, 30, level, x, y, road);
counter--;
return;
}
else{
if(keyPress[32] && canPressSpace){
console.log("pressed space");
keyPress[32] = 0;
if(levelData[level].switch_num[y][x] > 0){
levelData[level].switch_open[levelData[level].switch_num[y][x]] = 1 - levelData[level].switch_open[levelData[level].switch_num[y][x]];
displayRoom(level, x, y);
return;
}
if(levelData[level].lever[y][x] > 0){
levelData[level].lever_open[levelData[level].lever[y][x]] = levelData[level].lever_point[levelData[level].lever[y][x]];
displayRoom(level, x, y);
return;
}
counter--;
return;
}
else{
for(var i=0; i<levelData[level].lever_open.length; i++){
levelData[level].lever_open[i]--;
if(levelData[level].lever_open[i] < 0) levelData[level].lever_open[i] = 0;
}
moves++;
if(keyPress[37] && x!=0 && road&4){
console.log("pressed left");
displayRoom(level, x-1, y);
keyPress[37] = 0;
counter--;
return;
}
else if(keyPress[38] && y!=levelData[level].y-1 && road&8){
console.log("pressed up");
displayRoom(level, x, y+1);
keyPress[38] = 0;
counter--;
return;
}
else if(keyPress[39] && x!=levelData[level].x-1 && road&1){
console.log("pressed down");
displayRoom(level, x+1, y);
keyPress[39] = 0;
counter--;
return;
}
else if(keyPress[40] && y!=0 && road&2){
console.log("pressed right");
displayRoom(level, x, y-1);
keyPress[40] = 0;
counter--;
return;
}
}
}
}
var playLevel = function(level){
var thisLevelData = levelData[level];
moves = 0;
setStopwatch();
addStopwatch();
console.log(thisLevelData);
displayRoom(level, thisLevelData.startX, thisLevelData.startY);
}
var main = function(){
ctx.font = "15px Dotum";
ctx.textAlign = "center";
ctx.fillStyle = "white";
var level = getCookie("level");
if(level != null){
ctx.fillText("저장된 파일이 있습니다. 이어 플레이하시겠습니까?", 240, 200);
ctx.fillText("예: [Space], 아니오: [↑]", 240, 240);
waitToPlayLevel(level, 1);
}
else{
level = 0;
ctx.fillText("스위치 미로", 240, 120);
ctx.fillText("Bd3076", 240, 150);
ctx.fillText("움직이려면 [방향키]를 누르세요.", 240, 240);
ctx.fillText("스위치나 레버를 누르려면 [Space]를 누르세요.", 240, 270);
ctx.fillText("플레이하려면 [Space]를 누르세요.", 240, 360);
waitToPlayLevel(level, 0);
}
}
var waitToPlayLevel = function(level, mode){
if(keyPress[32]){
if(levelCount <= level){
lastLevel();
return;
}
playLevel(level);
}
else if(mode==1 && keyPress[38]){
playLevel(0);
return;
}
else{
setTimeout(waitToPlayLevel, 100, level, mode);
return;
}
}
var lastLevel = function(){
ctx.fillStyle = "white";
ctx.fillText("죄송합니다. 더 이상의 레벨이 준비되어 있지 않습니다.", 240, 380);
ctx.fillText("빠른 시일 내에 새로운 레벨을 준비하겠습니다. 감사합니다.", 240, 420);
}
main();
// 여기까지 코드 입력 //
}
}
$( plugin_switched_maze );
/* switched_maze 끝 */