2013-02-25 2 views
0

기본 타일 엔진에서 간단한 뱀 게임을 만들려고 할 때 약간의 문제가 있습니다. 나는 C# 또는 Windows Forms로 일한 적이 없으며 현재 학습 단계에 있습니다. 나는 여기에서 얻는 어떤 도움에 감사 할 것이다.기본 게임 설정 및 기본 문제 디버그

 int[,] level = { 
           { 0, 0, 0, 0, 0 ,0 }, 
           { 0, 0, 0, 0, 0 ,0 }, 
           { 0, 0, 0, 0, 0 ,0 }, 
           { 0, 0, 0, 0, 0 ,0 }, 
           { 0, 0, 0, 0, 0 ,0 }, 
           { 0, 0, 0, 0, 0 ,0 }, 
          }; 

현재 모든 타일은 비어 있습니다. 내가 이미지를 추가한다고 말하고 싶다면 0부터 1까지만하면됩니다. 목표는 키보드에서 화살표 키로 0을 1로 바꾸는 것입니다.

private void tmrMov_Tick(object sender, EventArgs e) 
    { 

     if (_objPosition == Position.Right) 
     { 

      if(_x<6 && _x>=0) 
      _x += 1; 

     } 
     . 
     . 
     . 
     //and so on 
     . 
     . 
     . 

     Invalidate(); 
    } 

이렇게하면 화살표 키를 사용하여 0에서 1로 바꾸려고하는데 현재 작동하지 않습니다. 내가 위의 배열을 호출하고 어떻게 이것은

 public Form1() 
    { 
      InitializeComponent(); 
      _x = rand.Next(0,5 + 1); 
      _y = rand.Next(0, 5 + 1); 
      _k = 1; 
      level[_x, _y] = _k; 
      _objPosition = Position.Right; 
    } 

...

나를 내가 뭘 잘못 알려 주시기 바랍니다. 나는 결국 다시 시작해야하거나 다른 프로젝트를 선택해야한다는 것을 알고 있지만 적어도 내가 완전히 잘못되지는 않았 음을 알고 싶다. 이 읽을 오래되지 이후 나는 전체 프로젝트를 부착하고

... http://www.mediafire.com/?hz3h2job28y9lfb

편집 : stackexchange에 대한 답변 중 하나가 디버깅 질문에 여기를 게시하는 제안하기 때문에이 질문은 여기에 게시됩니다 : https://softwareengineering.stackexchange.com/questions/188285/simple-gameproblem-with-key-mapping

다른 하나만 삭제해도 괜찮습니다.

미리 감사드립니다.

+0

성취하고자하는 일에 더 많은 설명이 필요하면 알려주십시오. 나는 그 생각이 이해하기 쉽다고 믿는다. – AceofSpades

답변

1

뱀을 움직이려면 0을 이전 위치에 놓아야합니다 (지금은 셀에서만 사용하기 때문에). 새 위치를 계산하고 1을 새 위치에 넣어야합니다. 그래서 타이머의 틱 hanlder은 다음과 같이 볼 수 있었다 다음 Paint 경우에

private void tmrMov_Tick(object sender, EventArgs e) 
{ 
    level[_x, _y] = 0; 
    //... 
    // other stuff to calculate new location based on Position 

    level[_x, _y] = 1; 

    Invalidate(); 
} 

또한 추가 PictureBoxes 완전히 잘못된 것입니다. Graphics 클래스의 다양한 방법을 사용하여 보드를 그려야합니다. 네가하고 싶었던 것 같지만 왜 그걸 포기 했니?

코드에 대해 많은 이야기가 있습니다. 다음은 그 중 몇 가지 :

  1. 대신 보드 너비 또는 높이 사방 매직 넘버 6를 사용하는 한다거나 할에서 보드의 크기를 넣고 사방을 사용합니다. 이렇게하면 전체 소스 코드에 영향을 미치지 않고 보드 크기를 쉽게 바꿀 수 있습니다 (또는 단지 6을 업데이트하는 것을 잊어 버리고 찾기 힘든 버그를 소개 함).

  2. 언제든지 파일 (주석 코드 panel1_Paint)에서 이미지를로드하는 대신 이미지를 한 번로드하고 필요한 경우 크기를 조정 한 다음 필드에 유지하십시오. 필요할 때마다 사용하십시오. 이것은 성능을 극적으로 향상시킵니다.

  3. 을 사용하여 이미지 양식 파일을로드하십시오.

  4. 당신은 뱀 보드에서 가고 싶지 않을, 그래서 당신은 (예를 들어) 뱀 오른쪽으로 이동하는 wnat 때, 당신은 _x_x < _boardWidth-1를 증가 할 수 있습니다. 너 내가 _boardWidth라고 할 때 너는 무슨 뜻인지 알지, 그렇지? :-)

  5. 전체 보드를 Paint 이벤트에 페인트해야합니다. 단일 세포 만이 아닙니다. Invalidate 메서드를 호출 할 때뿐만 아니라 양식을 그리기해야 할 때마다 Paint 이벤트가 호출됩니다.

  6. Position이라는 열거 형이 있습니다. 실제로는 Direction이어야합니다.

행복한 학습.

+0

처리량을 가져 주셔서 감사합니다. 나는 당신의 총알 포인트를 조사 할 것입니다. – AceofSpades

+0

당신이 언급 한 포인트 중 일부는 이미 운이 없었으나 이미 시도했음을 바라 보았으므로 나는 그것을 더 많이 또는 덜 향상시킬 것입니다. – AceofSpades

+0

이제는 문제가 생겨서 레벨 가이드 [_x, _y] = 0;과 레벨 [_x, _y] = _k;와 관련된 문제가 생겼습니다. – AceofSpades