뱀게임은 대표적인 고전게임중 하나입니다.
자바로 뱀게임을 만들어보겠습니다.
자세한코드는 깃허브참고해주시면 되겠습니다.
https://github.com/dohun-mat/java_snack_game
GitHub - dohun-mat/java_snack_game
Contribute to dohun-mat/java_snack_game development by creating an account on GitHub.
github.com
먼저 그림을 그릴 창(프레임)을 만들고 그려야합니다. Dimension을 이용해서 스크린사이즈를 불러와주고
xpos ypos는 내 노트북화면 가운데에 창을 생성하겠다는 위치를 저장하는 변수입니다.
this.add(board)로 board클래스를 가져와서 배경화면은 검은색으로 해줍니다.
setTitle로 제목을 정해주고 setResizable를 false를 줘서 창크기를 못바꾸게 해줍니다.
setDefaultCloseOperation(HiDE_OM_CLOSE)는 X를 누를시에 창을 없애겠다는 표시입니다.
setLocation(xpos, ypos)로 창위치를 만들어주고
validate()를 쓰면 알아서 알맞게 창을만들어줍니다(순서뒤죽박죽이어도 이거사용하면 알아서 순서맞춰서 그려줍니다)
여기까지하면 창을 만드신겁니다(board Class를 깃허브보고 안만들었으면 오류뜹니다)
이후에 board클래스를 시작시켜줍니다.
Board 클래스를 한번 보겠습니다.
이미지경로를통해서 이미지를 가져와주고 키이벤트는 포커스가 있어야 키이벤트가 발생하기때문에 포커스를 설정해줍니다
그리고addkeyListener을 통해 키리스너를 가져와줍니다. 키리스너는 말그대로 키이벤트를 실행되게 해주는겁니다.
updateXposYpos()함수는 뱀게임을할때 뱀이 커져야하고 뱀하나하나의 픽셀들은 그다음픽셀의 x y를 따라가야하므로
뱀몸의 픽셀들을 계산해주는 함수입니다.
RndomApple(Graphics g)함수는 사과가 맵에 랜덤하게 나타나야하므로 사과를 맵에 랜덤하게 나타나게해주는 함수입니다.
eatApple()함수는 뱀머리의 x좌표와 y좌표가 사과의 x좌표와 y좌표가 같으면 putDot()함수를 실행하는함수인데 이 함수는 조금있다가 보여드리겠습니다.
equalDot()함수는 뱀머리와 뱀몸이 부딪혔을시 gameover을 나오게하는 함수입니다.
putDot()함수는 만약 왼쪽방향키를 눌렀을때는 왼쪽방향으로 픽셀을 하나 더 추가해야하므로(몸이 하나더커져야하니까)
뱀몸들의 좌표를 가지고있는 saveHash에 넣어주면 머리만한칸움직이고 이순간에는 updateXposYpos()이 함수는 실행되지않고 있으므로 몸과 머리사이에 늘어난 픽셀을 넣어주는 코드입니다.
drawLarva함수는 뱀을 그려주는 함수입니다. 뱀의 몸의정보는 saveHash에 있으니 이것들을 불러와서 그려주는 함수입니다.
drawApple()은 마찬가지로 랜덤하게 생겨나는 사과를 그려주는 함수입니다.
autoMove()함수는 키를누르면 뱀을 움직여주는 함수입니다. 뱀게임은 누르지않았을때도 움직여야하고 가장 마지막에 누른 방향키에 영향을받아야하므로 boolean을 써줘서 True일때 계속 움직이게끔 해주었습니다.
paint는 오버라이딩 함수인데 이 함수를 이용하면 뱀그림이랑 사과그림이 나올겁니다.
actionPerfomed또한 오버라이딩함수인데
autoMove함수를 실행시켜주고
updateXposYpos함수를 계속 실행시켜줍니다.
위쪽에보시면 board.start()라는 부분이있는데 바로 이부분입니다.
timer을 시작시켜주는 부분이고 함수실행시작부분입니다.
키를 눌러주면 boolean을 설정해주는 함수입니다. 만약 왼쪽키를 눌르면 xMinusMoveBoolean만 true로 해주는 함수입니다.
마지막으로 SaveXY 클래스를 보겠습니다.
말그대로 X Y좌표를 저장해주는 클래스고 get을 통해서 x나 y좌표를 불러오고 set x y를 통해 x y 를 set해주는 함수입니다.
여기까지 뱀게임코드 설명이끝이고
깃허브에있는 코드를보고 여기에있는 설명들을 보시면서 이해하면서 뱀게임을 만들어보았으면합니다.
댓글