当前位置: 首页 > 知识库问答 >
问题:

简单蛇游戏-libgdx

司寇烨伟
2023-03-14

我正在尝试用libgdx开发一个简单的蛇游戏。我的问题是,每次我想要繁殖一些苹果(纹理,20px宽X 20px高),它总是与蛇的身体重叠。我试图避免这种情况,但它在比赛中不断发生。

snake由多个部分组成-每个部分都是一个20px宽X 20px高的纹理(屏幕宽度是480px宽X 800px高)

以下是我迄今为止所做的尝试:

public void addApple() {
    accomplishedSnake = false;
    accomplishedApples = false;
    while (!accomplishedSnake && !accomplishedApples) {
        xApple = 20 * MathUtils.random(0, 23);
        yApple = 20 * MathUtils.random(20, 36);
        if (!accomplishedSnake) {
            for (int i = 0; i < snake.getSize(); i++) {
                if (snake.getPart(i).getX() <= xApple
                        && snake.getPart(i).getX() + 20 >= xApple
                        && yApple >= snake.getPart(i).getY()
                        && yApple <= snake.getPart(i).getY() + 20)
                    break;
                if (i == snake.getSize() - 1) {
                    accomplishedSnake = true;
                    break;
                }
            }
        }
        if (!accomplishedApples) {
            for (int i = 0; i < apples.size; i++) {
                if (apples.get(i).getX() <= xApple && apples.get(i).getX()+20 >= xApple
                        && yApple >= apples.get(i).getY() && yApple <= apples.get(i).getY()+20)
                    break;
                if (i == apples.size - 1) {
                    accomplishedApples = true;
                    break;
                }
            }
        }
    }
    apples.add(new Apple(xApple, yApple));
}

代码很容易解释。每时每刻,屏幕上都有3个不同的苹果。这段代码试图抽奖x-y坐标到新苹果,但在苹果添加到屏幕并渲染之前,我想确保它不会与蛇的身体或其他苹果重叠。

我就是看不出这个代码有什么问题。

P、 我尝试在Rectangle类中使用overlaps方法,但它不起作用。

共有3个答案

冯玮
2023-03-14

这个游戏应该是基于磁贴的。
这意味着游戏被组织成一个网格,其中每个单元格都有相同的大小。
这是通过使用相机来完成的:
Orthograph icCamera cam=new Orthograph icCamera(viewportWidth, viewportHeight)viewportWidthviewportHeight定义xy中应该有多少个单元格。
当您使用480*800px的分辨率和20*20px大小的图片时,viewportWidth应该是480/20=24,viewportHeight应该800/20 = 40。
注意,相机P(0/0)是在屏幕中间,您可以看到从-12到12(x)和-20到20(y)的对象。只需将相机的位置设置为P(12/20),P(0/0)是左下角,像往常一样。

现在产卵将很容易:
我使用一个int[][]world,如果有:

  • P(x,y)处的蛇形部分(世界[x][y]==1)
  • 苹果在P(x,y)(世界[x][y][=2)
  • P(x,y)处无任何内容(世界[x][y]==0)

这意味着,如果蛇离开了一个磁贴,则需要将其值设置为0(world[x][y]=0),并将其输入的每个磁贴设置为1(world[x][y]=1)

public void spawnApple() {
    boolean spawned = false;
    while(!spawned) {
         // The lower left corner is always an int-value
         int x = (int)MathUtils.random(0, 23);
         int y = (int)MathUtils.random(0, 40);
         if (world[x][y] == 0) {
             // Add Apple at x,y
             world[x][y] = 2;
         }
    }
}

希望有帮助!

翁硕
2023-03-14

试试这个...

if (snake.getPart(i).getX() >= xApple
      && snake.getPart(i).getX() + 20 <= xApple
      && snake.getPart(i).getX() >= xApple+20
      && snake.getPart(i).getX() + 20 <= xApple+20
      && snake.getPart(i).getY() >= yApple 
      && snake.getPart(i).getY() + 20 <= yApple
      && snake.getPart(i).getY() >= yApple +20
      && snake.getPart(i).getY() + 20 <= yApple +20)
   break;

此外,您还需要确保在进入while循环之前和每次计算随机坐标之后,将completeshedapple和completeshedsnake设置为false。在进一步构建代码时,还需要模仿这种逻辑。

农永宁
2023-03-14

你的测试条件太简单了。每个物品蛇身体部分/苹果都有大小,你需要考虑它们的轨迹。所以[蛇。X,蛇。X 20]和[蛇。Y,蛇。Y 20]被每个身体部分占用,你需要确保苹果。X和苹果。X 20不在范围内,苹果也是如此。Y

 类似资料:
  • 本文向大家介绍python实现简单贪吃蛇游戏,包括了python实现简单贪吃蛇游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 代码: 更多有趣的经典小游戏实现专题,分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript经典游戏 玩不停 java经典小游戏汇

  • 按照我找到的这个教程,我一直在Unity(C#)中创建了一个简单的贪吃蛇游戏: https://www.youtube.com/watch?v=U8gUnpeaMbQ 我发现这是一个非常好的教程,到最后我有一个完美的蛇游戏,但是,我想走得更远一点,使运动更加愉快,添加尾巴,Gameover等。 现在我的问题是,如果一个玩家快速连续按下两个可接受的方向试图抓住一些食物,蛇的头会跳过食物,完全错过它。

  • 本文向大家介绍js实现贪吃蛇游戏(简易版),包括了js实现贪吃蛇游戏(简易版)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 直接开始 效果图: 项目结构:图片自己找的 1.html 2.area.js 3.config.js 4.food.js 5.init.js 6.move.js 7.score.js 8.snake.js

  • 帖子底部的实际问题! 首先,我想解释我的问题。 我正在写一个基本的蛇游戏,我让蛇自动移动。当您执行代码时,它会自动移动到窗口的右侧,就像预期的那样。然而,我不能按我想要的方式控制我的蛇,它根本不会改变方向。 为了避免混淆,是类的一个实例。 为了解释蛇的运动: 对象有一个属性,它是一个包含对象的数组列表。每个对象都有和属性。使用此ArrayList,蛇通过在画布的y轴和x轴上使用和属性在画布上绘制小

  • 我正在为iOS开发一个贪吃蛇游戏:https://github.com/ScottBouloutian/Snake 我的目标是让AI以最佳方式完成蛇的游戏(让蛇填满棋盘)。 我正在使用IDA*找到一条从蛇当前位置到食物的路径。这是有效的。然而,该算法没有考虑到它将来可能需要获得更多食物的事实。因此,有时它倾向于把自己框起来。 也就是说,蛇在任何给定时间的目标都是找到食物,而它的目标应该是填满棋盘(

  • 我很难把我的心思放在这件事上。每当玩家猜错时,它应该从最初的余额中减去他/她的赌注。由于它是在一个循环中,它总是从一开始就取初始平衡,每次都吐出相同的平衡。(很明显)我试过分配不同的变量,但似乎无法找到答案。 我已经省略了中等难度和难难度的方法,因为它们现在是没有用的,直到我弄清楚这个。