喜羊羊与灰太狼——重现高中生物书中的狼群与羊群的数量变化关系曲线图

本文主要是介绍喜羊羊与灰太狼——重现高中生物书中的狼群与羊群的数量变化关系曲线图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

半年前把这个小模型做出来了,今天有小小的重构了一下,模型蛮有趣的,以后有空再加入别的控制条件:


以下是代码的具体实现,一共有三个类

Forest.java
package wolf_sheep;import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;public class Forset extends Frame{public static final int ROWS=105;public static final int COLS=270;public static final int BLOCK_SIZE=5;private Image offScreenImage;public static List<Integer> sheepcount = null;public static List<Integer> wolfcount = null;public static void main(String[] args) {new Forset().launch();}public void launch(){setBounds(10, 10, BLOCK_SIZE*COLS, BLOCK_SIZE*(ROWS+40));addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});sheepcount = new ArrayList<>() ;wolfcount = new ArrayList<>();Sheep.sheeps.add(new Sheep());Wolf.wolfs.add(new Wolf());setVisible(true);run();}private void run() {while(true){repaint();          try {/*** 设置狼与羊的移动频率 ;*/Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}}@Overridepublic void paint(Graphics g) {g.setColor(Color.GRAY);g.fillRect(0, 0, BLOCK_SIZE*COLS, BLOCK_SIZE*(ROWS+40));g.setColor(Color.BLACK);for (int x=1;x<COLS;x++){g.drawLine(BLOCK_SIZE*x, 0, BLOCK_SIZE*x, BLOCK_SIZE*ROWS);}for (int x=1;x<ROWS;x++){g.drawLine(0, BLOCK_SIZE*x, BLOCK_SIZE*COLS, BLOCK_SIZE*x);}for(int x=0;x<Sheep.sheeps.size();x++){/*** 画出羊群的移动路径;*/Sheep.sheeps.get(x).draw(g);Sheep.sheeps.get(x).run();Sheep.sheeps.get(x).addNewSheep();Sheep.sheeps.get(x).checkDeach();/*** 下面的for循环表示两羊相遇死一个;*//*for(int y=x+1;y<Sheep.sheeps.size();y++){if(Sheep.sheeps.get(x).getRect().intersects(Sheep.sheeps.get(y).getRect())){Sheep.sheeps.remove(Sheep.sheeps.get(x));}}*/}for(int x=0;x<Wolf.wolfs.size();x++){/*** 画出狼群的移动路径;*/Wolf.wolfs.get(x).draw(g);Wolf.wolfs.get(x).run();/*** 狼碰到羊后,狼会把羊吃掉,并生一只小狼;*/for(int y=0;y<Sheep.sheeps.size();y++){if(Sheep.sheeps.get(y).getRect().intersects(Wolf.wolfs.get(x).getRect())){Wolf.wolfs.add(new Wolf());Sheep.sheeps.remove(Sheep.sheeps.get(y));}}/*** 下面的for循环表示两狼相遇死一个;* 把它注释掉后生态系统会趋向于奔溃,有兴趣可以试一试;*/for(int y=x+1;y<Wolf.wolfs.size();y++){if(Wolf.wolfs.get(x).getRect().intersects(Wolf.wolfs.get(y).getRect())){Wolf.wolfs.remove(Wolf.wolfs.remove(x));}}if(x>0){Wolf.wolfs.get(x).checkDeach();}}sheepcount.add(Sheep.sheeps.size());wolfcount.add(Wolf.wolfs.size());int b = 20;for(int x=1;x<sheepcount.size();x++){g.setColor(Color.RED);g.drawLine(b/3,700-sheepcount.get(x-1)/5, b++/3, 700-sheepcount.get(x)/5);}b = 20;for(int x=1;x<wolfcount.size();x++){g.setColor(Color.BLACK);g.drawLine(b/3,700-wolfcount.get(x-1)/5, b++/3, 700-wolfcount.get(x)/5);}}@Overridepublic void update(Graphics g) {offScreenImage = this.createImage(COLS * BLOCK_SIZE, (ROWS+40) * BLOCK_SIZE);Graphics gOff = offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}
}
Sheep.java
package wolf_sheep;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Sheep{private int row;private int col;private int foot;private int old ;public static List<Sheep> sheeps = new ArrayList<>();private  static Random rd = new Random();public Sheep(){row = rd.nextInt(Forset.ROWS-2)+2;col = rd.nextInt(Forset.COLS);}public void draw (Graphics g){g.setColor(Color.PINK);g.fillOval(Forset.BLOCK_SIZE * col, Forset.BLOCK_SIZE * row, Forset.BLOCK_SIZE, Forset.BLOCK_SIZE);}public Rectangle getRect(){return new Rectangle(Forset.BLOCK_SIZE * col, Forset.BLOCK_SIZE * row, Forset.BLOCK_SIZE, Forset.BLOCK_SIZE);}public static int giveBirth(){int day =rd.nextInt(15)-5;if(day>5){return day;}else{return 10;}}public void addNewSheep(){  if(foot>=Sheep.giveBirth()){foot=0;sheeps.add(new Sheep());}}public void checkDeach(){if(this.old>15){sheeps.remove(this);}}public void run() {switch (rd.nextInt(4)){case 1:if(row>5){row = row-1;}break;case 2:if(col<Forset.COLS-5){col = col+1;}break;case 3:if(row<Forset.ROWS-5){row = row+1;}break;case 0:if(col>5){col = col-1;}break;}foot ++;old ++;}
}
Wolf.java
package wolf_sheep;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Wolf {int row;int col;int old ;public static List<Wolf> wolfs = new ArrayList<>();private  static Random rd = new Random();public Wolf(){row = rd.nextInt(Forset.ROWS-2)+2;col = rd.nextInt(Forset.COLS);}public void draw (Graphics g){g.setColor(Color.BLACK);g.fillRect(Forset.BLOCK_SIZE * col, Forset.BLOCK_SIZE * row, Forset.BLOCK_SIZE*2, Forset.BLOCK_SIZE*2);}public Rectangle getRect(){return new Rectangle(Forset.BLOCK_SIZE * col, Forset.BLOCK_SIZE * row, Forset.BLOCK_SIZE*2, Forset.BLOCK_SIZE*2);}public void checkDeach(){if(this.old>50){wolfs.remove(this);}}public void run() {switch (rd.nextInt(4)){case 1:if(row>5){row = row-1;}break;case 2:if(col<Forset.COLS-5){col = col+1;}break;case 3:if(row<Forset.ROWS-5){row = row+1;}break;case 0:if(col>5){col = col-1;}break;}old ++;}
}
  • 下面是演示的图片
    image

这篇关于喜羊羊与灰太狼——重现高中生物书中的狼群与羊群的数量变化关系曲线图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/189888

相关文章

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

数据依赖基础入门:函数依赖与数据库设计的关系

在数据库设计中,数据依赖 是一个重要的概念,它直接影响到数据库的结构和性能。函数依赖 作为数据依赖的一种,是规范化理论的基础,对数据库设计起着至关重要的作用。如果你是一名数据库设计的初学者,这篇文章将帮助你理解函数依赖及其在数据库设计中的应用。 什么是数据依赖? 数据依赖 是指同一关系中属性间的相互依赖和制约关系,它是数据库设计中语义的体现。在现实世界中,数据之间往往存在某种依赖关系,而这