Моя программа - игра для выживания зомби, установленная в 2-мерном массиве блоков. Я использую arraylist - моя первая попытка - хранить зомби, и каждый в крачке «проверяет», если есть блок выше, ниже и вокруг него, чтобы обнаружить его движение.Все элементы меняются в Arraylist - Обработка
Я размещу соответствующий код здесь и загружаю папку эскиза отдельно.
ArrayList zombies;
void setup() {
zombies = new ArrayList();
}
void draw() {
for (int i = 0; i < zombies.size(); i++) {
Zombie zombie = (Zombie) zombies.get(i);
zombie.draw();
}
}
void keyPressed() {
if (key == 'z') {
zombies.add(new Zombie());
}
}
class Zombie
{
int posX = 20;
int posY = 10;
boolean fall;
boolean playerOnBlock;
Zombie() {
posX = 10;
posY = 590;
fall = false;
}
void draw() {
grid.blockCheck(posX, posY, 2);
fill(0, 255, 0);
rect(posX, posY, 10, 10);
}
void fall() {
posY += 5;
println("zombiefall"+posY);
}
void move(boolean left, boolean right, boolean above) {
if (left == true && player.playerX < posX) {
posX -= 1;
}
if (right == true && player.playerX > posX) {
posX += 1;
}
}
}
class Grid {
void blockCheck(int x, int y, int e) {
for (int i = 0; i < l; i++)
for (int j = 0; j < h; j++)
{
grid[i][j].aroundMe (x, y, i, j, e);
}
}
}
class Block {
void aroundMe(int _x, int _y, int _i, int _j, int entity) {
int pGX = _x/10;
int pGY = _y/10;
if (entity == 1) {
if (pGY+1 == _j && pGX == _i && state == 4) {
player.fall();
}
if (pGX == _i && pGX-1 <= _i && _y == posY && state == 4) {
leftOfMe = true;
}
else
{
leftOfMe = false;
}
if (pGX+1 == _i && _y == posY && state == 4) {
rightOfMe = true;
}
else
{
rightOfMe = false;
}
if (pGY-1 == _j && _x == posX && state ==4) {
aboveOfMe = true;
}
else
{
aboveOfMe = false;
}
player.controls(leftOfMe, rightOfMe, aboveOfMe);
}
if (entity == 2) {
if (pGY+1 == _j && pGX == _i && state == 4) {
for (int i = 0; i < zombies.size(); i++) {
Zombie zombie = (Zombie) zombies.get(i);
zombie.fall();
}
}
if (pGX == _i && pGX-1 <= _i && _y == posY && state == 4) {
ZleftOfMe = true;
}
else
{
ZleftOfMe = false;
}
if (pGX+1 == _i && _y == posY && state == 4) {
ZrightOfMe = true;
}
else
{
ZrightOfMe = false;
}
if (pGY-1 == _j && _x == posX && state ==4) {
ZaboveOfMe = true;
}
else
{
ZaboveOfMe = false;
}
for (int i = 0; i < zombies.size(); i++) {
Zombie zombie = (Zombie) zombies.get(i);
zombie.move(ZleftOfMe, ZrightOfMe, ZaboveOfMe);
}
}
Эскиз здесь: http://www.mediafire.com/?u5v3117baym846v
Я считаю, что проблема заключается в указания, какой элемент из ArrayList Я имею в виду, как я могу наблюдать проблемы быть:
Все «зомби» когда вы обнаружите, что он должен упасть.
Скорость зомби увеличивается с добавлением дополнительного добавленного зомби - как-то обработка всех элементов зомби как одного объекта зомби?
Это может быть аналогичная проблема: All elements of An ArrayList change when a new one is added?
Но я возился с моим проектом, и я не могу заставить его работать по-прежнему.
Пожалуйста, не стесняйтесь обращаться за дополнительной информацией о моем проекте. Я буду с моим компьютером весь вечер, поэтому должен быть в состоянии ответить быстро. Заранее спасибо.
Благодарим за помощь. Я использую это так:
ArrayList <Zombie> zombies = new ArrayList <Zombie>();
-------------------------------------------
void setup(){
zombies = new ArrayList();
-------------------------------------------
void draw(){
for (Zombie z:zombies) {
z.draw();
}
}
-------------------------------------------
void keyPressed() {
if (key == 'z') {
for (int i = 0; i< 1; i++) {
zombies.add(new Zombie(i));
}
}
-------------------------------------------
class Zombie
{
int posX = 20;
int posY = 10;
boolean fall;
boolean playerOnBlock;
int z;
Zombie(int _z) {
posX = 10;
posY = 590;
fall = false;
z = _z;
}
void draw() {
grid.blockCheck(posX, posY, 2);
fill(0, 255, 0);
rect(posX, posY, 10, 10);
}
void fall() {
posY += 5;
println("zombiefall"+posY);
}
void move(boolean left, boolean right, boolean above) {
if (left == true && player.playerX < posX) {
posX -= 1;
}
if (right == true && player.playerX > posX) {
posX += 1;
}
}
}
Спешу добавить, что часть проблемы я имею, не зная, в чем проблема! – GLOCKA
, вы можете исправить свой отступ, он повсюду =) Также используйте дженерики: ArrayList zombies = new ArrayList (), так что вам не нужно постоянно бросать объекты, которые вы получаете от него (Zombie). Наконец, вы можете использовать для (Zombie z: zombies) {[... use z here ...]}, поскольку вам не нужна переменная итератора. –
Спасибо, но я до сих пор не понимаю, как использовать предложенный вами код. Я отредактировал свой ответ, чтобы показать, что я делаю. Еще раз спасибо! – GLOCKA