IT/C#

[C#] 토이 프로젝트 : Winform으로 캐치마인드 만들기 - 1

뉴비 출근러 2025. 8. 5. 13:05
728x90
반응형

지난번에 채팅 프로그램을 만들고 해당 기능을 담고있는 새로운 프로그램을 만들어 보자.

(회사에 일이 없어서 놀고있는건 비밀)

 

우선 어떤 프로그램을 만들어 볼지 생각해 보았다.


# 아이디어

1. Discord와 같이 텍스트 채팅도 가능하지만 음성 채팅이 가능한 프로그램

2. 기존 채팅 프로그램에 사진이나 영상 전송 기능 추가

3. 채팅으로 하는 온라인?게임

 

당장 떠올랐던건 위 3개의 아이템이다. 아얘 새로운 프로그램은 아마 없을 것 같으니 기존에 있는 프로그램들 중 대중성이 높은 프로그램을 생각해 보았다.

 

2번은 새로운 프로그램이기보단 기능 추가 개념이니 일단 패쓰..(나중에 업데이트 해볼 예정)

결국 1번과 3번중 어떤걸 해볼까 하다가 회사에서 통화를 테스트를 해볼수는 없으니 3번으로 결정!!


# 새로운 기능

채팅 프로그램에서는 Socket방식으로 텍스트만 서로 교환하는 방식이였다. 하지만 캐치마인드라는 게임은 술래가 그림을 그리고 다른 참여자가 어떤 그림을 그린것인지 맞추는 방식의 게임인데 그림을 어떻게 주고 받아야할지 전혀 지식이 없었다..

이럴땐 역시 "도와줘요 GPT!!"

 

GPT : 허허허 Panel에 그림을 그려보는 것은 어떠하냐~ System.Drawing.Bitmap과 System.Drawing.Graphics를 활용해 보거라!


# 구현

1. 기본 기능

  • 타이머 : 정해진 시간에 정답을 입력하고 그림을 그릴 수 있도록 하는 기능(술래가 정하는 시간)
  • 생성, 접속, 차단 기능 : 기존 채팅 프로그램에 있던 기능과 동일
  • 주제 설정 : 술래는 주제(퀴즈)를 설정하는 기능(최초 게임 시작 시 방을 생성한 방장이 술래)
  • 채팅 : 유저간의 채팅 기능, 단 채팅을 통한 정답 입력 기능 구현 추가(주제 = = 채팅 경우 정답 처리)

 

 

2. 새롭게 추가된 기능

drawingGraphics = Graphics.FromImage(drawingBitmap);
drawingGraphics.Clear(Color.White);

drawingPanel.MouseDown += DrawingPanel_MouseDown;
drawingPanel.MouseMove += DrawingPanel_MouseMove;
drawingPanel.MouseUp += DrawingPanel_MouseUp;
  • drawingPanel에 마우스가 클릭하여 움직일 때 이벤트를 추가하여 패널에 그림을 그린다

 

DRAW_LINE:{x1}|{y1}|{x2}|{y2}|{Color.ToArgb()}
  • CASE문을 사용하였고 선이 그려질때마다 위 형태의 문자열을 생성한다.

 

string drawLineMsg = $"DRAW_LINE:{lastPoint.X}|{lastPoint.Y}|{e.Location.X}|{e.Location.Y}|{currentDrawingColor.ToArgb()}";
if (isHost)
    BroadcastMessage(drawLineMsg);
else
    SendMessage(drawLineMsg);
  • 방을 생성한 유저는 다른 참여자 모두에게 위 방식으로 전송한다.

 

case "DRAW_LINE":
    int x1 = int.Parse(parts[1]);
    int y1 = int.Parse(parts[2]);
    int x2 = int.Parse(parts[3]);
    int y2 = int.Parse(parts[4]);
    Color lineColor = Color.FromArgb(int.Parse(parts[5]));

    using (Graphics g = Graphics.FromImage(drawingBitmap))
    {
        using (Pen pen = new Pen(lineColor, 3))
        {
            g.DrawLine(pen, x1, y1, x2, y2);
        }
    }
    drawingPanel.Invalidate(); // 다시 그리기 트리거
    break;
  • 수신하는 참여자는 좌표와 색상을 패널에 다시 그린다.

기능 추가중인 게임 화면

2편에 이어서...

 

728x90
반응형