티스토리 뷰

MoveBlock(int dx, int dy) 함수를 이용해서 키보드에 따라 움직이는 퍼즐을 만들어보겠습니다.

가장먼저 키보드입력을 받아오도록 합시다.



protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); KeyboardState KeyboardState = Keyboard.GetState();//키보드상태 if (KeyboardState.IsKeyDown(Keys.Left) && stopkeyboard.IsKeyUp(Keys.Left)) { MoveBlock(-1, 0); } if (KeyboardState.IsKeyDown(Keys.Right) && stopkeyboard.IsKeyUp(Keys.Right)) { MoveBlock(1, 0); } if (KeyboardState.IsKeyDown(Keys.Up) && stopkeyboard.IsKeyUp(Keys.Up)) { MoveBlock(0, -1); } if (KeyboardState.IsKeyDown(Keys.Down) && stopkeyboard.IsKeyUp(Keys.Down)) { MoveBlock(0, 1); }

키 입력에 따라 MoveBlock() 함수를 호출 합니다.
각 수에따라 위아래로 셀을 움직일 예정입니다.

키 입력 부분이 완성 되었습니다. 그럼 이제 MoveBlock 함수를 만들어 봅시다.



public void MoveBlock(int dx, int dy) { bool bFind = false;//빈블럭 찾기 int ex = 0;//빈블럭 좌표값 int ey = 0;//빈블럭 좌표값 for (int n = 0; n < 4 && !bFind; n++) { for (int m = 0; m < 6 && !bFind; m++) { if (data[n,m] < 0) { bFind = true; ex = m; ey = n; } } } if (ex + dx >= 6 || ex + dx < 0 || ey + dy >= 4 || ey + dy < 0) return; //만약 좌우 위아래 끝에 도달하면 움직이지 말고 리턴하라// data[ey, ex] = data[ey + dy, ex + dx];// data[ey + dy, ex + dx] = -1;//빈블럭과 움직인 셀을 바꿔줍니다. }

-1의 값을 가진 data[n,m] 의 값을 찾습니다.
찾은후 좌표값을 저장하고 MoveBlock시 들어온 인수를 더해서
-1을 가진 셀과 바꿔버리는 것입니다.

이렇게 하면 -1을 값을 가진 것은 그리지 않게 되고
data 값에 의해서 그림영역이 정해지기때문에 그림이 바뀌지 않고 그 위치로 바뀌게 됩니다.

네 다음 #3에서는 랜덤으로 배열하고 완성 시에 success 글을 출력하도록 하겠습니다.
사용자 삽입 이미지


%보너스


private void setdivise() { graphics.PreferredBackBufferWidth = 240; graphics.PreferredBackBufferHeight = 160; graphics.ApplyChanges(); } 화면 크기를 바꾼 함수입니다. 초기화 부분에 넣어두시면 됩니다.^^
댓글