일기 30

자동 전투 게임 - 로비 UI 만들기

전부터 만들어보고 싶었던 자동 전투 게임을 만들려고 한다. 기왕 만드는거 클라이언트부터 서버까지 만들어볼까 한다.  사실 이미 서버-클라이언트간 tcp 통신을 하는 기능과 간단한 로그인/회원가입 기능까지 만들었다.  오늘 할 일은 클라이언트 - 로비 UI 제작이다.  기본적인 플로우는 이렇다.회원가입 및 로그인로그인을 하면 로비 UI로 진입한다.로비 UI에서는 빠른 매칭, 커스텀 게임을 이용할 수 있다.그 외에 게임 정보, 플레이어 정보, 순위표, 설정, 상점 등의 주요 기능들에 접근할 수 있다. 내가 해본 게임중에는 프리코네R, 이터널 리턴, 도타, 슈퍼셀과 같은 게임들의 UI가 깔끔하고 좋다고 생각했다.  특히 프리코네R의 UI에 대해 찾아보던 중, 이런 게시글을 발견했다.[CEDEC 2018] "공..

일기 2025.03.17

Promise

Promise - JavaScript | MDN Promise - JavaScript | MDNPromise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다.developer.mozilla.org Promise에 대해서는 위의 mdn 페이지에서 설명하고 있지만 사실 잘 못알아먹겠다. 간단하게나마 내가 이해한 Promise를 정리해보려 한다.  우선 Promise는 javascript에서 비동기 처리를 하기 위한 객체이다. Promise 객체는 지금 당장 값을 정할 수 없지만, 미래에 반드시 값을 정해줄 것을 약속한다.const fetchData = new Promise((resolve, reject) => { setTimeout(() => { resolve("서버에서..

일기 2025.02.11

인벤토리

새 프로젝트에서 인벤토리와 아이템을 담당하게 되었다.ERDinventoryidintnot nullauto_incrementcharIdintnot nulluniqueitemIdintnot nulluniquerarityintnot nulldefault = 0equipedboolnot nulldefault = false 유저가 가진 아이템들의 목록을 담은 테이블이다. 아이템의 희귀도와 장비 여부는 가변이기 때문에 여기에 저장한다. itemidintnot nullauto_incrementnamevarcharnull itemTypeint  statfloat  priceint   모든 아이템들의 정보를 담은 테이블이다. 아이템은 name, itemType, stat, price의 값을 가진다.itemType은 0:..

일기 2025.02.06

TCP 소켓 프로그래밍 실습

https://github.com/Aeroxol/project_socket   TCP 소켓 프로그래밍 실습 이 프로젝트는 TCP 소켓 프로그래밍 실습을 위해 작성되었습니다. 소개 이 프로젝트는 TCP소켓 프로그래밍 실습을 위해 작성되었습니다. 서버는 유저의 위치 데이터를 받아서 내부 로직을 처리한 뒤, 각 플레이어에게 위치 데이터를 전송합니다.목표: TCP소켓 프로그래밍을 통한 실시간 데이터 통신 및 처리 기능 실습사용 기술: node.js, net socket, mysql2, protobufjs구현된 기능tcp 소켓 서버 실행protobufjs를 이용해 패킷 프로토콜 작성mysql2로 로컬 mysql서버에서 raw쿼리 실행유저 접속 및 접속 종료 시 db에서 위치 정보 불러오기, 저장유저 위치 정보 동..

일기 2025.01.17

Protocol Buffers

프로젝트를 진행하는데, node.js 서버와 unity 클라이언트 간에 tcp 통신을 할 필요가 생겼다. js와 c#간에 패킷을 통신을 하는데 어려움을 겪은 적이 있기 때문에, protocol buffers라는걸 알아보기로 했다. https://protobuf.dev/ Protocol BuffersProtocol Buffers are language-neutral, platform-neutral extensible mechanisms for serializing structured data.protobuf.dev Protocol Buffers가 무엇인가 Protocol Buffers are language-neutral, platform-neutral extensible mechanisms for ser..

일기 2025.01.07

타워 디펜스 프로젝트

브라우저에서 작동하는 타워 디펜스 게임 프로젝트가 끝났다.  클라이언트는 html과 캔버스로, 미리 주어직 스켈레톤 코드를 조금씩 변형해서 만들었다. 서버는 node.js로 작성했다. 데이터베이스는 유저 정보를 mySql로, 게임 데이터를 json으로 저장했다.  대부분의 게임 로직을 서버에서 처리하며, 클라이언트는 플레이어의 조작을 서버로 전달하고, 서버로부터 데이터를 전달받아 디스플레이하는 정도의 작업만 수행한다.  게임 개요 타워를 설치해서 계속해서 생성되는 몬스터를 처치해야한다. 필드에 존재하는 몬스터의 수가 일정량을 넘어서면 타이머가 시작되며, 타이머가 모두 끝날때까지 몬스터를 충분히 처치하지 않으면 패배한다. 타워는 단일, 다중, 범위 타격의 세 종류가 있으며, 1~5까지의 티어가 있다. 같은..

일기 2025.01.02

Socket.io를 활용한 통신 프로젝트

Socket.io를 사용해 간단한 프로젝트를 만들었다. 서버는 Node.js로, 클라이언트는 Unity로 만들었다. 유니티에는 공식 Socket.io 패키지가 없었기 때문에, 비공식 패키지를 사용했다.https://bestdocshub.pages.dev/ Best Packages Documentation HubThe ULTIMATE Best Bundle Discover the pinnacle of Unity communication tools with The Ultimate Best Bundle. Packing all my prized packages and protocols, it's the one-stop solution for all your connectivity needs. Dive into w..

일기 2024.12.20

(JavaScript) 둘만의 암호

https://school.programmers.co.kr/learn/courses/30/lessons/155652 char를 그대로 int로 쓸 수 있는 c++과는 다르게 자바스크립트에서는 String.prototype.charCodeAt(index) 함수를 사용해서 문자를 숫자로 바꿔야 한다. charCodeAt함수는 문자열의 index 위치에 있는 문자를 UTF-16코드 단위 값을 표현하는 0~65535 사이의 정수로 바꿔준다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt String.prototype.charCodeAt() - JavaScript | MDNString 값의..

일기 2024.12.12

12/5

오늘 한 일코딩테스트 연습 덧칠하기(https://school.programmers.co.kr/learn/courses/30/lessons/161989)function solution(n, m, section) { var answer = 0; var wall = new Array(n); for(e of section){ wall[e-1] = 1; } for(i = 0; i 1. 주어진 section을 바탕으로 wall 배열을 생성한다.2. wall 배열을 순회하면서 왼쪽에서부터 벽을 칠한다.3. 칠한 횟수를 더해 반환한다. 중간에 for문에서 i+m을 i+4로 적어서 좀 고생했다.예시 문제에서 m값이 4라서 무심코 그렇게 했다. 기사단원의 무기(https://sch..

일기 2024.12.05

12/4

오늘 한 일코딩테스트 연습JavaScript 과일 장수 (https://school.programmers.co.kr/learn/courses/30/lessons/135808)function solution(k, m, score) { var answer = 0; // 1. 과일 점수를 역순으로 정렬한다. var sorted = score.sort((a,b) => b-a); // 2. m번째 과일마다 점수를 계산한다. for(i = m-1; i 1. 과일을 점수 역순으로 정렬한다.2. m번째 과일마다 점수를 계산한다. 완전탐색 모의고사(https://school.programmers.co.kr/learn/courses/30/lessons/42840)function solution(..

일기 2024.12.04