'C#'에 해당되는 글 3건
C# 에서 Char[] 배열에 포함된 데이타를 string으로C# 에서 Char[] 배열에 포함된 데이타를 string으로
Posted at 2010. 1. 3. 04:14 | Posted in C#이런 경우에는 다음과 같이 하면 됩니다.
char[] charBuf = new char[1024]; // Char 배열, charBuf[0] = "A".... 데이타가 들어 있다고 가정
string newstring = ""; // string 값을 정의하고
newstring = new string(charBuf); // new해서 constructor 생성자에 char배열을 집어 넣으면 끝...
미치는 줄 알았다.....ㅠㅠ..(구글링)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace buttonmake
{
public partial class Form1 : Form
{
public int puzX; //버튼의 가로 갯수
public int puzy; //버튼의 세로 갯수
public int puzmax; //버튼의 전체 갯수
public int puzFormSize = 35; //버튼의 크기
Button[] Bpuzz; //버튼형 배열 선언....
public Form1()
{
InitializeComponent();
}
private void formInitialize()
{
int count=0; //버튼에 먹여줄 인덱스
this.Size = new Size(puzX * puzFormSize + 30, puzy * puzFormSize + 80);
//폼 사이즈(유동적임)
Bpuzz = new Button[puzmax];
//버튼형 배열 생성
for (int i = 0; i < puzmax; i++)
Bpuzz[i] = new Button(); //초기화
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 + 40; //top
Bpuzz[count].Left = j * puzFormSize + 10; //left
Bpuzz[count].Font = new System.Drawing.Font("굴림", 8f); //font
Bpuzz[count].Click += new EventHandler(buttonClick); //이벤트 등록
Bpuzz[count].Text = (count + 1).ToString();
this.Controls.Add(Bpuzz[count]);
count++;
}
}
}
private void buttonClick(object sender, EventArgs e)
{
myButton btn = (myButton)sender;
btn.BackColor = Color.Blue;
MessageBox.Show(btn.Text.ToString());
}
private void btn_make_Click(object sender, EventArgs e)
{
puzX = int.Parse(num가로.Value.ToString());
puzy = int.Parse(num세로.Value.ToString());
puzmax = puzX * puzy;
formInitialize();
}
}
}
'C#' 카테고리의 다른 글
C# 에서 Char[] 배열에 포함된 데이타를 string으로 (0) | 2010.01.03 |
---|---|
퍼즐 (0) | 2010.01.03 |
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 |