티스토리 뷰

심심풀이

스네이크 싱글 게임(javascript)

코더와개발자사이 2019. 2. 28. 09:01

snakegame.html


스네이크 게임
 : 사각의 맵에서 스네이크를 상하좌우로 움직이며 랜덤으로 나오는 아이템을 먹으면 몸이 길어지고 움직이는 속도가 증가한다

최초 설계
 > 맵은 테이블로 표현하고 2차원 배열에 td(블럭) 엘리먼트를 삽입
 > 스네이크(블랙)는 색깔로 표현
 > 방향에 따라 스네이크의 현재 위치를 갱신하고 블럭을 초기화 한 후 스네이크의 현재 위치값으로 블럭에 색칠
 > 게임 속성 : 스네이크 방향, 스네이크 현재 위치,  게임 맵 사이즈, 게임 상태, 블럭 크기(td)
0, 1
0, 2
0, 3
1, 1
1, 2
1, 3
2, 1
2, 2
2, 3

0, 1
0, 2
0, 3
1, 1
1, 2
1, 3
2, 1
2, 2
2, 3

0, 1
0, 2
0, 3
1, 1
1, 2
1, 3
2, 1
2, 2
2, 3


1차 구현

  • 스네이크 게임 객체 정의 외부에는 start 함수만 노출

  • 게임의 기본 속성 정의
  • 38 39 40 37은 방향키의 키값

  • 가장 먼저 게임 화면을 생성
  • 보드라는 변수에 블럭의 위치 값으로 이차원 배열에 저장

  • 스네이크 생성 스네이크의 처음 진행 방향은 오른쪽 var snakeWay=39;

  • 키 이벤트 등록
  • 정 반대 방향과 같은 방향은 이동 불가
  • 스네이크의 방향이 바뀌었음을 속성값에 변경 등록

  • 위로 이동할 경우 x축 고정 y축 -1
  • 오른쪽으로 이동할 경우 y축 고정 x축 +1
  • 아래쪽으로 이동할 경우 x축 고정 y축 +1
  • 왼쪽으로 이동할 경우 y축 고정 x축 -1
  • 현재 위치 값 변경후 블럭을 초기화 후에 다시 스네이크를 그림 
  • 스네이크 이동 함수를 재귀 호출

2차 추가 설계
 > 속성 : 스네이크의 속도, 아이템 추가, 스네이크 꼬리 추가, 점수, 레벨 추가
 > 랜덤으로 아이템이 추가되며 아이템을 먹을 경우 점수와 레벨이 오르며, 
 스네이크의 속도증가, 스네이크의 꼬리가 1씩 증가 한다
 > 벽에 부딛치거나 꼬리에 닿으면 게임 종료

2차 구현

  • 아이템(red)도 색깔로 표현

  • 블럭에 아이템 표시
  • 매번 블럭을 초기화하는데 아이템은 빼고 초기화

  • 스네이크 이동 함수에서 위치값을 갱신 후 스네이크의 현재 위치의 블럭이 아이템이라면
아이템을 먹는다
  • 아이템을 먹으면 스네이크의 꼬리, 속도(+10%) 증가 레벨값 증가, 아이템 재생성, 스코어 추가

  • 꼬리를 그리기 위하여 스네이크의 이동 경로를 쌓는다
  • 꼬리는 스네이크의 이전위치에 그리면 된다


  • 스네이크를 그릴때 꼬리의 값을 확인 하여 꼬리까지 같이 그린다.

  • 꼬리에 닿았거나 벽에 부딛쳤을때 게임을 종료 한다.

 > 기타 구현

  • 이동(색칠) 하기전에 방향키를 빠르게 눌렀을때 방향이 이동되는 것을 방지하기 위해 추가

시간되면 대전 형식에 스네이크 멀티 플레이를 구현해봐야겠다...


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함