/*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;

}

}

java 方块_哈工大java实验 移动小方块相关推荐

  1. 2022-08-02:小红拿到了一个大立方体,该大立方体由1*1*1的小方块拼成,初始每个小方块都是白色。 小红可以每次选择一个小方块染成红色, 每次小红可能选择同一个小方块重复染色, 每次染色以后,

    2022-08-02:小红拿到了一个大立方体,该大立方体由111的小方块拼成,初始每个小方块都是白色. 小红可以每次选择一个小方块染成红色, 每次小红可能选择同一个小方块重复染色, 每次染色以后,你需 ...

  2. 21点 小游戏 java代码_基于Java的21点扑克游戏的实现

    在上次写的比较牌点的扑克游戏上Java扑克游戏(多人多牌数比较游戏)的实现中,添加21点游戏规则,实现21点牌类游戏.具体实现步骤如下:[需要源代码的留QQ,大家一起探讨探讨哈,谢谢啦!] 抽象出规则 ...

  3. java 一二三四五_五道java小题,补更四道java小题

    一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 import java.util.Arr ...

  4. 推方块java代码_我的世界无限推方块 | 手游网游页游攻略大全

    发布时间:2015-10-19 中刷方块可能是有些玩家的需要,接下来小编就为玩家们介绍一个无限刷方块视频教程,希望能够为喜欢这款游戏的玩家们带来一种全新的技巧! 我的世界无限刷方块视频教程 首先准备这 ...

  5. 21点小游戏java编程_用Java编写一个二十一点小游戏

    21点又名黑杰克(Blackjack),起源于法国,已流传到世界各地,有着悠久的历史.现在在世界各地的赌场中都可以看到二十一点,随着互联网的发展,二十一点开始走向网络时代.该游戏由2到6个人玩,使用除 ...

  6. java实例_图例 | Java混合模式分析之火焰图实例

    这是小小的第五篇 前言 在进行性能调优的时候,通常会借助性能分析工具,常用的性能分析工具有perf,DTrace,分析系统资源的使用情况,这些情况根据CPU,内存,生成相关的文本数据,这些文本数据不容 ...

  7. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

  8. java书籍_学习Java最好的10本书,从入门到精通

    在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...

  9. java掌握_掌握Java 11的Constantdynamic

    java掌握 为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集. Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中. 简而言之,通过 ...

最新文章

  1. RS485通信如何设计EMC电路?
  2. 部署Configuration Manager主站点以及辅助站点
  3. Perforce 使用说明
  4. 中国计算机学会YOCSEF TDS《专题探索班》,新一代人工智能的基础与前瞻
  5. 【渝粤教育】电大中专市场营销管理20作业 题库
  6. centos 安装php扩展gd,linux(centos)下为php添加添加GD扩展
  7. python的输出函数_Python
  8. C++PrimerPlus学习——第六章编程练习
  9. 计算机视觉基本原理介绍—RANSAC
  10. 开源框架 Apache Struts 2漏洞的 PoC 已公开
  11. android 长截屏实现,Android实现截屏与截长图功能
  12. python-回文字符串
  13. OA系统新流程创建与管理办法
  14. Typora配置PicGo提示Failed to fetch问题解决
  15. 一篇文章带你入门python基础开发
  16. 华为芯片设计面试题_华为公司面试硬件工程师笔试题
  17. 查询数据库表修改记录的sql语句
  18. ibm p740做虚拟服务器,POWER740 主机板的拆除与安装图文说明
  19. oracle 判断重复次数,sql 查询 某字段 重复次数 最多的记录
  20. leetcode:32. 最长有效括号

热门文章

  1. 归并排序执行次数_肯定能懂的常见算法讲解(1)——排序算法
  2. oppoa9处理器怎么样_oppoA9究竟怎么样?看看与三星A60元气版的对比吧
  3. 2020-12-22 一些有用的开源软件
  4. 《安全测试指南》——配置管理测试【学习笔记】
  5. NTFS权限笔记 2017-12-4
  6. 百度地图API开发指南
  7. [转]Linux环境下段错误的产生原因及调试方法小结
  8. 这篇文章让我步入了无线时代,感激原创。
  9. Design Pattern – Separated Interface Pattern[转]
  10. 有时候,爱就是那么简单