import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class mytetirs extends JFrame {
Image off;
Graphics offG;
boolean[][] map;
Color[][] colorMap;
Color[] colorType;
boolean isDragged1, isDragged2, isDragged3;
int offX, offY;
int[] blockType;
int[] blockX;
int[] blockY;
int x, y;
int[][] blockPos;
Random r;
GamePanel gamePanel;
public mytetirs(){
super("1010!");
gamePanel = new GamePanel();
Container pane = getContentPane();
pane.add(gamePanel);
map = new boolean[18][18];
colorMap = new Color[18][18];
colorType = new Color[19];
setColorType();
blockX = new int [9];
blockY = new int [9];
r= new Random();
blockType = new int[3];
blockType[0] = Math.abs(r.nextInt());
blockType[1] = Math.abs(r.nextInt());
blockType[2] = Math.abs(r.nextInt());
isDragged1 = false;
isDragged2 = false;
isDragged3 = false;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 600);
setVisible(true);
repaint();
}
public void setBlockXY(int type, int x, int y){
switch(type){
case 0://ㅁ
blockX[0] = x+2; blockY[0] = y+2;
blockX[1] = x+2; blockY[1] = y+1;
blockX[2] = x+2; blockY[2] = y+2;
blockX[3] = x+2; blockY[3] = y+2;
blockX[4] = x+2; blockY[4] = y+2;
blockX[5] = x+2; blockY[5] = y+2;
blockX[6] = x+2; blockY[6] = y+2;
blockX[7] = x+2; blockY[7] = y+2;
blockX[8] = x+2; blockY[8] = y+2;
break;
case 1:
blockX[0] = x+2; blockY[0] = y+2;
blockX[1] = x+2; blockY[1] = y+1;
blockX[2] = x+2; blockY[2] = y+3;
blockX[3] = x+2; blockY[3] = y+2;
blockX[4] = x+2; blockY[4] = y+2;
blockX[5] = x+2; blockY[5] = y+2;
blockX[6] = x+2; blockY[6] = y+2;
blockX[7] = x+2; blockY[7] = y+2;
blockX[8] = x+2; blockY[8] = y+2;
break;
case 2://ㄴ
blockX[0] = x+2; blockY[0] = y+2;
blockX[1] = x+2; blockY[1] = y+1;
blockX[2] = x+2; blockY[2] = y+3;
blockX[3] = x+2; blockY[3] = y+4;
blockX[4] = x+2; blockY[4] = y+2;
blockX[5] = x+2; blockY[5] = y+2;
blockX[6] = x+2; blockY[6] = y+2;
blockX[7] = x+2; blockY[7] = y+2;
blockX[8] = x+2; blockY[8] = y+2;
break;
case 3://ㄴㄴ
blockX[0] = x+2; blockY[0] = y+2;
blockX[1] = x+2; blockY[1] = y+1;
blockX[2] = x+2; blockY[2] = y+3;
blockX[3] = x+2; blockY[3] = y+4;
blockX[4] = x+2; blockY[4] = y+0;
blockX[5] = x+2; blockY[5] = y+2;
blockX[6] = x+2; blockY[6] = y+2;
blockX[7] = x+2; blockY[7] = y+2;
blockX[8] = x+2; blockY[8] = y+2;
break;
}
}
public void drawBlock(int z){
for(int i=0;i<9;i++){
map[blockX[i]][blockY[i]] = true;
colorMap[blockX[i]][blockY[i]] =colorType[blockType[z]];
}
}
public void drawMap(){
for(int i=0;i<18;i++){
for(int j=0;j<18;j++){
if(map[i][j]){
offG.setColor(colorMap[i][j]);
offG.fillRect(i*30, j*30, 30, 30);
}
else{
offG.setColor(Color.white);
offG.fillRect(i*30, j*30, 30, 30);
}
}
}
}
private class GamePanel extends JPanel implements MouseMotionListener, MouseListener{
public GamePanel(){
}
public void paint(Graphics g){
off = createImage(550, 550);
offG = off.getGraphics();
offG.setColor(Color.white);
offG.fillRect(0, 0, 550, 550);
drawMap();
setBlockXY(blockType[0], 12, 1);
drawBlock(0);
setBlockXY(blockType[1], 12, 7);
drawBlock(1);
setBlockXY(blockType[2], 12, 13);
drawBlock(2);
drawGrid();
g.drawImage(off, 0, 0, this);
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent me) {
for(int i=0;i<9;i++){
blockPos[i][i] = blockPos[blockX[i]][blockY[i]];
if(blockPos[i][i].contains(new Point(me.getX(), me.getY()))){
offX = me.getX() - blockX[i];
offY = me.getY() - blockY[i];
isDragged1 = true;
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
isDragged1 = false;
isDragged2 = false;
isDragged3 = false;
}
@Override
public void mouseDragged(MouseEvent me) {
for(int i=0;i<9;i++){
if(isDragged1){
blockX[i] = me.getX() - offX;
blockY[i] = me.getY() - offY;
}
if(isDragged2){
blockX[i] = me.getX() - offX;
blockY[i] = me.getY() - offY;
}
if(isDragged3){
blockX[i] = me.getX() - offX;
blockY[i] = me.getY() - offY;
}
repaint();
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
}
public static void main(String[] args) {
new mytetirs();
}
}
이소스를 실행하면 이런 그림이 나옵니다
너무 길어서 쓸데없는거 몇개 지웠습니다
암튼 그림에서 처럼 3개의 블럭들으 나오는데 이를 마우스이벤트로 10x10의 판에다가 옮기고 싶습니다
이리저리 인터넷 찾아봐서 나온 코드가
@Override
public void mousePressed(MouseEvent me) {
for(int i=0;i<9;i++){
blockPos[i][i] = blockPos[blockX[i]][blockY[i]];
if(blockPos[i][i].contains(new Point(me.getX(), me.getY()))){
offX = me.getX() - blockX[i];
offY = me.getY() - blockY[i];
isDragged1 = true;
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
isDragged1 = false;
isDragged2 = false;
isDragged3 = false;
}
@Override
public void mouseDragged(MouseEvent me) {
for(int i=0;i<9;i++){
if(isDragged1){
blockX[i] = me.getX() - offX;
blockY[i] = me.getY() - offY;
}
if(isDragged2){
blockX[i] = me.getX() - offX;
blockY[i] = me.getY() - offY;
}
if(isDragged3){
blockX[i] = me.getX() - offX;
blockY[i] = me.getY() - offY;
}
repaint();
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
인데 마우스프레스드부분에서 부터 에러가 나더군요
저기서 제가 얻은 지식은 마우스의 포인트좌표가 블럭의x,y좌표안에 있으면 값을 참으로 해서
마우스를 드래그로 옮길때 옮겨진 좌표로 블럭의 위치값 blockX 와 blockY의 값에다가 더해주면 된다 이건데
코딩식은 솔직히 어떻게 해야할지 잘 모르겠습니다
그리고 블럭들도 하나의 메서드에서 x,y값만 바꿔서 3개를 프레임에 뿌린거라서 3개를 옮길려면 블럭들의 위치값을어떻게 해야할지도
모르겠네요 암튼 요약하자면 blockX, blockY의 위치값을 마우스이벤트를이용해 어떻게 옮기는지 좀 알려주세요
댓글 0