2012-07-03 4 views
0

내가하는 일이 무엇인지 간결하게 설명하는 데 어려움을 겪고 있습니다. 나는 내 문제에 대해 구체적으로하려고 노력할 것입니다. 누군가가 제안 할 수 있거나 공부할 방향으로 나를 가르키면 크게 감사하겠습니다.다른 메서드 내에서 다른 GUI 메서드를 호출하려고 시도했습니다. C#

나는 GUI 버전을 프로그래밍하려고합니다. 카드 게임 Dominion에서는 다양한 카드를 사용하면 다른 결과와 선택을 얻을 수 있습니다. 이 카드 중 많은 카드는 시작 카드 (카드를 손에서 선택하고 쓰레기/적을 봅니다.)를 선택할 수 있지만 종료 옵션은 다릅니다 (예 : 카드를 휴지통으로 업그레이드/휴지통 카드를 다른 플레이어에게 제공). 카드를 재생할 때, 프로그램은 고유의 숫자 카드 코드를 찾고 그 카드에 특정한 코드의 실행을 시작합니다.

내가 유일한 카드 코드 INSIDE 사용자 입력을 수신보다 일반적인 방법을 가지고 싶습니다,하지만 난 점점 오류를 계속 : 내가 끊었있어 여기 어디에

입니다. 이상적으로, 나는 (특히, "플레이 카드"버튼을 누릅니다.)를 '은 buttonClicked'이벤트에서

for(int i = 0; i < totalPlayers; i++) 
{ 
    showEnemyHand(i); 
} 

또는

for(int i = 0; i < totalPlayers; i++) 
{ 
    thiefEffect(i); 
} 

같은 것을 할 수있을하려는 showEnemyHand (INT)와 thiefEffect (int) 메서드는 사용자 입력을 기다리고 응답을 저장 한 다음 호출 된 for 루프로 돌아가지만 원래 기대했던 것만 큼 쉽지는 않습니다.

나는 내가 무엇을 찾고 있어야하는지 알지 못해 가장 고통 받고 있습니다. 나는 이벤트 처리 및 대의원에 대해 읽고 있었고, 나는 그것이 내가 필요한 것인지 확신 할 수 없다. 누구든지 내가 배울 필요가있는 방향으로 나를 가리킬 수 있습니까, 아니면 내가 좀 더 쉽게 검색 할 수 있도록 내가 해결하려고하는 주제를 나에게 줄 수 있습니까? (물론, 내가 그것을 도울 수 있도록 도울 것이다 = D)

감사합니다. Jake

답변

0

해결 방법은 명령 줄 기반 게임, 연속/동시 발음이있는 언어 또는 showEnemyHand 등이 사용자 입력을 차단하는 멀티 스레드 응용 프로그램에 적합합니다. GUI 기반 게임의 경우 이벤트 기반 아키텍처가 실제로 가장 잘 작동 할 것이므로 원칙적으로 더 자세히 배우는 것이 좋습니다.

그러나 루프를 사용하여 실제로 수행하려는 경우 threadingblocking calls에 대해 읽는 것이 좋습니다.개념을 이해하면 다음을 수행 할 수 있어야합니다.

  1. 루프를 호스트 할 별도의 스레드를 만듭니다.
  2. 잠금을 만들어 사용자가 무언가를 입력 할 때까지 실행을 차단합니다 (링크 된 질문의 예 참조). 사용자 입력에 대한 콜백 루프 에 고정
  3. 사용 : 루프의 시작 부분에서
    1. , 당신은 당신의 잠금을 기다릴;
    2. 사용자가 무언가를 입력하면 (이벤트 처리기를 사용하여 감지 할 것입니다. 사용중인 특정 GUI 프레임 워크의 문서를 참조하십시오) 선택한 작업을 저장하고 잠금을 해제합니다.
    3. 루프는 자동으로 계속 진행되며 저장된 동작을 읽고 동일한 지점에 다시 도달하여 다른 사용자 입력을 기다릴 때까지 반복을 수행합니다.

이 방법은 이벤트 기반 논리를 사용하여 코딩 규칙을보다 쉽게 ​​또는 어렵게이든, 그것은 논쟁의 여지가있다. coroutines에 대해서도 같은 말을 할 수 있습니다 (경험이 적지 만 나는 의견을 말할 수 없습니다). 내가 준 포인터는 당신이 시작하는 데 도움이 될 것입니다.

+0

멋진. 정말 고마워. 나는 그것이 며칠 동안 일했는지는 말할 수 없을 것이다. 그러나 그것이 효과가있을 때 나는 나의 결과를 공유 할 것이다. 이것은 내가 찾고있는 종류의 소리처럼 들린다. 고마워. – doktorjake

관련 문제