카테고리 없음
[C# Form] Button Array를 사용한 화투게임
벌눈
2016. 10. 6. 17:12
여러개의 컨트롤이 있을 때 디자이너에서 모두 처리하려고 하면 좌표 맞추기와 각 컨트롤 마다의 이벤트를 프로그램해야 하는 것이 번거롭다. 이럴 경우에 코딩으로 컨트롤을 만들어 넣을 수 있는데, 다음의 화투 게임을 통해 프로그램해보자
프로그램의 실행 화면은 다음과 같다. 3행 4열로 버튼이 위치하고 클릭하면 화투패가 뒤집히는 동작을 한다.
디자이너에서는 기본 폼만 있으면 된다. 나머지는 모두 아래의 코딩에서 처리할 것이다.
코딩은 다음과 같다.
12장의 화투를 표현하기 위해 Button배열 btns[13]을 선언한다. 각 버튼의 Size, Location을 지정하고 Image는 모두 뒷장 이미지(back.png)로 세팅한다. 이벤트함수 Click 를 만들어 준다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | namespace Whatu { public partial class Form1 : Form { Button[] btns = new Button[13]; // index가 1~12월 표현 int margin = 10; // 화투 image size : 160 x 248 px int btnWidth = 160; int btnHeight = 248; public Form1() { InitializeComponent(); // 화투 image size : 160 x 248 px this.Text = "화투 v1.0"; this.Width = 2 * margin + 4 * btnWidth + 4 * 2 + 2 * 3; this.Height = 2 * margin + 3 * btnHeight + 4 * 2 + 2 * 2 + 24; // 1월~12월까지 for (int i = 1; i < btns.Length; i++) { btns[i] = new Button(); btns[i].Size = new Size(btnWidth, btnHeight); btns[i].Location = new Point(margin + (i-1) % 4 * btns[i].Width, margin + (i-1) / 4 * btns[i].Height); btns[i].Click += Form1_Click; btns[i].Image = new Bitmap("../../Images/back.png"); BtnInfo bi = new BtnInfo(false, i.ToString()); btns[i].Tag = bi; Controls.Add(btns[i]); } } class BtnInfo { public bool Flip; public string Name; public BtnInfo(bool F, string N) { Flip = F; Name = N; } } private void Form1_Click(object sender, EventArgs e) { Button btn = sender as Button; BtnInfo bi = (BtnInfo)btn.Tag; // Tag로 그림을 토글함(false일때는 앞면 그림을 그려주고, true일때는 뒷면을 그려줌 if (bi.Flip == false) { btn.Image = new Bitmap("../../Images/" + bi.Name + ".png"); bi.Flip = true; } else { btn.Image = new Bitmap("../../Images/back.png"); bi.Flip = false; } btn.Tag = bi; } } } | cs |
이벤트 함수에서는 뒷면이면 앞면으로, 앞면이면 뒷면이 나오도록 해야한다. 그래서 이를 위해 flag를 하나 사용해야한다. 또 버튼을 구분하기 위해서 버튼의 이름을 저장해야 한다. 이를 위해 BtnInfo 클래스를 만들어 사용했다.
다음은 프로그램이 진행되는 과정의 스크린샷이다.
Beeeye Dmu