哈工大java实验 移动小方块

/*java第二次实验
 * 移动小方块
 */
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.*;


public class Game {
public static void main(String[] args) {
GameFrame MyFrame = new GameFrame();
MyFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyFrame.setVisible(true);
}
}


class GameFrame extends JFrame {
private int flag = 0;
private double xPos[] = { 0, 0, 270, 0, 270 };
private double yPos[] = { 0, 0, 0, 270, 270 };
private double arriver[] = { 0, 0, 0, 0, 0 };
private Rectangle2D rect[] = new Rectangle2D[5];


public GameFrame() {
GamePanel MyPanel = new GamePanel();
addKeyListener(new GameKeyListener());// 增加监听器
this.add(MyPanel);
setSize(308, 334);
}


class GamePanel extends JPanel {
public GamePanel() {
}


public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
for (int i = 1; i <= 4; i++) {
rect[i] = new Rectangle2D.Double(xPos[i], yPos[i], 30f, 30f);
}
ColorMovingPaint(g2);
MiddlePaint(g2);
isWin(g2);
repaint();
}


public void isWin(Graphics2D g2) {
boolean isWin = true;
for (int i = 1; i <= 4; i++) {
if (arriver[i] == 0)
isWin = false;
}
if (isWin) {
g2.drawString("恭喜你,游戏结束!", 100, 100);
}
}


public void MiddlePaint(Graphics g2) {
g2.setColor(Color.RED);
g2.drawRect(120, 120, 30, 30);
g2.drawRect(120, 150, 30, 30);
g2.drawRect(150, 120, 30, 30);
g2.drawRect(150, 150, 30, 30);
}


public void ColorMovingPaint(Graphics2D g2) {
for (int i = 1; i <= 4; i++) {
if (flag != i) {
g2.setColor(Color.BLUE);
g2.fill(rect[i]);
} else {
g2.setColor(Color.RED);
g2.fill(rect[i]);
}
}
}
}


class GameKeyListener implements KeyListener {
public void keyPressed(KeyEvent event) {
int keyCode = event.getKeyCode();
if (keyCode == KeyEvent.VK_1) {
flag = 1;
}
if (keyCode == KeyEvent.VK_2) {
flag = 2;
}
if (keyCode == KeyEvent.VK_3) {
flag = 3;
}
if (keyCode == KeyEvent.VK_4) {
flag = 4;
}


if (keyCode == KeyEvent.VK_UP) {
move(0, -30, flag);
}
if (keyCode == KeyEvent.VK_DOWN) {
move(0, 30, flag);
}
if (keyCode == KeyEvent.VK_LEFT) {
move(-30, 0, flag);
}
if (keyCode == KeyEvent.VK_RIGHT) {
move(30, 0, flag);
}
}


public void keyReleased(KeyEvent arg0) {
}


public void keyTyped(KeyEvent arg0) {
}
}


void move(int x, int y, int flag) {
double xTemp = xPos[flag] + x;
double yTemp = yPos[flag] + y;
boolean canMove = true;
for (int i = 1; i <= 4; i++) {
if (i == flag)
continue;
if (xTemp == xPos[i] && yTemp == yPos[i]||xTemp>270||xTemp<0||yTemp<0||yTemp>270) {
canMove = false;
break;
}
}
if (canMove) {
xPos[flag] += x;
yPos[flag] += y;
}
if (xPos[flag] >= 120 && xPos[flag] <= 150 && yPos[flag] <= 150
&& yPos[flag] >= 120)
arriver[flag] = 1;
else
arriver[flag] = 0;
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值