퍼즐퍼즐

Posted at 2010. 1. 3. 01:50 | Posted in C#

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace MyPuzzle_a
{
    public class Puzzle : Button
    {
        public int 원래값;   //퍼즐이 섞이기전의 값(완성된 값..1.2.3.4.5.....)
        public int 현재값;  //섞여있는 퍼즐의 값

        }

          
    public partial class Form1 : Form
    {
        public int puzX = 10; //퍼즐의 가로값 사용자에게 입력을 받도록 해도 됨
        public int puzY = 10; //퍼즐의 세로값
       int puzMax;   //가로*세로값
        int Empty;   //빈 퍼즐의 번호
        const int puzFormSize = 80;  //퍼즐의 크기
        Puzzle[] bPuzz;   //퍼즐...(버튼 배열)

        public Form1()
        {


            InitializeComponent();
            puzMax = puzX * puzY;   //퍼즐의 갯수는 가로*세로다
            Empty = puzMax - 1;   //퍼즐의 갯수를 구한다음 거기서 한개의 퍼즐을 가려버린다.
            폼초기화();
        }

        public void 폼초기화()
        {
            int count = 0;  //배열에 쓰일 카운드
            bPuzz = new Puzzle[puzMax];  //버튼 배열의 크기를 정하고...
            this.Size = new Size(puzX * puzFormSize + 30, puzY * puzFormSize + 80); //프로그램 창의 크기를 바꿔준다.
            for (int i = 0; i < puzMax; i++)
                bPuzz[i] = new Puzzle();
            for (int i = 0; i < puzY; i++) //세로만큼
            {
                for (int j = 0; j < puzX; j++) //가로만큼
                {
                    bPuzz[count].Width = puzFormSize;
                    bPuzz[count].Height = puzFormSize;
                    bPuzz[count].Top = i *puzFormSize + 30;
                    bPuzz[count].Left = j *puzFormSize + 10;
                   
                    bPuzz[count].원래값 = count;  //섞이기 전의 값에 현재값을 대입....(처음 프로그램을 실해하면 퍼즐이 완성된 상태로 나오므로)
                    bPuzz[count].현재값 = count;
                    bPuzz[count].Font = new System.Drawing.Font("굴림", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
                    bPuzz[count].Click += new EventHandler(this.bPuzz_Click); //버튼을 누를 때마다 bPuzz_Click 메소드를 호출한다.
                    bPuzz[count].Text = (count + 1).ToString(); // 퍼즐에 숫자를 넣어준다.
                    this.Controls.Add(bPuzz[count]); //퍼즐을 생성
                    count++;  //퍼즐 배열에 들어가는 카운트 증가
                }
                bPuzz[Empty].Visible = false; //퍼즐 하나를 가림~
            }
           


        }
        public void bPuzz_Click(object sender, EventArgs e)
        {
            Puzzle bPuzzSelected = (Puzzle)sender;  //클릭되는 퍼즐을 핸들링?
            if(CheckJoin((Puzzle)sender)==true)  //사용자가 누르는 퍼즐의 주위에 빈 퍼즐이 있는지 체크
            {
                SwapPuzz(bPuzz[Empty],bPuzzSelected); //인접해있다면 사용자가 클릭한 퍼즐과, 인접한 빈 퍼즐의 위치를 바꿈
            }
            if(CheckFinish())   //퍼즐이 1.2.3.4.5.....이런 순서가 됬는지 체크
            {
                MessageBox.Show("축하합니다. 퍼즐을 다시 섞겠습니다.");
                PuzzleMix();  //축하 메시지를 띄운후, 퍼즐을 다시 섞는 메소드 호출
            }
        }
        private void SwapPuzz(Puzzle n1, Puzzle n2)  //버튼 객체
        {
            Point p = new Point(n1.Left, n1.Top); //클릭한 버튼의 왼쪽, 위쪽의 값을 가져오고
            int t = 0;
            n1.Location = n2.Location;  //클릭한 퍼즐에 빈 퍼즐의 위치값을 넣어주고...
            n2.Location = p; //빈 퍼즐에는 클릭한 퍼즐을 대입....즉, 서로 위치를 바꿔주는..거....

            t = n1.현재값;   //위에는 퍼즐의 위치를 바꾸는 것이고, 여기는 퍼즐에 들어있는 숫자를 담는...
            n1.현재값 = n2.현재값;
            n2.현재값 = t;
        }
        private bool CheckJoin(Puzzle buttonTmp)
        {
            int AbsSum = 0;
            AbsSum = Math.Abs(bPuzz[Empty].Left - buttonTmp.Left) + Math.Abs(bPuzz[Empty].Top - buttonTmp.Top);
            //클릭되어진 퍼즐의 좌에서 빈 퍼즐의 좌를 빼주고, 그것에 절대값을 취하고....클릭된 퍼즐의 위와 빈 퍼즐의 위를 뺀것을 더해주면....
            //결국 퍼즐의 크기가 나온다...여기서는 puzFormSize.....가 된다.
            return (AbsSum == puzFormSize) ? true : false; //인접해 있다면...트루 반환, 틀리면 펄스....
        }
        private void PuzzleMix()
        {
            Random rnd = new Random();  //난수를 만들기 위해 rnd 생성
            int r1, r2;
            for (int i = 0; i < puzMax; i++) //퍼즐의 최대갯수만큼..i를 돌리고...
            {
                r1 = rnd.Next(0, puzMax); //난수를 만들고..
                r2 = rnd.Next(0, puzMax); //
                SwapPuzz(bPuzz[r1], bPuzz[r2]); //퍼즐들을 마구 섞는다....숫자는 안바뀌고 칸만 어질러지니깐, 결국엔 숫자도 바뀜
            }
        }
        private bool CheckFinish()
        {
            bool ret = true;
            for (int i = 0; i < Empty; i++)
            {
                if (bPuzz[i].원래값 != bPuzz[i].현재값)  //오리지널 숫자값 1.2.3.4.5.....과 섞여있는 퍼즐의 값을..4.3.5.6..을 비교....
                {
                    ret = false;  //같지 않으면 펄스를 주고
                    break;  //if문 중지
                }
               
            }
            return ret; //위 if문에서 다른 게 발견되지 않았다면 true를 그대로 반환
        }

 

 


    }
}

'C#' 카테고리의 다른 글

C# 에서 Char[] 배열에 포함된 데이타를 string으로  (0) 2010.01.03
버튼  (0) 2010.01.03
//

CodeEngn RankList TOP10CodeEngn RankList TOP10

Posted at 2009. 12. 31. 23:13 | Posted in Crack & Security

'Crack & Security ' 카테고리의 다른 글

CodeEngn RankList TOP10_2010-03-04  (0) 2010.03.04
CodeEngn RankList TOP10_2010-02-10  (0) 2010.02.10
CodeEngn - Challenge_HallofFame  (0) 2009.10.20
WowHacker-WebGame-Finish  (0) 2009.05.01
Level. 8 -- 성공..^^..와우해커:--  (0) 2009.04.29
//

CodeEngn - Challenge_HallofFameCodeEngn - Challenge_HallofFame

Posted at 2009. 10. 20. 15:03 | Posted in Crack & Security

'Crack & Security ' 카테고리의 다른 글

CodeEngn RankList TOP10_2010-02-10  (0) 2010.02.10
CodeEngn RankList TOP10  (0) 2009.12.31
WowHacker-WebGame-Finish  (0) 2009.05.01
Level. 8 -- 성공..^^..와우해커:--  (0) 2009.04.29
BMP 화일구조  (1) 2009.04.14
//

msn 80040154 오류..msn 80040154 오류..

Posted at 2009. 7. 29. 14:25 | Posted in Tip
MSN 설치 드럽게 어렵다.. 오류코드: 80040154

일단 구글링.....

  1. 재 설치: msxml3.dll
    • 실행창 : Regsvr32 %windir%\system32\msxml3.dll
  2. 재 설치: msxml3.dll
  3. 재 설치: contacts.msi :: 위의 두 방법이 안될 때(3번까지 왔다는...ㅠㅠ)

'Tip' 카테고리의 다른 글

Bring Back The Save Tabs And Quit Feature In Firefox 4  (0) 2011.04.05
Jigsaw 500 pieces  (0) 2010.02.07
Netcat for Windows NT  (0) 2009.05.01
파폭 하는 도중에...  (0) 2009.04.29
BCPARK계정이만료되어서,TiSTORY에 준비중입니다...  (3) 2009.02.03
//

KingSpider Robotis HexapodKingSpider Robotis Hexapod

Posted at 2009. 7. 13. 17:36 | Posted in Robot & Arduino


녹화일: 2009년 1월 17일 토요일, 오후 9:42:44
//

Ubuntu 9.04 티스토리에서 파일첨부시..메뉴 제대로 안 뜰때..Ubuntu 9.04 티스토리에서 파일첨부시..메뉴 제대로 안 뜰때..

Posted at 2009. 5. 12. 20:00 | Posted in Ubuntu

1. swfdec 관련 설치된 프로그램-삭제
시냅틱에서..
libswfdec, swfdec.mozilla , flashplugin-nonfree 삭제..

2. Adobe Flash Player 버전 10.0.22.87 설치
http://get.adobe.com/kr/flashplayer/
Ubuntu 8.04+용 .deb <=이거 선택..=>설치


//

Paros 실행전 Proxy 설정, 실행후...화면Paros 실행전 Proxy 설정, 실행후...화면

Posted at 2009. 5. 12. 18:33 | Posted in Ubuntu
Paros 실행전 Proxy 설정을 합니다.(파폭 입니다)
Paros가 127.0.0.1 8080 을 Proxy로 씁니다.


우분투에서..터미널로 가서..paros.jar 있는 폴더로 가서....Paros 실행..
java -jar paros.jar

Paros에서 멈춘 화면입니다.


빨간테두리(Trap)는 꼭 설정 하셔야 합니다.
파란테두리(GET)를 변경하시면 되겠죠..(OPTIONS....)
//

Install Java in Ubuntu 9.04 'Jaunty Jackalope'Install Java in Ubuntu 9.04 'Jaunty Jackalope'

Posted at 2009. 5. 12. 16:50 | Posted in Ubuntu
To install Java Runtime Environment in Ubuntu do this.

Open the terminal and run the following command:
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts
Soon you will come across Sun Operating System Distributor License for Java screen, hit Enter.

Next you will come across the DLJ licence terms, select 'Yes' and hit Enter.

Ubuntu will now install JRE.
//

우분투 리눅스에서 APM 설치하기 (웹서버 설정)우분투 리눅스에서 APM 설치하기 (웹서버 설정)

Posted at 2009. 5. 9. 10:36 | Posted in Ubuntu
APM(Apache+Php+MySQL) : 순서는 Apache -> MySQL -> PHP 
1) 설치

1.Apache

먼저 Apache를 설치하여 보겠습니다. 버전은 apache2버전을 기준으로 하겠습니다.

터미널을 열고 다음 명령을 입력합니다.

sudo apt-get install apache2
다음으로 mysql을 인증을 위한 모듈을 설치하겠습니다.
sudo apt-get install libapache2-mod-auth-mysql
다음으로 MySQL
sudo apt-get install mysql-server mysql-client
9.04 에서 에러 나서 따로 설치: sudo apt-get install mysql-server-5.1
설치가 완료되면 MySQL서버가 자동으로 시작이 됩니다.

마지막으로 PHP 버전은 PHP5 기준으로 하겠습니다.

마찬가지로 터미널에서 다음을 입력합니다.

sudo apt-get install php5-common php5 libapache2-mod-php5

MySQL과 연동하기 위한 모듈을 설치합니다.

sudo apt-get install php5-mysql
이상으로 설치가 완료 되었습니다.

아파치 웹서버를 제 시작하겠습니다.

sudo /etc/init.d/apache2 restart
MySQL서버도 정상적으로 작동하는지 확인해 보고 작동을 안한다면 restart 를 해줍니다.
sudo netstat -tap | grep mysql

명령을 줬을때

tcp 0 0 localhost.localdomain:mysql *:* LISTEN -

와 비슷한 것을 보면 정상이고 그렇지 않다면

sudo /etc/init.d/mysql restart

로 재시작을 해줍니다.

http://localhost/

모든게 정상이라면 에디터를 열고 웹서버의 디렉토리(일반적으로 "/var/www") 에서 phpinfo.php라는 파일을 만들고 다음의 소스코드를 넣어 줍니다.
    <?
    phpinfo();
    ?>

그리고 웹브라우저를 열고 실행을 시켜봅니다.

일반적으로 http://localhost/phpinfo.php 로 주소를 열면 됩니다.

다음과 같은 화면이 나오면 웹서버를 위한 환경이 구성이 되었습니다.

스크롤을 내려 Apache 와 MySQL 등을 찾아 제대로 연결이 되었는지 확인해 봅니다.

각종 사항은 설정마다 다르게 나올것입니다.

** 우분투 9.04 + APM **

 
2) 설정

1. 아파치

아파치의 기본설정 파일은 /etc/apache2/apache2.conf

포트번호, 문서의루트, 모듈, 각종 로그파일, 가상 호스트 등을 설정할수 있습니다.

자세한 사항은 아파치 문서( http://httpd.apache.org/docs/2.0/ )를 참조하시기 바랍니다.

2.  MySQL

mysql 의 관리자 암호는 처음에는 지정이 되지 않은 상태입니다.

관리자 암호를 설정하기 위해서는

sudo mysqladmin -u root password newrootsqlpassword

sudo mysqladmin -p -u root -h localohost password newrootpassword

을 입력합니다.

첫번째 줄만 실행해도 설정은 될것입니다.

MySQL 설정파일은 /etc/mysql/my.cnf 파일이고 로그 파일, 포트 번호등을 설정할수 있습니다.

이상으로 훌륭한 웹서버 환경을 구축하게 되었습니다.

참고 : http://mysql.com          http://apache.org          http://php.net
출처 : http://sunkyu.tistory.com/71440 에서 쬐끔 수정하였습니다.
//

WowHacker-WebGame-FinishWowHacker-WebGame-Finish

Posted at 2009. 5. 1. 23:42 | Posted in Crack & Security

'Crack & Security ' 카테고리의 다른 글

CodeEngn RankList TOP10  (0) 2009.12.31
CodeEngn - Challenge_HallofFame  (0) 2009.10.20
Level. 8 -- 성공..^^..와우해커:--  (0) 2009.04.29
BMP 화일구조  (1) 2009.04.14
Simples 시즌2 레벨4-KeyGen ^^  (0) 2009.04.07
//