Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- flask
- react
- 공룡게임
- Nest.js
- Bull
- typeORM
- Python
- Queue
- TypeScript
- jest
- MySQL
- game
- 정렬
- dfs
- Express
- GIT
- OCR
- AWS
- MongoDB
- mongoose
- class
- nodejs
- JavaScript
- Dinosaur
- 자료구조
- 게임
- nestjs
- cookie
- Sequelize
Archives
- Today
- Total
포시코딩
[Javascript] Snake game (1) 본문
728x90
면접 후기 글을 보다가 Snake game 을 만들어보게 했다는 글이 있어
저번에 했던 Dino game 을 응용하면 될 것 같아 만들어봤다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Snake</h1>
<canvas id="canvas"></canvas>
<script src="snake.js"></script>
</body>
</html>
html 은 간단하게 제목과 게임이 들어갈 canvas 태그만 작성하고 snake.js 를 불러옴
const canvas = document.querySelector('#canvas');
const ctx = canvas.getContext('2d');
canvas.width = 500;
canvas.height = 500;
canvas 세팅해준 후
배경맵, snake(플레이어), rat(타겟) 변수를 만듦
처음 만드는거니 일단 자동으로 앞으로 가는게 아니라 한칸한칸 움직이게 하고서 천천히 업그레이드 해 나갈 계획이다.
snake 는 내가 움직이는 snakeHead 와 rat 을 먹을수록 길어지는 snakeBody 로 구분했다.
let field = {
x: 0,
y: 0,
width: 500,
height: 500,
draw(){
ctx.fillStyle = 'black';
ctx.fillRect(this.x, this.y, this.width, this.height);
}
}
let snakeHead = {
x: 0,
y: 0,
width: 50,
height: 50,
body: 0,
draw(){
ctx.fillStyle = 'white';
ctx.fillRect(this.x, this.y, this.width, this.height);
}
}
class SnakeBody {
constructor(x, y){
this.x = x;
this.y = y;
this.width = 50;
this.height = 50;
}
draw(){
ctx.fillStyle = 'white';
ctx.fillRect(this.x, this.y, this.width, this.height);
}
}
class Rat {
constructor(){
this.x = 50 * getRandomInt(0, 10);
this.y = 50 * getRandomInt(0, 10);
this.width = 50
this.height = 50
}
draw(){
ctx.fillStyle = 'red';
ctx.fillRect(this.x, this.y, this.width, this.height);
}
}
rat은 랜덤위치에 생성되어야 하므로
function getRandomInt(min, max){
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max-min)) + min;
}
해당 함수를 만들어 썼음
let snakeBodyArr = [];
let rat;
do{
rat = new Rat();
}while(rat.x == snakeHead.x && rat.y == snakeHead.y)
snakeBody 가 담길 Array 와 처음 게임을 실행했을 때 내 뱀대가리 위치에 rat 이 생성되지 않게 만들었음
이제 각각 세팅해놓음 draw() 를 통해 그리면 되는데
하나의 함수로 묶어버림
function allDraw(){
field.draw();
snakeHead.draw();
if(snakeBodyArr.length > 0){
snakeBodyArr.forEach((a, i, o)=>{
a.draw();
})
}
rat.draw();
}
이 함수는 실행되자마자, 방향키를 누를때마다 실행되게 위치시켜주면 된다.
728x90
'개인프로젝트 > snake 게임' 카테고리의 다른 글
[Javascript] Snake game (2) (0) | 2022.08.23 |
---|