首页 > 解决方案 > GBDK -- 无法检查“If 语句”条件

问题描述

我是 C 语言编程的新手。我只是决定把它捡起来玩;我有 Javascript、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 游戏。

任何帮助表示赞赏。谢谢!

已解决:奇怪的解决方案。我没有将 24 添加到paddleX,而是减去 -24。无论出于何种原因,这都按预期工作。

标签: cgameboy

解决方案


推荐阅读