C#을 사용하여 GUI를 Visual Studio를 사용하여 구성하는 방법에는 크게 Winform(윈폼)과 WPF 두가지가 존재합니다. WPF는 Dispatcher Checker를 사용하여 UI Thread가 아닌 다른 Thread를 판단한다면Winform의 경우에는 InvokeRequired를 사용하여 UI Thread가 아닌 다른 Thread에서 접근하려고 하는지 판단합니다. InvokeRequired해당 Property는 System.Windows.Forms.Control에 정의된 Property로, 해당 컨트롤이 UI Thread 이외의 Thread에서 컨트롤에 접근하려고 할 때 Invoke 혹은 BeginInvoke를 사용해야하는지 유무를 반환하는 Property입니다.즉, UI Thread 이..
C#을 다루면서 비트를 다룰 때 생각보다 많이 사용하게되는 BitConverter입니다. 데이터를 바이트 배열로 변환하거나 바이트 배열을 데이터로 변환하여 전달할 때 많이 쓰입니다. BitConverter Class // // 요약: // Converts base data types to an array of bytes, and an array of bytes to base // data types. public static class BitConverter BitConverter는 static class의 형태로 내부의 함수들 또한 static 함수로 이루어져 있습니다. BitConverter에서 자주 쓰이는 함수 (데이터를 Byte 배열로 변환) // bool 값을 byte[]로 변환 public s..
HP사의 보급형 게이밍 노트북 브랜드인 빅터스시리즈의 노트북을 사게 되었습니다. (HP에는 두 가지 게이밍 브랜드가 존재하죠. Omen(오멘)과 Victus(빅터스)) 이미 나온지 꽤 된 노트북이라 많은 리뷰가 있을 것이니 저는 약 4일간 사용했을 때 단점을 위주로 리뷰를 하겠습니다. (좋은 리뷰는 많이들 하신 것 같으니) ※ 빅터스 16의 d모델 기준입니다. (저는 Victus 16-d1121TX모델이지만 HP 에서는 16-d 모델 전체를 하나로 보고 있기 때문입니다.) 1. 윈도우 10 설치 힘듬 빅터스 16은 기본적으로 윈도우 11 지원으로 제품을 냈습니다. 그래서 윈도우 10의 드라이버를 공식적으로 지원해주지 않는데 윈도우 자체의 드라이버 업데이트 기능으로 될 것 같아서 설치해보았으나 칩셋과 무선..
C#을 다루면서 비트를 다룰 때 생각보다 많이 사용하게되는 BitArray입니다. 바이트 배열을 넣어서 사용하기도 하고 비트의 개수를 넣어서 사용하기도 합니다. BitArray 생성자 using System.Collections; // BitArray를 사용하기 위함 // length 만큼의 길이를 가진 비트배열을 만듬 (모든 비트는 0) public BitArray(int length); // length 만큼의 길이를 가진 비트배열을 만들고 기본값을 defaultValue로 설정 public BitArray(int length, bool defaultValue) // 바이트 배열을 비트배열로 만듬 // 예) bytes = byte[2] -> BitArray를 16칸 자리를 만듬 // (BitArray..
[C++/Console] 테트리스 만들어 보기 - 6 (바닥 충돌, 블럭 랜덤 생성) [C++/Console] 테트리스 만들어 보기 - 5 (충돌 판정 - 벽, 블럭) [C++/Console] 테트리스 만들어 보기 - 4 (플레이어(블럭) 움직임) [C++/Console] 테트리스 만들어 보기 - 3 (화면 출력에 대한 고찰) [C++/Console] eskeptor.tistory.com 지난 시간에는 바닥 충돌, 블럭 랜덤 생성에 대해서 알아보았습니다. 오늘은 시간이 지남에 따라 자동으로 블럭이 하강하고, 스페이스바를 눌렀을 때 블럭이 회전되며, 하나의 라인을 형성하면 해당 라인을 클리어 후 점수가 올라가는 점수 시스템에 대해서 알아보겠습니다. 자동 하강 테트리스는 지정된 시간이 지나면 블럭이 아래로 ..
최근에 스크립트형 언어 컴파일러를 만들고 있습니다. (실시간 스크립트 변형 후 동작을 위한) 이 과정 중에서 어휘 분석기(Lexical Analyzer)를 구현하는 과정에서 이전에 한 번 써보았던 unordered_map를 사용하게되어 unordered_map을 다시 공부한 내용을 써보려고 합니다. 들어가기에 앞서 제가 공부한 내용들은 전부 아래의 링크들에서 학습 및 참고하였습니다. A Proposal to Add Hash Tables to the Standard Library X(i, j, n, hf, eq) X a(i, j, n, hf, eq) X Constructs an empty container with at least n buckets, using hf as the hash function a..
[C++/Console] 테트리스 만들어 보기 - 5 (충돌 판정 - 벽, 블럭) [C++/Console] 테트리스 만들어 보기 - 4 (플레이어(블럭) 움직임) [C++/Console] 테트리스 만들어 보기 - 3 (화면 출력에 대한 고찰) [C++/Console] 테트리스 만들어 보기 - 2 (키보드 입력 및 블럭) [C++/Console] eskeptor.tistory.com 지난 시간에는 충돌 판정에 관련하여 알아보았습니다. 오늘은 바닥 충돌(또는 블럭 충돌) 및 블럭 랜덤 생성에 대해서 알아보겠습니다. 바닥 충돌 (또는 블럭 충돌) 지난 시간에 이어서 바닥에 충돌하였을 때 감지하는 방법을 알아봅시다. 바닥을 확인하는 CheckBottom 함수를 작성합니다. void CheckBottom() { ..
[C++/Console] 테트리스 만들어 보기 - 4 (플레이어(블럭) 움직임) [C++/Console] 테트리스 만들어 보기 - 3 (화면 출력에 대한 고찰) [C++/Console] 테트리스 만들어 보기 - 2 (키보드 입력 및 블럭) [C++/Console] 테트리스 만들어 보기 - 1 (간단 소개 및 더블 버퍼링) Window 환 eskeptor.tistory.com 지난 시간에는 플레이어(블럭)의 움직임에 관련하여 알아보았습니다. 오늘은 플레이어(블럭) 충돌 판정에 대해서 알아보겠습니다. 충돌 판정 지난 시간에 했던 프로젝트를 실행해서 움직여보면 좌, 우, 하단 끝에 도달하여도 계속 가는 것을 볼 수 있습니다. 이것을 방지하기 위해서는 충돌 판정을 통해서 움직이지 못하도록 해야합니다. 그럼 어떻..
[C++/Console] 테트리스 만들어 보기 - 3 (화면 출력에 대한 고찰) [C++/Console] 테트리스 만들어 보기 - 2 (키보드 입력 및 블럭) [C++/Console] 테트리스 만들어 보기 - 1 (간단 소개 및 더블 버퍼링) Window 환경에서 C++과 Console창을 이용하여 테트리스를 만들어 봅시다. eskeptor.tistory.com 지난 시간에는 화면 출력에 관련하여 알아보았습니다. 오늘은 플레이어(블럭) 움직이는 처리에 대해서 알아보겠습니다. 플레이어(블럭) 클래스 먼저 플레이어(블럭)의 처리를 도와줄 클래스를 작성하여봅시다. class CPlayer { public: // Block 방향 enum eDirection { Dir0 = 0, Dir90, Dir180, Dir..
[C++/Console] 테트리스 만들어 보기 - 2 (키보드 입력 및 블럭) [C++/Console] 테트리스 만들어 보기 - 1 (간단 소개 및 더블 버퍼링) Window 환경에서 C++과 Console창을 이용하여 테트리스를 만들어 봅시다. 명령 프롬프트의 환경설정 테트리스에서 사용하는 특수 문 eskeptor.tistory.com 지난 시간에는 키보드 입력 및 블럭에 관련하여 알아보았습니다. 오늘은 Console 상에서 도형 및 프레임(화면)에 대하여 어떻게 출력할지에 대한 고찰을 해보겠습니다. 화면 출력 테트리스는 기본적으로 네모난 틀 안에서 시작합니다. 기본적으로 가로로 10칸, 세로로 20칸으로 구성됩니다. (프레임 제외) 이 공간을 이차원 배열로 표현하면 // Origin Map const..