일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴퓨터구조
- robotics
- 정보처리기사
- SQL
- 맥케이브
- 해싱 함수
- homogeinous
- 네트워크 충돌
- 리눅스
- AI
- 기구학
- homogenous
- segmentation
- MIPS
- Coding
- 정처기
- Java
- sam2
- CentOS
- 3dof
- sort
- 알고리즘
- Linux
- 명령어
- 회전 복잡도
- 합병
- Computer
- 정렬
- 소스 코드 품질 분석
- ROS2
- Today
- Total
UTF-404
🖥️ 라즈베리 파이를 활용한 네트워크 AI 체스 게임 본문
들어가기 앞서 이 글은 2024년 4학년 1학기 모바일 시스템 융합 및 실습 수업에 결과물입니다.
4학년 1학기의 결과물에 대해 다시 글을 수정해본다.
라즈베리파이를 처음 써본 나는 그나마 다행이였다고 생각을 하는 것이 리눅스 환경에 어느 정도 익숙함이 있었기에 터미널 환경이라던지 여러 방면에서 크게 어려움이 없었다.
하지만 소켓통신과 실제 사람과 컴퓨터의 AI 대결을 오픈 소스를 참고하여 만들던 중 통신이 원할하지 않거나 제대로 체스가 움직이지 않는 그런 문제점들을 하나씩 마주할때면 식은 땀이 조금씩 흘렀던 건 사실이다. (프로젝트는 기한서를 종강 약 한달 전 쯤 쓰고 실제로 발표는 실제 종강 2주전 쯤 발표를 해야했기에 2주의 시간 뿐이었다.)
사실 밑에 적은 글들은 내가 실제 발표자료를 한글화(발표자료는 영어로 구성해야했다.) 하여 다시 적은 것이다.
말이 길었다. 밑의 글들을 확인해보고 궁금한 점이 있거나 실제 구현 영상이 궁금하다면 댓글을 남겨주면 되겠다.
♟️ AI와 체스 대결
라즈베리 파이를 활용한 네트워크 체스 게임
목차
📍Objective
📍Used Technology
📍Software
📍Platform
📍Project Description
📍Issues during project & Solution
💡 Objective
📍TCP 서버-클라이언트 통신
∙ 라즈베리 파이 두 대 사이에서 신뢰성 있는 TCP 통신을 설정하여 체스 게임의 이동 정보를 교환합니다.
📍AI 기반 체스 게임
∙ 서버 측 AI는 게임 상태를 평가하고, 최적의 이동을 계산하여 클라이언트에 전송합니다.
📍GUI 기반 사용자 인터페이스
∙ 사용자가 마우스로 체스말을 이동하여 체스 게임을 둘 수 있는 직관적인 인터페이스를 제공합니다.
💡 Used Technology
📍AI 및 체스 알고리즘
∙ 체스 게임의 논리를 구현하기 위한 알고리즘으로, 게임 상태 평가, 이동 생성, 인공지능 기반 전략 등을 포함합니다.
∙ Minimax Algorithm : 게임 트리에서 최적의 이동을 찾기 위한 알고리즘
∙ Alpha-Beta Pruning(가지치기) : 위의 알고리즘의 효율성을 높이기 위해 불필요한 부분을 제거하는 기법입니다.
📍그래픽 프로그래밍
∙사용자의 마우스 클릭과 드래그를 처리하여 말의 이동을 구현하였습니다.
📍네트워크 프로그래밍
∙ TCP/IP 프로토콜을 사용하여 라즈베리 파이 두 대 간의 데이터 통신을 구현하였습니다.
∙ 서버 – 클라이언트 모델을 통해 체스 게임의 이동 정보를 주고 받습니다.
💡 Software
📍Socket 모듈
∙ TCP/IP 네트워크 통신을 구현하기 위해 사용되었습니다.
📍Pygame
∙ 2D 게임과 멀티미디어 프로그램을 만들기 위한 Python 라이브러리 입니다.
∙ 체스 보드를 그래픽으로 표시하고 사용자 입력을 처리하는 데 사용되었습니다.
📍Threading 모듈
∙ 서버와 클라이언트의 멀티스레딩을 통해 동시성을 지원합니다.
∙ 클라이언트에서 GUI와 네트워크 통신을 동시에 처리할 수 있도록 합니다.
💡 Platform
📍라즈베리파이
∙ 소형 컴퓨터인 라즈베리 파이를 사용하며, 높은 확장성 덕분에 2대의 라즈베리 파이를 활용한 네트워크 테스트가 가능했습니다.
📍라즈베리 파이 OS
∙ 다양한 개발 도구와 라이브러리를 지원하여 라즈베리 파이에서의 개발 생산성을 높였습니다.
📍Python
∙ Python의 간결한 문법과 풍부한 라이브러리는 네트워크 통신, 그래픽 인터페이스, AI 알고리즘 구현에 적합했습니다.
∙ Socket 프로그래밍과 Pygame을 통해 네트워크 통신과 그래픽 처리를 쉽게 구현할 수 있었습니다.
💡 Project Description-System Block Diagram
1.클라이언트 라즈베리파이:
1.GUI (Pygame):
1.사용자 입력을 처리하고 체스 보드를 렌더링합니다.
2.사용자가 이동을 입력하면, 이를 TCP 클라이언트를 통해 서버로 전송합니다.
2.TCP 클라이언트:
1.사용자의 이동을 서버로 전송합니다.
2.서버로부터 AI의 이동을 수신합니다.
3.체스 로직 (Chess.py):
1.이동의 유효성을 검증하고 게임 상태를 관리합니다.
2.서버 라즈베리파이:
1.체스 엔진 (Chess.py):
1.클라이언트로부터 받은 이동을 처리하고 AI의 이동을 계산합니다.
2.게임 상태를 관리합니다.
2.TCP 서버:
1.클라이언트로부터 이동을 수신하고 AI의 이동을 클라이언트로 전송합니다.
3.체스 로직:
1.AI 이동을 계산하고 게임 상태를 관리합니다.
2.이 book.txt 파일은 체스 오프닝에 대한 데이터를 저장하고 있는 파일입니다. 각 라인에는 특정 체스 오프닝의 일련의 수순이 기록되어 있습니다. 이 데이터는 AI가 체스 게임을 플레이할 때, 특히 초반 몇 수를 결정할 때 참조하는 책(book)입니다.
💡 Project Description-Operation Process
💡 Issues during project & Solution
🔎 Issue : Data Loss During Transmission
클라이언트와 서버 간의 통신 중 데이터가 손실되는 문제가 발생했습니다. 이는 소켓 통신에서 데이터를 송수신하는 과정에서 발생할 수 있는 일반적인 문제입니다.
📍Solution
1.데이터의 송수신이 완료될 때까지 반복해서 데이터를 읽고 쓸 수 있도록 소켓을 설정했습니다.
2.전송할 데이터의 크기를 미리 전송하여 수신 측에서 데이터의 끝을 알 수 있도록 했습니다.
3.데이터를 수신할 때 버퍼 사이즈를 조정하여 충분히 큰 데이터도 수신할 수 있도록 했습니다.
<github 주소>
필자의 github 주소이며, 해당 프로젝트 과정에 대한 설명과 코드들이 들어있다.
https://github.com/utf-404/AI-Chess_Game_Project
GitHub - utf-404/AI-Chess_Game_Project: for blog
for blog. Contribute to utf-404/AI-Chess_Game_Project development by creating an account on GitHub.
github.com
여러므로 4학년은 참 시간이 어떻게 흘러가는지 몰랐던 학년이였다.
졸업 과제물과 발표 준비도 해야하고 아직 조금이지만 남은 학점을 매꾸고, 취준과 학점관리 등 여러 방면으로 정신 없던 학년이였다.
그래도 이 결과물 발표와 중간고사 시험 덕분에 해당 과목은 무난하게 A+를 받았다.
이제는 곧 졸업을 앞두고 있지만 앞으로도 간단한 프로젝트를 만들어 소개해볼 생각이다.
'프로젝트' 카테고리의 다른 글
Quick Sort 구현(Java) (1) | 2024.03.01 |
---|---|
Merge Sort 구현(Java) (0) | 2024.03.01 |
Prime Number 알고리즘 (0) | 2024.03.01 |
"섰다" 패 나눠주기 프로그램 (0) | 2024.03.01 |
🖥️ DB-Project (0) | 2024.02.27 |