субота, 14 листопада 2020 р.

Java4Kids 4. Score

Ну что же за игра без подсчетов очков? Как же тогда доказать, что я лучше чем мой одноклассник?

Задача

На прошлом уроке добавили силу муравья, есть вес еды. 

Теперь осталось вести подсчет принесенной еды в дом-хранилище и есть ее по мере необходимости. 


Препятствие на пути к цели

Переменную для дома-хранилища добавили. 

Написали логику для добавления еды в дом. 

Но что-то не работает.

Вспомнили, что ведь муравья не научили есть. 

Научили. 

Но все равно не работает!!! Что делать? 

Дебаг? Действительно дебаг на 4-том уроке? Еще испугаются. 

Собственно, мы ведь хотели вывести подсчет баллов на экран. Так давайте заодно выведем и другие переменные чтоб понять, что не работает!


Что меня порадовало

Признаюсь, что прошлый урок был тяжелым. Когда говорили про наследование, дети, которые выражали идеи просто замолчали услышав о таком, а потом мы его написали-списали. Я только надеялась, что они поняли.

В этот раз, когда мы добавили вывод счетчиков на экран и запустили проект, сразу стало весело, дети оживились и стали думать над моментом, где что не так. Оказалось, что не в то место код вставили. С 3его раза таки вышло. 

Что бы улучшить

Стала ощущать душок от нашего кода. Много маленьких методв, чтоб максимально не подписывать, что где происходит. Муравей, как главный персонаж, все-таки заложник большинства логики. Надо бы рефакторинг. Все же не хочется тратить на него много времени. Постараемся сделать по ходу анализируя, где мы находимся. Много фичей в плане.

Домашнее задание

Отладить работу всех переменных и муравья, разобравшись, куда разместить метод updateCounter(). На уроке вышло почти все, но не все. Я этому рада, потому что есть место для размышлений, а ответ где-то на кончиках пальцев.

Код с урока

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class Counter extends Actor
{
    public void act() 
    {
        setImage(new GreenfootImage(
            "Score: " + Ant.power + 
            " Has food: " + Grass.hasFood +
            " Needs food: " + Ant.needFood
   
            ,24, Color.ORANGE, Color.GRAY));
    }    
}

-----------------------------------------------
public class Ant extends Actor
{
    static int power = 1;
    static boolean needFood = false;
    /**
     * Act - do whatever the Ant wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        move();
        searchFood();

     }
      
    
    public void searchFood(){
        Food myFood = (Food) getOneIntersectingObject(Food.class);
        if (myFood != null){
            if (myFood.weight <= power){
                myFood.jumpOn(getX(), getY()); 
                if (myFood.atHome()){
                    myFood.disappear(); 
                }
            }else {
                needFood = true;
            }
        }
    }
    
    public void move(){
        int y = getY();
        int x = getX();
        if(Greenfoot.isKeyDown("DOWN")){
            setRotation(90);
            y+=5;}
        if(Greenfoot.isKeyDown("UP")){    
            setRotation(270);
            y-=5;}
        if(Greenfoot.isKeyDown("RIGHT")){
            setRotation(0);
            x+=5;}
        if(Greenfoot.isKeyDown("LEFT")){    
            setRotation(180);
            x-=5;}
        setLocation(x, y);
    }
}
-----------------------------------------------
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Домик муравья
 * 
 * @author Aleksandra 
 * @version 2.0
 */
public class Grass extends Actor
{
    static int hasFood = 0;

    public Grass(){
        getImage().scale(100, 100);
    }
    
    public void act() 
    {
    }    
    
    public void updateCounter(){
        if (Ant.needFood){
            Ant.power += hasFood;
            hasFood = 0;
            Ant.needFood = false;
        }
    }
}

-----------------------------------------------
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Food here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Food extends Actor
{
    public int weight; 
    
    public Food(){
        weight = 1;
    }
    
    public void act() 
    {
        //if (atHome()){
          //  disappear(); 
        //}
    }

    public void jumpOn(int x, int y){
        setLocation(x, y);
    }

    public void disappear(){
        Grass.hasFood += this.weight;
        updateCounter();
        getWorld().removeObject(this);
        //getImage().clear();
    }
    
    public void updateCounter(){
        if (Ant.needFood){
            Ant.power += Grass.hasFood;
            Grass.hasFood = 0;
            Ant.needFood = false;
        }
    }    
    
    public boolean atHome(){
        Grass home = (Grass) getOneIntersectingObject(Grass.class);
        if (home != null){
            return true;
        }else{
            return false;
        }
    }
}

Немає коментарів:

Дописати коментар