포켓몬 픽셀아트 생성기 v2.02
·
C#
원하는 기능을 모두 구현하진 못했지만 일단 필요했던 기능은 모두 담아 완성했습니다. 1번부터 905번까지의 도감 번호를 기반으로 난수를 뽑습니다. 30배로 뽑히는 안농과 70배로 뽑히는 마휘핑은 이제 없습니다. 시리즈에 합류한 세대를 구분해 뽑을 수 있는 방식입니다. 모든 체크박스를 해제하면 뽑기 버튼이 사라집니다. 포켓몬의 세대 구분은 나무위키를 참조했습니다. 이로치 확률은 0.1%로 표기되어있지만 실제로는 5%입니다. 우측 상단의 콤보박스에서 폼체인지, 픽셀아트 난이도(색상 수)를 조절할 수 있습니다. 프린트 폼을 구현해보려 노력했지만 해상도를 맞추는데 어려움이 있었습니다. 그냥 이미지로 저장하도록 했습니다. 저장하기를 누르면 픽셀아트로 만들어 이미지를 저장합니다. 바탕화면에 저장 체크박스를 체크하면..
포켓몬 픽셀아트 생성기 v2.0 - 30%
·
C#
띠부띠부씰처럼 완전 랜덤으로 순수한 본인의 운을 시험해볼 수 있는 프로그램을 구현했지만 실제 교실에서 사용해보니 아이들은 자기가 아는 십수가지 포켓몬만 좋아할 뿐이고 못생긴(...) 나머지 포켓몬들은 뽑히면 오히려 더 아쉬워하는 문제가 있습니다. 공유도 해봤더니 다른 반의 반응도 비슷했던 모양입니다. 일단 빠르게 세대, 지역을 구분해서 뽑는 기능을 추가하고, 한 포켓몬이 여러개의 폼을 갖는 경우(특히 마휘핑...) 기존 방식으로는 뽑힐 확률이 높아지기 때문에 넘버링 기반의 뽑기 시스템을 도입해야합니다. 그렇게 하기 위해 우선 모든 포켓몬의 이미지 데이터와 이름, 번호를 매칭시키는 작업을 해야합니다. 픽셀아트를 만드는 것이 핵심 기능이기 때문에 색상을 단순화해야합니다. 1344개에 이르는 이미지를 따로 수..
OpenFileDialog, FolderBrowserDialog
·
C#
외부 파일을 불러오거나 폴더를 지정하기 위해 사용할 수 있는 클래스 string path = string.Empty; // 파일 경로를 저장할 string OpenFileDialog dialog = new OpenFileDialog(); // 인스턴스화 dialog.InitialDirectory = @"C:"; // 초기 경로 지정 dialog.Filter = "bmp files (*.bmp)|*.bmp|gif files (*.gif)|*.gif|All files (*.*)|*.*"; // 파일 필터 설정 |로 구분 dialog.FilterIndex = 1; // 필터 인덱스 설정 dialog.RestoreDirectory = false; // 마지막 탐색 경로 저장 여부 if (dialog.ShowDi..
포켓몬 픽셀아트 생성기 v1.0
·
C#
요즘 포켓몬빵이 아이들 사이에서 굉장히 귀합니다. 편의점에 들어온 빵은 아이들이 학교갈 시간이면 이미 다 매진이라 아이들은 띠부띠부씰 구경도 못하고 있는 현실입니다. 안타까워서 애들이 좋아할 프로그램을 만들어봤습니다. winform을 열심히 배우고 있습니다. 이제 배운 걸 써먹을 수 있는 구현에 발을 들여보았습니다. 생각보다 잘 되는게 놀랍고 생각보다 복잡하고 어려워서 당황스럽고 여러가지 입니다. 1-6세대의 포켓몬이 뽑힙니다. 이로치 포켓몬도 1%의 확률로 나옵니다. 출력 기능을 넣어보려 했지만 이상적인 결과가 나오지 않아 좀 더 공부한 후에 추가해보겠습니다. 다음 업데이트에는... 7세대 포켓몬과 일부 포켓몬의 폼체인지, 메가진화를 추가, hwp파일로 내보내기 기능을 추가해 출력할 수 있는 기능 추가..
점프 문 (goto)
·
C#
점프문에는 break, return, continue 등이 있다. 여기서는 goto 키워드만 간단히 알아본다. goto 키워드는 switch 문 안에서 사용하는 것이 보통이지만 그게 goto 키워드를 사용할 때 꼭 필요한 조건은 아니다. 하지만 goto 문은 가이드 상에서도 사용하지 않는 것을 권장하고 있고 코드를 어지럽게 만들거나 해결하기 굉장히 어려운 버그의 원인이 되기도 하기 때문에 간단한 한개의 goto문으로 정리되는 코드이거나 정말 필요한 경우가 아니면 사용하지 않는 것이 좋다. (라고 배웠다.) using System; class Program { static void Main() { Start: Console.Write("당신의 혈액형은 무엇인가요?\nAnswer:"); string bloo..
열거형(enum)과 Flag Attribute 클래스
·
C#
입력에 따라 분기를 나누어 처리할 때 분기마다 번호를 부여해주는 방법을 주로 사용했다. 예를 들어 체스 프로그램을 만든다고 하면 백은 양수, 흑은 음수로 킹은 1, 퀸은 2, 비숍은 3, 나이트는 4, 룩은 5, 폰은 6 이런식으로. 체스 정도면 어느정도 가독성을 유지할 수 있겠지만 만약 더 다양한 분기를 나누는 경우엔 코드를 한참 짜다 돌아봤을 때 1번이 뭔지, 5번이 뭔지, 27번이 뭐였는지 알아보기 힘들 수 있다. 이런 불편함을 막고 개발자의 편의를 보장하기 위해 enum 자료형이 있다. 열거형 자료는 enum 키워드로 선언하고 항상 정수 기반이기 때문에 사용할 수 있다. 그럼 체스 기물들은 이런 식으로 표현할 수 있다. using System; class Program { enum Pieces :..
클래스 (생성자, 접근제한자, 필드와 속성, 메소드)
·
C#
객체지향 프로그래밍 언어(Object - Oriented Programming Language, OOP) C# 말고 다른 언어를 배워 본 적이 없어서 객체지향 프로그래밍 언어와 그렇지 않은 언어들과의 차이점, 그로 인한 장단점은 잘 모른다. 배운 걸로 정리해보면 객체지향 언어는 변수, 속성, 메소드 등을 모두가 다같이 공유하는 코드 평야에 놓아두고 골라쓰는 것이 아니라 어떤 객체를 만들어 놓고 그 객체가 각자의 변수, 속성, 메소드 등을 갖고 있어 다른 객체들이 서로의 것에 접근하는 것에 제한을 두는 언어다. 어떻게 보면 객체를 만들 때마다 매번 필요한 요소들을 만들어줘야하니 "메모리를 많이 먹지 않나? 비효율적인 것 아닌가?" 라는 생각을 할 수도 있지만(나도 처음엔 그렇게 느꼈다.) 배우면 배울수록 ..
BigInteger 구조체(큰 정수의 처리)
·
C#
높은 정확도의 자료 처리를 위해 float, double과 같은 부동소수점 자료형과 decimal 자료형을 사용할 수 있다. 그런데 소수점 아래의 정확도가 아닌 큰 수의 정확한 처리는 어떨까. 자주 사용하는 정수형 int보다 더 큰 값은 long, 더 큰 값은 ulong, 그보다 더 큰 값은 어떻게 처리할까. 한 때는 오버플로우 되는 값을 미리 처리하기 위해 최대값의 절반 범위에서 넘어간 값을 다른 변수에 옮겨담아 자리올림 같은 개념으로 구현한 적이 있다. A0 = 1,073,741,823 ( int.Maxvalue / 2 )일 때 A0 값이 1 증가하면 A1 = 1, A0 = 0 이 되는 식 이렇게 하면 물론 간단한 덧셈 뺄셈은 쉽게 구현 가능하지만 곱셈은? 나눗셈은? 답이 안나온다. 심지어 저런 식으..
전라남도교육지원청
'C#' 카테고리의 글 목록 (2 Page)