Skip to content

YH-DigitalForge/WhackAMole

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Whack A Mole : PVP

두더지 잡기 게임을 멀티 플레이어 경쟁 게임으로 만들어보는 프로젝트입니다.

Project Structure

두더지 잡기 게임의 프로젝트는 다음과 같은 구조를 가집니다.

  1. 서버 (라즈베리파이 + 모니터 1대)

    • ui : 화면에 점수 및 게임 진행상황을 표시하는 ui 부분입니다. ui는 모니터에 표시됩니다.
    • game : 게임 시스템
  2. 클라이언트 (아두이노 기기)

    • client.ino : 클라이언트 아두이노 코드입니다.

Serial IO

서버 <-> 클라이언트 통신에는 Serial 통신을 사용합니다. 서버의 경우, pyserial 모듈을 사용합니다. 클라이언트에서는 Arduino 내장의 Serial 을 사용합니다.

서버 -> 클라이언트

s; 로 시작하는 일련의 문자열을 보내고, 클라이언트에서는 ; 문자로 문자열을 분할해 데이터를 처리합니다.

데이터 분류 :

1. 맵 데이터 : string or char[9]

맵은 3*3의 2차원 구조를 가집니다. 각 칸별로 아래와 같은 번호를 가집니다.

[
   [0, 1, 2],
   [3, 4, 5],
   [6, 7, 8]
]

서버에서 클라이언트에 데이터를 보낼 때는, 이 맵 데이터를 직렬화한 길이 9짜리 숫자를 보냅니다. 각 숫자는 해당 칸에 배치될 아이템의 번호로, 아이템 종류는 하단에 기술합니다. ex : 001030500

클라이언트 -> 서버

c; 로 시작하는 일련의 문자열을 보내고, 서버에서는 ; 문자로 문자열을 분할해 데이터를 처리합니다.

데이터 분류 :

1. 타격 여부 : boolean

플레이어가 타격한 칸이 있는지 없는지를 나타냅니다. 만약 false 일 경우, 이후의 데이터가 전달되지 않을 수 있습니다. (추후 개발에 따라 변할 수 있음.)

2. 타격 칸 : int (0~9 사이)

Game

아래에서는 게임의 구성요소에 대해 설명합니다.

Round : 주기

게임 내에는 주기가 존재합니다. 한 주기에, 서버측과 클라이언트측의 데이터 교환이 한번씩 일어납니다. 클라이언트에서, 아이템이 1회 갱신됩니다. 서버측에서, 게임 정보가 1회 갱신됩니다.

Items : 아이템

아이템은, 3*3의 두더지 패널에 배치되는 요소들입니다. 플레이에 변화를 주고, 플레이어가 때릴지 말지 판단하도록 합니다. 0. BLANK : 아무것도 없는 칸입니다. 때려도 아무 일도 일어나지 않습니다.

  1. HEAL_SELF : 자신을 회복하는 칸입니다. 피격시 상대방에게 피해를 입히진 않지만 자신의 체력을 (수치) 만큼 회복합니다.
  2. BLOCK_OPPONENT : 상대방이 일시적으로 피격하지 못하도록 상대방의 패널을 (수치) 주기 동안 봉쇄합니다.
  3. ATTACK_OPPONENT : 상대방을 공격해 (수치) 만큼의 피해를 입힙니다.
  4. HEAL_OPPONENT : 피격시 상대방을 (수치) 만큼 회복합니다.

구현한 코드는 다음에서 볼 수 있습니다 : 코드 보기 : PanelItem(enum.Enum)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published