Visual C# 2005에서 테트리스 게임을 프로그래밍하고 있습니다. 아직 설계된 프로그램 중 가장 광범위합니다.C# - 테트리스 클론 - 화살표 키 조합에 대해 적절하게 응답 할 블록을 얻을 수 없음
다른 테트리스 조각의 위치, 이동 및 표시를 제어하기 위해 모양 클래스와 블록 클래스를 만듭니다. 각각의 도형 (및 대응하는 canMoveDown(), canMoveLeft(), canMoveRight() 부울 함수)에 대해 moveDown(), moveLeft() 및 moveRight() 함수를 가지고 있습니다. 이것은 모두 아름답게 작동합니다.
아래쪽, 오른쪽 및 왼쪽 화살표 키를 사용하여 사용자가 블록을 이동할 수있게하고 타이머를 사용하여 셰이프가 너무 많은 밀리 초마다 한 행씩 자동으로 떨어지도록하고 싶습니다.
KeyDown 이벤트 처리기를 사용하여 사용자가 아래쪽, 왼쪽 및 오른쪽 화살표 키를 눌렀을 때를 확인하고 있습니다. 이것은 그렇게 어렵지 않습니다. 문제는 대각선 동작을 허용하고 싶기 때문에 원활하게 작동하도록합니다. 나는 다양한 수준의 성공으로이 문제에 접근하는 여러 가지 방법을 시도해 보았습니다. 그러나 나는 그것을 올바르게 할 수 없다 ...
내 가장 성공적인 접근법은 아래, 왼쪽 및 오른쪽 화살표 키를 누르고있는 시간을 추적하기 위해 3 개의 부울 변수를 사용하는 것이 었습니다. KeyDown 이벤트에서는 부울을 true로 설정하고 KeyUp 이벤트에서는 부울을 false로 설정합니다. KeyDown 이벤트에서 부울 변수를 사용하여 현재 눌려지고있는 조합을 확인하기 위해 이동 방법을 블록에 알려줄 것입니다. 그것은 한 가지를 제외하고는 정말 잘 작동했습니다.
화살표 키 중 하나를 누른 상태에서 두 번째 화살표 키를 누른 다음 두 번째 키를 놓으면 첫 번째 화살표 키 방향으로 계속 이동하는 대신 블록이 완전히 이동하지 않습니다 아직 풀어 봤어. 이것은 두 번째 키가 KeyDown 이벤트를 트리거했기 때문이며, 첫 번째 키가 시작되었다하더라도 KeyUp 이벤트가 시작되고 KeyDp 이벤트가 완전히 시작되는 것을 중지했기 때문입니다.
나는이 문제에 대한 만족스러운 해결책을 찾을 수 없다.
안녕하세요, 감사합니다. 코드와 클래스를 링크에서 시험해 보았습니다. 코드가 잘 작동했습니다. 컴파일하기 전에 수정해야했지만 2008 년이 아니기 때문에 Visual Studio 2005를 사용하고 있었기 때문에 생각했습니다. 웹에서 영원히 검색 한 결과 이처럼 멋지게 작동하는 것을 찾을 수 없었습니다. 다른 사람들에게도 도움이되기를 바랍니다. –
죄송합니다. 내 잘못입니다. 당신은 VS2005에서 일하고 있다고 언급했지만, 나는 그것을 알아 차리지 못했습니다. 네, 저는 자동 속성과 객체 이니셜 라이저 및 "var"키워드를 사용하는 데 익숙합니다. 죄송합니다! 다행이 당신을 위해 일 했어. 게임에 대해서는 XNA를 살펴 봐야합니다. 상자에서 벗어난 멋진 것들이 많이 있습니다. – BFree