-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3820c25
Showing
13 changed files
with
1,345 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
{ | ||
"sqltools.connections": [ | ||
{ | ||
"mysqlOptions": { | ||
"authProtocol": "default" | ||
}, | ||
"previewLimit": 50, | ||
"server": "ohpick.co.kr", | ||
"port": 3306, | ||
"driver": "MariaDB", | ||
"name": "ohpick", | ||
"database": "ohpick1", | ||
"username": "ohpick1", | ||
"password": "ohpick135" | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
<!DOCTYPE html> | ||
<head> | ||
<meta charset="utf-8"> | ||
<title>계산기</title> | ||
<style> | ||
* { box-sizing: border-box } | ||
#result { width: 180px; height: 50px; margin: 5px; text-align: right } | ||
#operator { width: 50px; height: 50px; margin: 5px; text-align: center } | ||
button { width: 50px; height: 50px; margin: 5px } | ||
</style> | ||
</head> | ||
|
||
<body> | ||
<input readonly id="operator"> | ||
<input readonly type="number" id="result"> | ||
<div class="row"> | ||
<button id="num-7">7</button> | ||
<button id="num-8">8</button> | ||
<button id="num-9">9</button> | ||
<button id="plus">+</button> | ||
</div> | ||
<div class="row"> | ||
<button id="num-4">4</button> | ||
<button id="num-5">5</button> | ||
<button id="num-6">6</button> | ||
<button id="minus">-</button> | ||
</div> | ||
<div class="row"> | ||
<button id="num-1">1</button> | ||
<button id="num-2">2</button> | ||
<button id="num-3">3</button> | ||
<button id="divide">/</button> | ||
</div> | ||
<div class="row"> | ||
<button id="clear">C</button> | ||
<button id="num-0">0</button> | ||
<button id="calculate">=</button> | ||
<button id="multiply">x</button> | ||
</div> | ||
<script> | ||
let numOne = ''; | ||
let operator = ''; | ||
let numTwo = ''; | ||
const $operator = document.querySelector('#operator'); | ||
const $result = document.querySelector('#result'); | ||
const onClickNumber = (event) => { | ||
if (!operator) { | ||
numOne += event.target.textContent; | ||
$result.value += event.target.textContent; | ||
return; | ||
} | ||
// 이 아래로는 operator가 존재하는 경우에만 실행됨 | ||
if (!numTwo) { | ||
$result.value = ''; | ||
} | ||
numTwo += event.target.textContent; | ||
$result.value += event.target.textContent; | ||
}; | ||
document.querySelector('#num-0').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-1').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-2').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-3').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-4').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-5').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-6').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-7').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-8').addEventListener('click', onClickNumber); | ||
document.querySelector('#num-9').addEventListener('click', onClickNumber); | ||
const onClickOperator = (op) => () => { | ||
if (numOne) { | ||
operator = op; | ||
$operator.value = op; | ||
} else { | ||
alert('숫자를 먼저 입력하세요.'); | ||
} | ||
}; | ||
document.querySelector('#plus').addEventListener('click', onClickOperator('+')); | ||
document.querySelector('#minus').addEventListener('click', onClickOperator('-')); | ||
document.querySelector('#divide').addEventListener('click', onClickOperator('/')); | ||
document.querySelector('#multiply').addEventListener('click', onClickOperator('*')); | ||
document.querySelector('#calculate').addEventListener('click', () => { | ||
if (numTwo) { | ||
switch (operator) { | ||
case '+': | ||
$result.value = parseInt(numOne) + parseInt(numTwo); | ||
break; | ||
case '-': | ||
$result.value = numOne - numTwo; | ||
break; | ||
case '*': | ||
$result.value = numOne * numTwo; | ||
break; | ||
case '/': | ||
$result.value = numOne / numTwo; | ||
break; | ||
default: | ||
break; | ||
} | ||
} else { | ||
alert('숫자를 먼저 입력하세요.'); | ||
} | ||
}); | ||
document.querySelector('#clear').addEventListener('click', () => { | ||
numOne = ''; | ||
operator = ''; | ||
numTwo = ''; | ||
$operator.value = ''; | ||
$result.value = ''; | ||
}); | ||
|
||
</script> | ||
</body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<meta charset="utf-8" /> | ||
<title>짝맞추기</title> | ||
<style> | ||
.card { | ||
display: inline-block; | ||
margin-right: 20px; | ||
margin-bottom: 20px; | ||
width: 70px; | ||
height: 100px; | ||
perspective: 140px; | ||
} | ||
|
||
.card-inner { | ||
position: relative; | ||
width: 100%; | ||
height: 100%; | ||
text-align: center; | ||
transition: transform 0.8s; | ||
transform-style: preserve-3d; | ||
} | ||
|
||
.card.flipped .card-inner { | ||
transform: rotateY(180deg); | ||
} | ||
|
||
.card-front { | ||
background: navy; | ||
} | ||
|
||
.card-front, .card-back { | ||
position: absolute; | ||
width: 100%; | ||
height: 100%; | ||
border: 1px solid black; | ||
backface-visibility: hidden; | ||
} | ||
|
||
.card-back { | ||
transform: rotateY(180deg); | ||
} | ||
</style> | ||
</head> | ||
<body> | ||
<div id="wrapper"></div> | ||
<script> | ||
const $wrapper = document.querySelector('#wrapper'); | ||
|
||
const total = parseInt(prompt('카드 개수를 짝수로 입력하세요(최대 20).')); | ||
const colors = [ | ||
'red', 'orange', 'yellow', 'green', 'white', | ||
'pink', 'cyan', 'violet', 'gray', 'black', | ||
]; | ||
let colorSlice = colors.slice(0, total / 2); | ||
let colorCopy = colorSlice.concat(colorSlice); | ||
let shuffled = []; | ||
let clicked = []; | ||
let completed = []; | ||
let clickable = false; | ||
let startTime; | ||
|
||
function shuffle() { // 피셔예이츠 셔플 | ||
for (let i = 0; colorCopy.length > 0; i += 1) { | ||
const randomIndex = Math.floor(Math.random() * colorCopy.length); | ||
shuffled = shuffled.concat(colorCopy.splice(randomIndex, 1)); | ||
} | ||
} | ||
|
||
function createCard(i) { | ||
const card = document.createElement('div'); | ||
card.className = 'card'; // .card 태그 생성 | ||
const cardInner = document.createElement('div'); | ||
cardInner.className = 'card-inner'; // .card-inner 태그 생성 | ||
const cardFront = document.createElement('div'); | ||
cardFront.className = 'card-front'; // .card-front 태그 생성 | ||
const cardBack = document.createElement('div'); | ||
cardBack.className = 'card-back'; // .card-back 태그 생성 | ||
cardBack.style.backgroundColor = shuffled[i]; | ||
cardInner.appendChild(cardFront); | ||
cardInner.appendChild(cardBack); | ||
card.appendChild(cardInner); | ||
return card; | ||
} | ||
|
||
function onClickCard() { | ||
if (!clickable || completed.includes(this) || clicked[0] === this) { | ||
return; | ||
} | ||
this.classList.toggle('flipped'); | ||
clicked.push(this); | ||
if (clicked.length !== 2) { | ||
return; | ||
} | ||
const firstBackColor = clicked[0].querySelector('.card-back').style.backgroundColor; | ||
const secondBackColor = clicked[1].querySelector('.card-back').style.backgroundColor; | ||
if (firstBackColor === secondBackColor) { // 두 카드가 같은 카드면 | ||
completed.push(clicked[0]); | ||
completed.push(clicked[1]); | ||
clicked = []; | ||
if (completed.length !== 12) { | ||
return; | ||
} | ||
const endTime = new Date(); | ||
setTimeout(() => { | ||
alert(`축하합니다! ${(endTime - startTime) / 1000}초 걸렸습니다.`); | ||
resetGame(); | ||
}, 1000); | ||
return; | ||
} | ||
// 두 카드가 다르면 | ||
clickable = false; | ||
setTimeout(() => { | ||
clicked[0].classList.remove('flipped'); | ||
clicked[1].classList.remove('flipped'); | ||
clicked = []; | ||
clickable = true; | ||
}, 500); | ||
} | ||
|
||
function startGame() { | ||
shuffle(); | ||
for (let i = 0; i < total; i += 1) { | ||
const card = createCard(i); | ||
card.addEventListener('click', onClickCard); | ||
$wrapper.appendChild(card); | ||
} | ||
|
||
document.querySelectorAll('.card').forEach((card, index) => { // 초반 카드 공개 | ||
setTimeout(() => { | ||
card.classList.add('flipped'); | ||
}, 1000 + 100 * index); | ||
}); | ||
|
||
setTimeout(() => { // 카드 감추기 | ||
document.querySelectorAll('.card').forEach((card) => { | ||
card.classList.remove('flipped'); | ||
}); | ||
clickable = true; | ||
startTime = new Date(); | ||
}, 5000); | ||
} | ||
|
||
function resetGame() { | ||
$wrapper.innerHTML = ''; | ||
colorCopy = colors.concat(colors); | ||
shuffled = []; | ||
completed = []; | ||
clickable = false; | ||
startGame(); | ||
} | ||
|
||
startGame(); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
[1119/230524.938:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1120/230524.581:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1122/153916.807:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1124/094317.135:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1124/095817.950:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1124/144157.590:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1124/163314.498:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1127/134613.206:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1202/234758.946:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1203/003105.012:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1203/233003.093:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1203/235347.781:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1204/235347.494:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1207/001047.311:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1208/223118.717:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1209/224500.269:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1210/002811.604:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1211/235123.918:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1220/230530.181:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1221/224901.381:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1221/233644.879:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1222/231519.856:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) | ||
[1224/012221.062:ERROR:directory_reader_win.cc(43)] FindFirstFile: ������ ��θ� ã�� �� �����ϴ�. (0x3) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
<!DOCTYPE html> | ||
<head> | ||
<meta charset="utf-8"> | ||
<title>로또추첨기</title> | ||
<style> | ||
.ball { | ||
display: inline-block; | ||
border: 1px solid black; | ||
border-radius: 20px; | ||
width: 40px; | ||
height: 40px; | ||
line-height: 40px; | ||
font-size: 20px; | ||
text-align: center; | ||
margin-right: 20px; | ||
} | ||
</style> | ||
</head> | ||
|
||
<body> | ||
<div id="result">추첨 결과는? </div> | ||
<div id="bonus">보너스: </div> | ||
<script> | ||
const candidate = Array(45).fill().map((v, i) => i + 1); | ||
const shuffle = []; | ||
for (let i = candidate.length; i > 0; i--) { | ||
const random = Math.floor(Math.random() * i); | ||
const spliceArray = candidate.splice(random, 1); | ||
const value = spliceArray[0]; | ||
shuffle.push(value); | ||
} | ||
console.log(shuffle); | ||
const winBalls = shuffle.slice(0, 6).sort((p, c) => p - c); | ||
const bonus = shuffle[6]; | ||
console.log(winBalls, bonus); | ||
|
||
function colorize(number, $tag) { | ||
if (number < 10) { | ||
$tag.style.backgroundColor = 'red'; | ||
$tag.style.color = 'white'; | ||
} else if (number < 20) { | ||
$tag.style.backgroundColor = 'orange'; | ||
} else if (number < 30) { | ||
$tag.style.backgroundColor = 'yellow'; | ||
} else if (number < 40) { | ||
$tag.style.backgroundColor = 'blue'; | ||
$tag.style.color = 'white'; | ||
} else { | ||
$tag.style.backgroundColor = 'green'; | ||
$tag.style.color = 'white'; | ||
} | ||
} | ||
|
||
const $result = document.querySelector('#result'); | ||
function drawBall(number, $parent) { | ||
const $ball = document.createElement('div'); | ||
$ball.className = 'ball'; | ||
colorize(number, $ball); | ||
$ball.textContent = number; | ||
$parent.appendChild($ball); | ||
} | ||
for (let i = 0; i < winBalls.length; i++) { | ||
setTimeout(() => { | ||
console.log(winBalls[i], i); | ||
drawBall(winBalls[i], $result); | ||
}, 1000 * (i + 1)); | ||
} | ||
const $bonus = document.querySelector('#bonus'); | ||
setTimeout(() => { | ||
drawBall(bonus, $bonus); | ||
}, 7000); | ||
</script> | ||
</body> |
Oops, something went wrong.