소년포비의 세계정복!!

Windows Mobile 퍼즐 게임 본문

윈도우폰 세상/Windows Phone

Windows Mobile 퍼즐 게임

소년포비 2009. 9. 27. 14:18
프로젝트 들어가기 전에 시간이 되서 C#으로 만들 Windows Mobile 퍼즐 게임 소스다. 무작정 만들다 보니 정리를 못 했다

 처음에는 .net framework 3.5로 만들었는데 옴니아에서 상위 framework라 실행이 되지 않아 .NET Framework 2.0으로 했다.

1. 신규 프로젝트를 생성한다. ( .Net Framework 2.0)으로 해야 된다)

2. 4개의 폼으로 만들었다.
  - frmgame.cs -> 퍼즐 게임을 하는 폼이다
  - frmht -> 퍼즐 게임 원본 이미지를 보여주는 폼이다
  - frmMain -> 처음 시작하는 폼으로 별 다른 것 없이 시작 하기 버튼만 있다.
    이 폼에 대한 것은 생략할 예정이다.
  - frmsltgame -> 퍼즐 이미지를 선택하고 퍼즐 조각 갯 수 및 퍼즐 움직은 속도를 선택하는 폼이다.
  - iphotocreate -> 사진을 촬영 하여 퍼즐에 사용하도록 한 폼이다.

  참조에 Microsoft.WindowsMobile외 2개는 카메라 촬영을 위해 참조 한 것이다.




3. frmsltgame 폼 디자인
   - 아래와 같이 picturebox 2개 ( 이미지 선택 탐색기를 호출하는 것과 사진 촬영하는 것을 호출 하는 것) 버튼으로 해도 된다.
   - 퍼즐 조각을 선택하는 combobox 와 속도를 선택하는 combobox 
   - 선택한 이미지를 보여주는 picturebox 로 구성하고
   - Menu에 시작하기와 종료를 두었다.

   - using Microsoft.WindowsMobile.Forms;
      using System.IO;

추가했다.

 

4. frmsltgame.Designer.cs을 다음과 같이 했다.

        public System.Windows.Forms.PictureBox pictureBox1;
        private System.Windows.Forms.ComboBox comboBox1;

        public int puzzlecnt;
        private System.Windows.Forms.MenuItem menuItem1;
        private System.Windows.Forms.MenuItem menuItem2;

        public string PuzzleFile;
        public frmgame sgm = new frmgame();

        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.ComboBox comboBox2;
        private System.Windows.Forms.PictureBox pictureBox2;
        private System.Windows.Forms.PictureBox pictureBox3;

5. 폼 로드 이벤트 처리
        private void frmsltgame_Load(object sender, EventArgs e)
        {
            comboBox1.Items.Add("3 X 3");
            comboBox1.Items.Add("4 X 4");
            comboBox1.Items.Add("5 X 5");
            comboBox1.Items.Add("6 X 6");
            comboBox2.Items.Add("빠르게");
            comboBox2.Items.Add("보통");
            comboBox2.Items.Add("느리게");

            if (PuzzleFile == "" || PuzzleFile == null) //이미지 선택이 없을시 디폴트 제공 이미지
            {
                string path = GetApplication(); // 경로 구하기

                PuzzleFile = Path.Combine(path, "aaa.jpg");

            }

            pictureBox1.Image = new Bitmap(PuzzleFile);
            sgm.PuzzleImageWidth = 480;
            sgm.PuzzleImageHeight = 480;

        }


6. 퍼즐 조각 갯수 선택시 이벤트 처리
        private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            //sgm.PuzzleFile = PuzzleFile;

            switch (comboBox1.Text)
            {
                case "3 X 3":
                    sgm.game_setting(3); // sam의 game_setting 에 3을 넘기 (sam 은 disigner.cs에서 객체를 생성했다.)
                    break;

                case "4 X 4":
                    sgm.game_setting(4);
                    break;

                case "5 X 5":
                    sgm.game_setting(5);
                    break;

                case "6 X 6":
                    sgm.game_setting(6);
                    break;

            }
        }

7.  퍼즐 이동 속도 선택 이벤트 처리

        private void comboBox2_SelectedValueChanged(object sender, EventArgs e)
        {
            switch (comboBox2.Text)
            {
                case "빠르게":
                    sgm.PuzzleSpeed = 0;
                    break;

                case "보통":
                    sgm.PuzzleSpeed = 1;
                    break;

                case "느리게":
                    sgm.PuzzleSpeed = 2;
                    break;
            }

        }

8. applicate 경로 구하기
  - 이부분은 데브피아에 있는 것을 똑 같이 썼다.

        public string GetApplication()
        {
            return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly()
                .GetModules()[0].FullyQualifiedName);
        }

9. 이미지 선택(탐색기 ) 이벤트 처리
 - 이부분도 데브피아에 있는 것을 참고 하여 작성했다.

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            SelectPictureDialog spd = new SelectPictureDialog();

            if (spd.ShowDialog() == DialogResult.OK)
            {
                PuzzleFile = spd.FileName;
                pictureBox1.Image = new Bitmap(PuzzleFile);

                sgm.PuzzleImageWidth = pictureBox1.Width;
                sgm.PuzzleImageHeight = pictureBox1.Height;
                sgm.PuzzleFile = PuzzleFile;

            }

        }

 10 사진 촬영 하기 클릭 이벤트 처리
        private void pictureBox3_Click(object sender, EventArgs e)
        {
            iPhotoCreate frmic = new iPhotoCreate();
            frmic.Owner = this;
            frmic.Show();

        }

11. 시작하기 메뉴 클릭 이벤트 처리
     - 퍼즐 속도는 나중에 추가 한거라 여기에 미처 체크하는 부분을 넣지 못 했다.
 
        private void menuItem1_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text == "")
            {
                MessageBox.Show("퍼즐 조각을 선택해 주세요");
            }
            else
            {
                sgm.PuzzleFile = PuzzleFile;
                sgm.Show();
                this.Close();
            }
        }

12 . 종료 메뉴 클릭 이벤트 처리
        private void menuItem2_Click(object sender, EventArgs e)
        {
             Application.Exit();
        }

여기까지 하면 선택 폼에 대한 작업은 끝났다.

빌드를 한다.

빌드 할때 에뮬을 Windows Mobile 6.1.4에 Professional 480 X 800 Emulator 로 한다. (옴니아가 480 X 800 이므로 단 한글은 깨진다)


실행 결과


나머지 폼은 다음에...