숫자 맞추기

숫자 맞추기

이벤트 연습중이다.
처음 숫자를 빈칸으로 옮기는 부분은 선생님이 코드를 제시해 주었다.
내가 풀어야 할 부분은 섞기
섞기 버튼을 누르면 빈칸이 움직이는데 주위에 숫자칸이 있는지 찾아보고
랜덤으로 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도 재미날것 같다. (아직은 겪지 못했기 때문에 이런 생각을 하는 것일까….??)

이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.

This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다