[C#] 퍼즐게임 - 2

개발 노트/C#  2012.10.05 16:03



안녕하세요. 개발자 명월입니다.

저번 포스팅에 이어서 퍼즐게임을 이어서 포스팅하겠습니다.

바로가기 - 퍼즐게임 - 1


저번 포스팅에서는 GDIBuffer 초기 세팅을 완료 하였습니다. 이번 포스팅에서는 그 화면에 박스 하나를 그려서 좌우로 움직이는 이벤트까지 만들어 보겠습니다.

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Drawing;
  5
  6 namespace PuzzleGame_20121004
  7 {
  8     class Box
  9     {
10         public Box() {
11            
12         }
13         public void Render() {
14             GDIBuffer.Instance().getGraphics.DrawRectangle(new Pen(Brushes.Black), 0, 0, 50, 50);
15         }
16     }
17 }
18

 

위치는 일단 0,0, 사이즈는 50,50의 정사각형을 하드 코딩하여 넣겠습니다. 

 

 

그리고 MainForm에서 랜더링 하겠습니다.

 

 

일단 컴파일에서 확인 한 결과 사각형이 이쁘게 잘 그려 졌습니다.

 

 

이제 Box 클래스 안에 크기는 하드코딩을 하더라고 위치는 밖에서 컨트롤 할수 있게 하고 숫자를 써서 박스를 두개 그려보도록 하겠습니다.

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Drawing;
  5
  6 namespace PuzzleGame_20121004
  7 {
  8     class Box
  9     {
10         private int number;
11
12         private float x;
13         private float y;
14
15         private const int BoxSize = 50;
16         private const int FontSize = 20;
17
18         public Box(int number,float x,float y) {
19             this.x = x;
20             this.y = y;
21             this.number = number;
22         }
23         public void Render() {
24             int a = (int)Math.Log10(number);
25             float pointX = x + (BoxSize / 2 - (FontSize / 2 + a * FontSize/2));
26             float pointY = y + BoxSize / 2 - FontSize / 2;
27             Pen _pen = new Pen(Brushes.Black);
28             Font _font = new Font(new FontFamily("돋움"), FontSize, FontStyle.Bold, GraphicsUnit.Pixel);
29             GDIBuffer.Instance().getGraphics.DrawString(number.ToString(), _font, new SolidBrush(Color.Black), new PointF(pointX, pointY));
30             GDIBuffer.Instance().getGraphics.DrawRectangle(_pen, x, y, BoxSize, BoxSize);
31         }
32     }
33 }
34

 

 

 

박스를 만들었고 박스를 움직이는 이벤트를 붙여보도록 하겠습니다.

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Drawing;
  5 using System.Windows.Forms;
  6
  7 namespace PuzzleGame_20121004
  8 {
  9     class Box
10     {
11         private int number;
12
13         private float x;
14         private float y;
15
16         private MainForm MF;
17
18         private const int BoxSize = 50;
19         private const int FontSize = 20;
20
21         public Box(int number,float x,float y,MainForm MF) {
22             this.x = x;
23             this.y = y;
24             this.number = number;
25             this.MF = MF;
26
27             this.MF.KeyDown += new System.Windows.Forms.KeyEventHandler(MF_KeyDown);
28         }
29
30         private void MF_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
31         {
32             switch (e.KeyCode) {
33                 case Keys.Up: Move(0, -1); break;
34                 case Keys.Down: Move(0, 1); break;
35                 case Keys.Left: Move(-1, 0); break;
36                 case Keys.Right: Move(1, 0); break;
37             }
38         }
39         private void Move(float x_,float y_) {
40             this.x += x_;
41             this.y += y_;
42             MF.Render();
43         }
44        
45         public void Render() {
46             int a = (int)Math.Log10(number);
47             float pointX = x + (BoxSize / 2 - (FontSize / 2 + a * FontSize/2));
48             float pointY = y + BoxSize / 2 - FontSize / 2;
49             Pen _pen = new Pen(Brushes.Black);
50             Font _font = new Font(new FontFamily("돋움"), FontSize, FontStyle.Bold, GraphicsUnit.Pixel);
51             GDIBuffer.Instance().getGraphics.DrawString(number.ToString(), _font, new SolidBrush(Color.Black), new PointF(pointX, pointY));
52             GDIBuffer.Instance().getGraphics.DrawRectangle(_pen, x, y, BoxSize, BoxSize);
53         }
54     }
55 }
56

 

 

 

여기까지 바꾸고 좌우로 움직여 보겠습니다.

 

 

여기까지 좌우로 잘 움직입니다.

 

여기까지 잘 따라 오셨으면 좌우로 움직이는 박스 객체까지 만들어 졌습니다.

이제는 마지막인 테이블을 만들어야 겠습니다. 테이블이란 전체의 틀을 말하는 것입니다.

현재 위치는 그냥 임의로 0,50 이런식으로 정해 놓았지만 25개의 박스를 생성할때 이 위치들을 정확하게 고정시킬 필요가 있습니다.

 

즉 1번 위치는 위에서 3번 좌에서 3번째인 위치에 있지만 GDI 좌표계에선 (3,3) 으로 아닌 무언가의 좌표로 나타내어야 겠습니다. 다시말하자면 첫번째 칸의 위치는 어디, 두번째 위치의 칸은 어디 라는 것을 설정하는 위치인 것입니다.

 

참조 소스 : PuzzleGame_20121004.zip

 

'개발 노트 > C#' 카테고리의 다른 글

[C#] Dokan 소스 (Ndrive) - 1  (9) 2012.10.11
[C#] 퍼즐 게임 - 3  (0) 2012.10.10
[C#] 스니퍼  (2) 2012.10.09
[C#] 비프음  (0) 2012.10.06
[C#] 퍼즐게임 - 2  (0) 2012.10.05
[C#] 서비스 프로그램  (0) 2012.10.05
[C#] 퍼즐게임 - 1  (0) 2012.10.04
[C#] GDI 좌표계  (0) 2012.10.01
[C#] 물리 함수식 만들기 - 공 튀기기 -  (2) 2012.09.25

댓글 0개가 달렸습니다.
댓글쓰기