숫자 맞추기
이벤트 연습중이다.
처음 숫자를 빈칸으로 옮기는 부분은 선생님이 코드를 제시해 주었다.
내가 풀어야 할 부분은 섞기
섞기 버튼을 누르면 빈칸이 움직이는데 주위에 숫자칸이 있는지 찾아보고
랜덤으로 0~3을 받아오고 각각 위,아래, 왼쪽, 오른쪽으로 좌표를 바꾸기 위해
움직일 수 있는 칸인지 찾아본다.
숫자칸이 있으면 그 칸과 자리 바꾸고 숫자칸이 없으면 다음 숫자칸을 찾는다.
일단 시나리오는 이 정도로 짜고 코딩[각주]코딩이라기 보다 비쥬얼스튜디오 메뉴 끄적이기[/각주]을 시작했다.
1. 빈칸을 움직이는데까지는 성공했다.
2. 그런데 숫자칸이 없는데도 아래쪽 혹은 오른쪽으로 쭉쭉 나간다.
3. 리스트 제네릭을 써 보기로 했다.
4. 숫자칸으로 자리를 옮기는데 숫자칸이 빈칸이 있던 자리로 가지 않고 빈칸에 합체() 되어버린다.
5. 4번 항목의 문제는 바뀐 포인트값으로 숫자칸을 옮겨서 그랬던 것 같다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
List<Button> btlist = new List<Button>();
Random rd = new Random();
public Form1()
{
InitializeComponent();
btlist.Add(button1);
btlist.Add(button2);
btlist.Add(button3);
btlist.Add(button4);
btlist.Add(button5);
btlist.Add(button6);
btlist.Add(button7);
btlist.Add(button8);
btlist.Add(button9);
btlist.Add(button10);
btlist.Add(button11);
btlist.Add(button12);
btlist.Add(button13);
btlist.Add(button14);
btlist.Add(button15);
}
public void button1_Click(object sender, EventArgs e)
{
Button bt = (Button)sender;
if (bt.Text == “”)
return;
else
{
Point pt = bt.Location;
Point lpt = new Point(pt.X – 50, pt.Y);
if (button16.Location == lpt)
{
bt.Location = button16.Location;
button16.Location = pt;
//MessageBox.Show(“left”);
}
Point rpt = new Point(pt.X + 50, pt.Y);
if (button16.Location == rpt)
{
bt.Location = button16.Location;
button16.Location = pt;
//MessageBox.Show(“Right”);
}
Point tpt = new Point(pt.X, pt.Y – 50);
if (button16.Location == tpt)
{
bt.Location = button16.Location;
button16.Location = pt;
//MessageBox.Show(“Top”);
}
Point bpt = new Point(pt.X, pt.Y + 50);
if (button16.Location == bpt)
{
bt.Location = button16.Location;
button16.Location = pt;
//MessageBox.Show(“Bottom”);
}
//MessageBox.Show(pt.ToString());
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void button17_Click(object sender, EventArgs e)
{
for (int k = 0; k < 20; k++)
{
int aa = rd.Next(4);
//MessageBox.Show(aa.ToString());
Point pt = button16.Location;
switch (aa)
{
case 0:
Point movePt = new Point(pt.X, pt.Y – 50);
btlist.ForEach(delegate(Button btt){
if (btt.Location == movePt)
{
button16.Location = movePt;
btt.Location = pt;
}
});
break;
case 1:
movePt = new Point(pt.X, pt.Y + 50);
btlist.ForEach(delegate(Button btt) {
if (btt.Location == movePt)
{
button16.Location = movePt;
btt.Location =pt;
}
});
break;
case 2:
movePt = new Point(pt.X – 50, pt.Y);
btlist.ForEach(delegate(Button btt)
{
if (btt.Location == movePt)
{
button16.Location = movePt;
btt.Location = pt;
}
});
break;
case 3:
movePt = new Point(pt.X + 50, pt.Y);
btlist.ForEach(delegate(Button btt)
{
if (btt.Location == movePt)
{
button16.Location = movePt;
btt.Location = pt;
}
});
break;
}
}
}
}
}
_M#]
실행화면 :
확실히 윈도우응용프로그램이 콘솔응용프로그램보단 재밌다.
아직 데이터 베이스와 연동을 해보진 않아서 잘 모르겠지만
왠지 ASP.NET도 재미날것 같다. (아직은 겪지 못했기 때문에 이런 생각을 하는 것일까….)
이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.