/Arduino-Game-Server

Raspberry Pi, Arduino, WAS를 이용해 소켓 및 HTTP 통신으로 구현한 장애물 피하기 게임

Primary LanguageC

💻 장애물 피하기 게임

라즈베리파이와 아두이노의 소켓 통신을 통해 구현한 장애물 피하기 게임 (22.12.23 ~ 22.12.28)

example_image

🎞️ 시연영상


🛠️ 사용 툴 / 언어

⚬ Arduino IDE
⚬ Ubuntu
⚬ MariaDB
⚬ C++
⚬ Arduino (UNO Board, LCD 16x4, 8x8 Matrix, PS2 Joy Stick, Wifi module, Bluetooth module, Power supply module)
⚬ Raspberry Pi
⚬ React

📘 사용 라이브러리

⚬ <MsTimer2.h>
⚬ <SoftwareSerial.h>
⚬ <LedControl.h>
⚬ <WiFiEsp.h>
⚬ <Wire.h>
⚬ <LiquidCrystal_I2C.h>

📌 기능 설명

 1. Set Up
⚬ 시리얼 통신 세팅
⚬ 소켓 연결하고 이벤트 발생시 값을 받아오는 기능
⚬ 블루투스 통신 세팅
⚬ 와이파이 연결 세팅
⚬ LCD 초기화
⚬ 움직임을 인식할 타이머 설정 (기본 1초 주기)
⚬ 장애물을 내려보낼 타이머 설정 (기본 0.1초 주기)
 2. Start
⚬ 조이스틱을 3초이상 누르면 값을 전송해 게임을 시작하는 기능
⚬ 시작 값을 읽어와 실행하는 기능
⚬ 상태값과 lcd 값을 초기화 하는 기능
⚬ 게임 생존 시간을 측정하고 전송하는 기능
 3. Player Move
⚬ 타이머를 통해 1초 주기로 사용자의 입력을 읽어오는 기능
⚬ 조이스틱의 방향에 따라 사용자의 위치를 이동하는 기능 (+ 양쪽 모서리의 경우 움직이지 않도록 예외 처리)
⚬ 조이스틱 강도에 따라 이동하는 정도를 조절하는 기능
⚬ 움직임을 읽어 정보 전송하는 기능
 4. Obstacle Move
⚬ 장애물 시작 위치를 랜덤으로 설정하는 기능
⚬ 장애물이 내려오는 시간 설정 기능 (기본 1초 설정)
⚬ 2칸 크기의 장애물이 정해진 시간을 주기로 한 줄씩 내려오는 기능
⚬ Player와 마주쳤을 경우 장애물을 없애는 기능
⚬ Player와 마주치지 않고 끝까지 내려왔을 경우 장애물을 없애는 기능
 5. End
⚬ 생명이 0이 되었을 경우 종료하는 기능
⚬ 플레이한 시간을 Lcd에 표시하는 기능
⚬ 일정 시간 딜레이 후, 다시 게임 시작 화면을 표시하는 기능 (기본 설정 시간 5초)
⚬ 플레이어의 ID와 시간 값을 저장해 웹에 나타내는 기능
⚬ 사용자의 정보가 전달되면 닉네임을 변경해 DB에 수정하여 저장하는 기능
 6. Web

✨Front-end : React

⚬ 게임 등수 확인 및 닉네임 변경
⚬ React의 useEffect 감지 기능을 이용해 DB에 새로운 값이 들어오면 Table 부분만 새로고침 되도록 구현.
⚬ React Table 라이브러리와 Modal 창을 이용해 등수 및 팝업 구현.

💡 발전 방향

⚬ 난이도를 선택할 수 있는 기능 (속도, 장애물 개수 조절)
⚬ 웹에서의 추가기능 구현 (페이징, 동일 아이디 기록 갱신)

👩🏻‍🏫 이전 아두이노 게임

⚬ https://github.com/dudwn1814/arduinoGame

👩🏻‍💻 개발자

⚬ 안영주 - https://github.com/dudwn1814
⚬ 황서영 - https://github.com/Seo0H