숫자 맞추기

숫자 맞추기

이벤트 연습중이다.
처음 숫자를 빈칸으로 옮기는 부분은 선생님이 코드를 제시해 주었다.
내가 풀어야 할 부분은 섞기
섞기 버튼을 누르면 빈칸이 움직이는데 주위에 숫자칸이 있는지 찾아보고
랜덤으로 0~3을 받아오고 각각 위,아래, 왼쪽, 오른쪽으로 좌표를 바꾸기 위해
움직일 수 있는 칸인지 찾아본다.
숫자칸이 있으면 그 칸과 자리 바꾸고 숫자칸이 없으면 다음 숫자칸을 찾는다.
일단 시나리오는 이 정도로 짜고 코딩[각주]코딩이라기 보다 비쥬얼스튜디오 메뉴 끄적이기[/각주]을 시작했다.

1. 빈칸을 움직이는데까지는 성공했다.
2. 그런데 숫자칸이 없는데도 아래쪽 혹은 오른쪽으로 쭉쭉 나간다.
3. 리스트 제네릭을 써 보기로 했다.
4. 숫자칸으로 자리를 옮기는데 숫자칸이 빈칸이 있던 자리로 가지 않고 빈칸에 합체(??) 되어버린다.
5. 4번 항목의 문제는 바뀐 포인트값으로 숫자칸을 옮겨서 그랬던 것 같다.

[#M_ 코드 보기 | 코드 닫기 | 

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도 재미날것 같다. (아직은 겪지 못했기 때문에 이런 생각을 하는 것일까….??)

댓글 남기기