오목 게임 화면 구성
2019. 9. 1. 12:07ㆍPL/C++
오목 게임 화면을 구성하려고 한다. 그림을 넣기 위해서 PictureBox를 삽입해야만 한다. 혹시나 PictureBox가 검색되지 않는다면 다음과 같은 절차를 밟는다
다음과 같이 적절한 사이즈와 색상을 주어서 만들 수 있다. 그리고 도구상자에서 번개모양을 클릭하면 이벤트 처리를 할 수 있는 목록이 나열된다. 먼저 오목판에 오목이 놓아졌을 때의 처리를 하기 위해서 MouseDown 이벤트를 처리할 것이다
더블클릭을 하면 코드쪽으로 가서 이벤트핸들러 코드가 생겼다는 것을 확인할 수 있다
그리고 마찬가지로 SinglePlay 화면이 처음으로 켜졌을 때 화면을 구성하는 이벤트인 Paint 이벤트까지 넣을 것이다
코드는 다음과 같이 구성할 수 있다
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace client
{
public partial class SinglePlay : Form
{
// 오목판의 셀 크기와 선 개수
// 현재 공식 오목판은 가로 15, 세로 15줄이다
// board를 500*500으로 잡았기 때문에, 바둑알의 크기는 지름 33으로 잡았다
private const int size = 33;
private const int edge = 15;
// enum으로 BLACK = 1, WHITE = 2로 구분
private enum Horse { none = 0, BLACK, WHITE };
// gBoard에 대한 2차원 배열 선언
private Horse[,] gBoard = new Horse[edge, edge];
// 현재 플레이어 선언
private Horse nowPlayer = Horse.BLACK;
// 클래스 처음에 만들어졌을 때 기본 구성
public SinglePlay()
{
InitializeComponent();
}
// 오목판이 refresh 되었을 때 발생하는 이벤트
private void gomoku_area_Paint(object sender, PaintEventArgs e)
{
Graphics gp = e.Graphics;
// 굵기가 3인 펜 객체 생성
Pen p = new Pen(Color.Black, 2);
// Point(x, y), 내 개념에서는 x, y가 바뀜
gp.DrawLine(p, size / 2, size / 2, size / 2, size * edge - size / 2);
gp.DrawLine(p, size / 2, size / 2, size * edge - size / 2, size / 2);
gp.DrawLine(p, size / 2, size * edge - size / 2, size * edge - size / 2, size * edge - size / 2);
gp.DrawLine(p, size * edge - size / 2, size / 2, size * edge - size / 2, size * edge - size / 2);
// 대각선으로 이동하면서 상하 라인을 그려줌
for(int i= size + size/2; i<size * edge - size / 2; i += size)
{
gp.DrawLine(p, size / 2, i, size * edge - size / 2, i);
gp.DrawLine(p, i, size / 2, i, size * edge - size/ 2);
}
}
private void gomoku_area_MouseDown(object sender, MouseEventArgs e)
{
// 오목판에 그림을 그리기 위해 Graphics 객체를 만들어줬다
Graphics g = this.gomoku_area.CreateGraphics();
int x = e.X / size;
int y = e.Y / size;
// 테두리를 벗어났을 때
if (x < 0 || y < 0 || x >= edge || y >= edge)
{
MessageBox.Show("테두리를 벗어났습니다");
return;
}
MessageBox.Show(x + ", " + y);
// 검은색 말이라면
if (nowPlayer == Horse.BLACK)
{
// 검은색을 만들기 위해 SolidBrush 객체를 생성
SolidBrush sb = new SolidBrush(Color.Black);
g.FillEllipse(sb, x * size, y * size, size, size);
}
else
{
// 흰색을 만들기 위한 SolidBrush 객체를 생성
SolidBrush sb = new SolidBrush(Color.White);
g.FillEllipse(sb, x * size, y * size, size, size);
}
}
}
}
'PL > C++' 카테고리의 다른 글
Winsock2 소켓 프로그래밍 (0) | 2019.09.01 |
---|---|
오목 승리 판정 구현하기 (0) | 2019.09.01 |
C# 2차원 배열 구성해서 출력하기 (0) | 2019.09.01 |
boost.asio를 이용한 TCP 동기식 통신 (0) | 2019.08.31 |
오목 시작 화면 구성하기 (0) | 2019.08.30 |