Java中foxandrabbit代码设计与分析

foxandrabbit

•实现这么一个生态模拟类小游戏
•游戏中角色有狐狸Fox,兔子Rabbit,生活在一片草原上
•Fox和Rabbit都有年龄Age,会随着游戏进行成长grow,年龄会增加;
•年龄达到生育阶段可以生育breed一个小Baby,达到上限Agelimit就死亡;
•游戏每一轮他们可以选择随机移动还是生育,狐狸还可以选择吃掉一只兔子,吃掉后生命延长; -

代码设计

Animal父类,包含动物出生,繁衍,捕食,移动,死亡等基本功能
从animal父类中继承的子类fox和rabbit,并各自拥有自己的特征

package animal;

import java.util.ArrayList;
import field.Location;
public abstract class Animal {
   
    private int ageLimit;                           //定义年龄上限
    private int breedableAge;                       //能够繁殖的年龄
    private int age;                                //年龄
    private boolean isAlive = true;                 //是否存活

    //构造Animal并初始化ageLimit和breedableAge
    public Animal(int ageLimit, int breedableAge) {
   
        this.ageLimit = ageLimit;
        this.breedableAge = breedableAge;
    }

    //获取年龄  protected含义:只有包内其它类、自己和子类可以访问
    protected int getAge() {
   
        return age;
    }

    //
    protected double getAgePercent() {
   
        return (double) age / ageLimit;
    }

    //定义抽象函数breed
    public abstract Animal breed();

    //成长,年龄增加判断是否达到年龄上限
    public void grow() {
   
        age++;
        if (age >= ageLimit) {
   
            die();
        }
    }

    //死亡判定
    public void die() {
   
        isAlive = false;
    }

    //存活判定
    public boolean isAlive() {
   
        return isAlive;
    }

    //判定是否有繁殖能力
    public boolean isBreedable() {
   
        return age >= breedableAge;
    }

    //位置  移动
    public Location move(Location[] freeAdj) {
   
        Location ret = null;
        if (freeAdj.length > 0 && Math.random() < 0.02) {
   
            ret = freeAdj[(int) (Math.random() * freeAdj.length)];
        }
        return ret;
    }

    @Override
    public String toString() {
   
        return "" + age + ":" + (isAlive ? "live" : "dead");
    }

    	//捕食属性
    public Animal feed(ArrayList<Animal> neighbour) {
   
        return null;
    }
       //捕食延长生命
    protected void longerLife(int inc) {
   
        ageLimit += inc;
    }
}

子类Fox的代码设计

	//implements实现接口cell
public class Fox extends Animal implements Cell {
   
	//构造
    public Fox() {
   
        super(20, 4);
    }

    //类fox实现这个接口cell后,就要执行相应的动作draw,利用覆盖函数
    @Override
    public void draw(Graphics g, int x, int y, int size) {
   
        int alpha = (int) ((1 - getAgePercent()) * 255);
        g.setColor(new Color(0, 0, 0, alpha));//(int)((20-getAge())/20.0*255)));
        g.fillRect(x, y, size, size);
    }
    //继承覆盖一些父类中的特性,繁殖
    @Override
    public Animal breed() {
   
        Animal ret = null;
        if (isBreedable() && Math.random() < 0.05) {
   
            ret = new Fox();
        }
        return ret;
    }
    //继承
    @Override
    public String toString() {
   
        return "Fox:" + super.toString();
    }
    //继承feed捕食成长
    @Override
    public Animal feed(ArrayList<Animal> neighbour) {
   
        Animal ret = null;
        if (Math.random() < 0.2) {
   
            ret = neighbour.get((int) (Math.
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值