Ну что же за игра без подсчетов очков? Как же тогда доказать, что я лучше чем мой одноклассник?
Задача
На прошлом уроке добавили силу муравья, есть вес еды.
Теперь осталось вести подсчет принесенной еды в дом-хранилище и есть ее по мере необходимости.
Препятствие на пути к цели
Переменную для дома-хранилища добавили.
Написали логику для добавления еды в дом.
Но что-то не работает.
Вспомнили, что ведь муравья не научили есть.
Научили.
Но все равно не работает!!! Что делать?
Дебаг? Действительно дебаг на 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;
}
}
}
Немає коментарів:
Дописати коментар