2014-11-28 3 views
3

할당을 위해 Java에서 약간의 게임을 만들려고합니다.JButton의 배열에서 특정 JButton의 이동을 시뮬레이트하는 방법

우리는 (N = 5와 같은 일부 분별 수 7) 필드 (이 경우 각 필드가 버튼입니다) 및 해당 필드에이 규칙은 NXN와 JFrame의 창에서 크기 조절이 그리드가 필요 :

가운데 단추는 "블랙홀"이며 2 명의 플레이어가 있습니다. 각 플레이어는 자신이 처분 할 수있는 N-1 개의 배를 가지고 있으며, 블랙홀로 이동해야합니다. 이 목표를 달성 한 첫 번째 플레이어가 승리합니다. 두 플레이어의 배송은 대각선으로 중앙 (블랙홀)을 향해 비스듬히 정렬되어 있습니다.

트릭은 배가 어떤 방향으로 가고 있다고 말하면 벽이나 다른 배에 부딪 힐 때까지 그 방향으로 갈 것입니다. 여기

은 게임 설정에서 어떻게 보이는지 그리고 당신 주위에 배를 이동 :

enter image description here

내 질문은 이미 successfuly 모든 선박과 올바른 위치에있는 블랙홀로 필드를 만든 것입니다. 모두는 버튼이며 클릭 할 수 있기 때문에 다음과 같은 방법을 사용합니다.

마우스 클릭으로 하나의 버튼을 선택한 후에는 시스템에서 포커스를 설정해야합니다 (ActionListener를 통해 requestFocus()를 시도했습니다). 하지만 아무것도하지 않는 것처럼 보입니다).

그런 다음 포커스가 설정된 후에 이미 동일한 ActionListener가있는 동일한 버튼에 화살표 키 입력을 기다리는 KeyListener가 있습니다. 그런 다음, 배가 벽이나 벽을 치거나지도에서 지워질 때까지 검정색 구멍으로 들어갈 때까지 단추가 채색을 움직이는 방향을 입력 한 후 움직임을 시뮬레이션합니다.

내 질문은 내가 자바 I 버튼을 선택한 후 특정 버튼에있는 모든 KeyListener는 화살표 키를들을 것을 알고 어떻게해야합니까이다

다른 하나는 - 실제로 움직임을 시뮬레이션 어떻게 ?

기본적으로 두 팀의 우주선은 파란색/빨간색으로 표시됩니다. 블록의 나머지 부분은 검정색 중간에있는 블랙홀을 제외하고 모두 흰색입니다.

선택한 버튼이 이동 명령을 받으면 벽이나 다른 선박에 닿을 때까지 블록 단위로 이동하도록 setBackGroundColoring을 이동 시키려면 어떻게해야합니까? 나는 어디서부터 시작해야할지조차 모르기 때문에 여기서 약간의 도움을 요청할 것이라고 생각했습니다.

또한 인수로 KeyAdapter와 버튼에 모든 KeyListener를 추가해야하며, 경우에 이벤트가 발생하면 이벤트의 키 코드를 얻을 수 있고, 값에 대해 그것을 확인
+0

".addActionListener (this)"를 버튼에 포함 시켰습니까? 그것 없이는, 당신의 버튼은 행동을 듣지 않을 것입니다. 다음과 같이하십시오 : gameboardButton [i] .addActionListener (this); –

+0

간단한 예가 나와 있으며 관련 예제는이 [응답] (http://stackoverflow.com/a/3072979/230513)에 나와 있습니다. – trashgod

+0

@Marcelo Tataje 물론 그렇습니다. 이미 버튼을 클릭 한 상태에서 유사한 버튼을 누르면 버튼이 빨간색으로 바뀌었지만 동작을 "시뮬레이트"하는 방법을 알지 못했습니다. – user1966576

답변

1

:

KeyEvent.VK_UP 
KeyEvent.VK_DOWN 
KeyEvent.VK_LEFT 
KeyEvent.VK_RIGHT 

그런 다음 필요한 조치를 취하십시오.

움직임을 시뮬레이트하는 것과 관련하여 삼각형을 단추에서 단추로 '점프'하거나 더 유동적으로 보이기를 원하십니까?

+0

단순히 점프해도 충분하지만, 액체로 만드는 것은 그리 어렵지 않을 것입니다. 하나의 블록이 움직일 때마다 전체 그리드를 다시 칠하는 것과 같은 것을 취할 것입니다. – user1966576

+0

버튼 위에 떠 다니는 이미지보다는 현재 버튼의 아이콘에있는 이미지를 사용한다고 가정합니다. 후자의 경우 몇 밀리 초마다 한 픽셀 씩 이미지를 이동해야하기 때문에 더 간단합니다. 전자의 경우 단추에서 이미지를 제거한 다음 동일한 위치에 이미지를 그린 다음 몇 밀리 초마다 한 픽셀 씩 다시 이동해야합니다. 또한 Swing에서 이중 버퍼링을 찾아서 어떻게 처리하는지 확인하고 더 부드럽게 보이게해야합니다. – Sokratees9