背景图片可以在自己的电脑任意选取一张大小合适的图片,重命名为backround.jpg,把之前的backround.jpg删除,然后直接粘贴进去

抓取图片展示:

AquariumSimulator类

/** File: BlankClass.java* -*--------------------* This class is a blank one that you can change at will. Remember, if you change* the class name, you'll need to change the filename so that it matches.* Then you can extend GraphicsProgram, ConsoleProgram, or DialogProgram as you like.*/
import acm.program.*;public class AquariumSimulator extends Program {// The animation constant.private static final double DELAY = 1000.0 / 50;/*引入fish*/private Tank fishTank = new Tank();public void run() {/*设置屏幕大小*/setSize(Tank.SCREEN_WIDTH, Tank.SCREEN_HEIGHT);// adds the fishtank (which is a GCanvas) to the screenadd(fishTank);fishTank.init();// animates the fishTankwhile(true) {fishTank.heartbeat();pause(DELAY);}}
}

Fish类

import acm.graphics.*;
import acm.util.RandomGenerator;public class Fish{private static final double MOVE_AMT = 3.0;//移动速度private GImage img = null;//鱼图也决定鱼private GPoint goal = null;//鱼饵private boolean isLeftImgShown = false;//是否朝左public Fish() {img = new GImage("blueFishRight.png");isLeftImgShown = false;}public void heartbeat() {//没鱼食了加,把鱼食打印到鱼的目标上if(goal == null) {setGoal();}moveTowardsGoal();}public GImage getImage() {//传出鱼的图return img;}private void moveTowardsGoal() {//决定游泳朝向double dy = goal.getY() - img.getY()-60;double dx = goal.getX() - img.getX()-100;double dist = Math.sqrt(dx * dx + dy * dy);if(dist > MOVE_AMT) {//距离大于游泳速度// move MOVE_AMT pixels towards the goaldouble moveX = MOVE_AMT / dist * dx;double moveY = MOVE_AMT / dist * dy;img.move(moveX, moveY);} else {//吃掉了鱼饵goal = null;Tank.fishfood.beichi();}makeImageMatchDirection(dx);}private void makeImageMatchDirection(double dx) {//转换方向boolean shouldFaceLeft = dx < 0;if(shouldFaceLeft != isLeftImgShown) {//是否与原方向相同if(shouldFaceLeft) {img.setImage("blueFishLeft.png");} else {img.setImage("blueFishRight.png");}isLeftImgShown = shouldFaceLeft;}}private void setGoal() {//随机设立鱼饵RandomGenerator rg = RandomGenerator.getInstance();double maxX = Tank.SCREEN_WIDTH - img.getWidth();double maxY = Tank.SCREEN_HEIGHT - img.getHeight();double goalX = rg.nextDouble(0, maxX);double goalY = rg.nextDouble(0, maxY);goal = new GPoint(goalX,goalY);}public void findfood(double x,double y){goal = new GPoint(x,y);}
}

Tank类

//Tank
/** File: BlankClass.java* ---------------------* This class is a blank one that you can change at will. Remember, if you change* the class name, you'll need to change the filename so that it matches.* Then you can extend GraphicsProgram, ConsoleProgram, or DialogProgram as you like.*/
import java.util.ArrayList;
import acm.graphics.*;public class Tank extends GCanvas {//鱼缸public static final int SCREEN_WIDTH = 800;public static final int SCREEN_HEIGHT = 600;private ArrayList<Fish> fishes = new ArrayList<Fish>();public static final Fishfood fishfood = new Fishfood();public void init() {//设立背景和鱼addBackground();addFishes();}private void addBackground() {//设立背景GImage img = new GImage("background.jpg");img.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);add(img);fishfood.Initfishfood();//                            1}private void addFishes() {//设立鱼for(int i = 0; i < 3; i++) {Fish fish = new Fish();//加鱼add(fish.getImage());fishes.add(fish);}}public void heartbeat() {for(Fish fish : fishes) {fish.heartbeat();if(!fishfood.exit){if(System.currentTimeMillis()>fishfood.startTime){fishfood.exit = true;fishfood.Initfishfood();fish.findfood(fishfood.x, fishfood.y);fishfood.fishfod.setFilled(true);add(fishfood.fishfod,fishfood.x,fishfood.y);}}else {fish.findfood(fishfood.x, fishfood.y);}}}
}

Fishfood类

import acm.util.RandomGenerator;
import java.awt.Color;
import acm.graphics.*;public class Fishfood {boolean exit;public GOval fishfod;public double x,y;public long Sleptime;public long startTime;Fishfood(){this.exit = false;this.x = 0;this.y = 0;this.Sleptime = 2000;this.startTime = System.currentTimeMillis()+this.startTime;fishfod = new GOval(20,20);fishfod.setFilled(false);fishfod.setFillColor(Color.yellow);}public void Initfishfood(){RandomGenerator rg = RandomGenerator.getInstance();this.x = rg.nextDouble(0, Tank.SCREEN_WIDTH);this.y = rg.nextDouble(0, Tank.SCREEN_HEIGHT);}public void beichi(){this.exit = false;fishfod.setFilled(false);this.startTime = System.currentTimeMillis()+this.Sleptime;}
}

Java之Eclipse实现——在海绵宝宝的比基尼海滩里投喂鱼食相关推荐

  1. 【Java】eclipse如何导入项目

    [Java]eclipse如何导入项目 1.第一步,打开eclipse,点击file->import 2.第二步,选择general->existing projects into wor ...

  2. Java基础-Eclipse第三方安装包管理工具之Maven

    Java基础-Eclipse第三方安装包管理工具之Maven 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 玩过Linux的小伙伴应该都知道yum吧,我们只要把搭建好的yum仓库配 ...

  3. JAVA EE Eclipse下配置Tomcat服务器

    在进行Java web编程之前,必须要进行web服务器的配置,这里选择在Java EE(版本) Eclipse中进行服务器的配置.当然了,在安装Java EE Eclipse之前要先安装JDK,并且要 ...

  4. Java在eclipse下开发的常用快捷键集锦

    2019独角兽企业重金招聘Python工程师标准>>> Java在eclipse下开发的常用快捷键集锦 ctrl+shift+o 说明:删除无用的代码引用 使用场景:当前文件中的引用 ...

  5. java基础-Eclipse开发工具介绍

    java基础-Eclipse开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 所谓工欲善其事必先利其器,即将身为一名Java开发工程师怎么能没有一款好使的IDE呢?今天就 ...

  6. eclipse没有java web,Eclipse Juno在Dynamic Web Project中没有JSP(但其他一切都很好)

    简短的问题是,在创建动态Web项目(1.6 jdk)时,我可以看到要创建的所有文件类型,但jsp没有选项 . 在我检查文件关联时添加到那里,没有可供选择的JSP编辑器 . 稍微长一点的版本是我只想编辑 ...

  7. java配置opencv_在Windows中使用OpenCV Java与Eclipse

    自2.4.4版本以来,OpenCV支持Java.在本教程中,我将介绍如何设置在Windows中使用OpenCV Java与Eclipse的开发环境,以便您可以享受垃圾回收,非常可重构(重命名变量,提取 ...

  8. java eclipse svn_[Java教程]Eclipse 安装 SVN 的在线插件

    [Java教程]Eclipse 安装 SVN 的在线插件 0 2016-11-14 07:12:28 这是继上次svn 客户端与服务器安装后的如何在Eclipse 环境下在线安装 SVN插件,我的Ec ...

  9. Using OpenCV Java with Eclipse

    转自:http://docs.opencv.org/trunk/doc/tutorials/introduction/java_eclipse/java_eclipse.html Using Open ...

最新文章

  1. 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战
  2. golang中slice切片的修改操作
  3. 为什么用户体验设计师需要像建筑师一样思考?
  4. truffle (ETH以太坊智能合约集成开发工具) 入门教程
  5. 如何在Java中生成特定范围内的随机整数?
  6. 中文预训练模型ZEN开源,效果领域内最佳,创新工场港科大出品
  7. 陈天桥:欣赏360保护隐私 用户安全永远第一
  8. 网络:XSS和HttpOnly
  9. 22.循环控制.rs
  10. Orleans入门例子
  11. SpringBoot 分布式session
  12. [用友]报表格式异常的处理
  13. Python函数认识(二)
  14. adb通过wifi连接真机
  15. JOSH智能物联网操作系统正式发布
  16. Idea解决项目起不来的三个方法
  17. python一维数组和二维数组,Python numpy实现二维数组和一维数组拼接的方法
  18. 湖南计算机考试模拟程序,湖南省计算机等级考试模拟 试卷5
  19. 【IoT】NFC CPU 卡 AID 应用标识符规范
  20. 如何本地搭建Plex私人影音云盘教程,实现Plex家庭影音中心,打造超级多媒体中心

热门文章

  1. 妹子图APP(四)—— SQLite保存数据实现离线图片查看
  2. C语言循环语句的研究意义,C语言中循环语句的应用研究
  3. 使用scp传输文件 Host key verification failed.解决
  4. 数据库创建表以及增删改查
  5. Linksys WRT54G 路由器溢出漏洞分析—— 运行环境修复
  6. 字体/字库: [ 下载 ] > freetype sdl sdl_ttf
  7. 腾讯云从良心云转变成“凉心云”,乱封禁服务器与域名怎么办?
  8. vb UBound 数据上界
  9. 关于ADS1292测心率心电的一些学习总结
  10. v-for中的key是什么作用?