GBDK-无法检查“ If语句”条件

时间:2018-12-20 19:28:04

标签: c gameboy

我是C语言编程的新手。我只是决定把它拿来取乐。我有Java,Java和其他几种语言的业余爱好者经验。无论出于什么原因,我决定在为Gameboy Classic开发程序的背景下学习C。所以我安装了GBDK,据我了解已经过时了。它带有LCC编译器。我使用VisualBoy Advance来模拟我的程序。

我正在尝试创建一个简单的Breakout克隆。到目前为止,我已经用用户输入成功地对桨进行了编程。但是,我遇到了一个球问题:它没有检查与桨的碰撞。经过大量的测试,研究并在其他站点上询问之后,我仍然无法解决此问题。

这是完整的代码:

#include <gb/gb.h>
#include "Sprites/paddle.c"
#include "Sprites/ball.c"

int paddleX = 72;
int paddleY = 136;
int paddleSpeed = 1;

int ballAngle = 270;
int ballX = 84;
int ballY = 75;

void setSprites() {
    SPRITES_8x8;

    //paddle////////////////////////////

    set_sprite_data(0, 4, paddle);
    set_sprite_tile(0, 0);
    move_sprite(0, paddleX, paddleY);

    set_sprite_tile(1, 1);
    move_sprite(1, paddleX+8, paddleY);

    set_sprite_tile(2, 2);
    move_sprite(2, paddleX+16, paddleY);

    set_sprite_tile(3, 3);
    move_sprite(3, paddleX+24, paddleY);

    //ball////////////////////////////////

    set_sprite_data(4, 1, ball);
    set_sprite_tile(4, 4);
    move_sprite(4, ballX, ballY);

    SHOW_SPRITES;
}

void movePaddle() {
    if(joypad() == J_LEFT) {
        if(paddleX <= 8) {
            paddleX = 8;
        }
        else {
            paddleX -= 1;
        }
    }
    if(joypad() == J_RIGHT) {
        if(paddleX >= 136) {
            paddleX = 136;
        }
        else {
            paddleX += 1;
        }
    }
    move_sprite(0, paddleX, paddleY);
    move_sprite(1, paddleX+8, paddleY);
    move_sprite(2, paddleX+16, paddleY);
    move_sprite(3, paddleX+24, paddleY);
}

void moveBall() {
    if(ballAngle == 270) {
        if((ballY >= paddleY-8) && (ballX >= paddleX-8) && (ballX <= 
                paddleX+24)) {
            ballAngle = 90;
        }
        else {
            ballY += 1;
        }
    }
    if(ballAngle == 90) {
        ballY -= 1;
    }
    move_sprite(4, ballX, ballY);
}

void main() {
    setSprites();
    while(1) {
        movePaddle();
        moveBall();

        delay(20);
    }
}

问题出在一个“ if语句”之内。具体来说,

    if((ballY >= paddleY-8) && (ballX >= paddleX-8) && (ballX <= 
            paddleX+24)) {

条件。只是不起作用。我换了一个测试变量,该变量在程序的其余部分完全没有改变。失败。它的唯一工作方式是如果我对值进行硬编码(例如96)。但是,这显然很糟糕,因为无论何时桨移动,它都不会改变。

我完全为这个问题感到困惑。我是C语言的新手,但这似乎很简单。我的编译器坏了吗?我是在无意中做错了什么吗?请记住,这是由Gameboy Dev Kit设计的,模仿了经典的Gameboy游戏。

感谢您的帮助。谢谢!

已解决:奇怪的解决方案。我没有在paddleX上加上24,而是减去-24。无论出于何种原因,都可以按预期运行。

0 个答案:

没有答案