2011-12-27 2 views
2

C#에서 이산 이벤트 시뮬레이션을 수행하려고합니다. 나는 무작위로 걷는 패턴을 따라 화면에서 동시에 3 개의 볼을 굴리기를 원합니다. 시간 1의 볼에 볼이 나타나서 회전하기 시작합니다. 시간 5, 볼 2, 그리고 시간 10에 볼 3이 나타납니다. 두 개의 볼이 충분히 가까이 오면 볼의 색이 바뀌어야합니다 (가까이있는 한).이산 이벤트 시뮬레이션 예

저는 이산 이벤트 시뮬레이션을 처음 접했고 C# 프로그래밍에서 어떻게 작동하는지 이해하고 싶습니다. 모델을 만드는 데 필요한 단계는 무엇입니까? 나는 그래픽과 다른 것들을 안다.

답변

4

디자이너를 사용하여 도구 상자에서 양식으로 하나를 끌어 오거나 원하는 경우 코드로 인스턴스화하십시오. 타이머를 두 번 클릭하여 N 밀리 초마다 발생하는 코드에서 _Tick 이벤트를 설정합니다 (타이머의 .Interval 속성이이를 제어 함). .Interval을 1000 (1 초)로 설정하고 X 및 Y 좌표에서 자신의 위치를 ​​추적하는 개체를 사용합니다.

Random 개체를 사용하여 공의 다음 위치 변경 방향을 생성하고 타이머의 _Tick 이벤트 내에서 각 공에 대한 위치 변수를 업데이트합니다.

원시 스레드를 사용하는 것도 가능하지만 타이머는 모든 것을 직접 관리하지 않고도 그 힘을 줄 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 타이머를 사용하고 쓰레드를 사용했다. 쓰레드가 이상한 행동을하지만 두 솔루션 모두 작동합니다. 필자는 이산 이벤트 시뮬레이션에 대한 몇 가지 이론을 읽었으며 이산 이벤트 시뮬레이션의 구성 요소는 시계, 이벤트 목록, 난수 생성기, 통계라고 설명합니다. 공 예제에서 대기열이 사용/유익한 방법은 무엇입니까? 둘째, 두 볼이 가까이 왔는지 추적하는 방법, 다른 타이머 이벤트를 실행해야합니까? –

+0

@OsmanKhalid 어떻게 대기열을 사용해야하는지 잘 모르겠습니다. 처음에는 적절한 간격으로 볼을 놓기 위해 사용할 수 있다고 생각합니다. 두 개의 볼이 충돌하는지 확인하려면'_Tick' 메서드 내에서 모든 볼 움직임을 완료 한 후에 좌표가 겹쳐져 있는지 확인하십시오. – jonsca

3

새로운 올 사람이 통보 :

운영 체제 타이머 또는 스레드를 사용하지 이산 이벤트 시뮬레이션을 작동해야하는 방법입니다. 이 중 하나를 빌딩 블록으로 사용하면 오도 된 일이거나 잘못 될 수 있습니다.

  • 은 위키 피 디아 기사 첫째 ​​대한 Discrete Event Simulation (DES)

  • 수학적 이벤트 시뮬레이션 작업 입증 "모델"소위 '형식주의'가 있습니다를 참조하십시오. 구현해야합니다 (예 : DEVS).

  • 나열된 DES List of discrete event simulation 소프트웨어는 위키 피 디아에서 볼 수 있습니다.

  • 또한 DES에 대한 유용한 sigmawiki (프로그램, 예제, 자습서)을 찾을 수 있습니다. SharpSimReact.NET은 C#의 DES 구현입니다.

관련 문제