首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Java中获取蛇体部位的旧位置

在Java中获取蛇体部位的旧位置,可以通过以下步骤实现:

  1. 创建一个表示蛇体的数据结构,可以使用链表或数组来存储蛇体的每个部位的位置信息。每个部位可以由一个坐标表示,包括横坐标和纵坐标。
  2. 在蛇移动之前,先保存蛇尾部位的旧位置。可以通过获取链表或数组的最后一个元素来获取蛇尾的位置信息。
  3. 在蛇移动时,更新蛇体每个部位的位置信息。可以通过将每个部位的位置信息向前移动一格来实现。具体操作可以通过遍历链表或数组,将每个部位的位置信息更新为其前一个部位的位置信息。

以下是一个示例代码:

代码语言:txt
复制
import java.util.LinkedList;

public class Snake {
    private LinkedList<Position> body;

    public Snake() {
        body = new LinkedList<>();
        // 初始化蛇体,添加初始位置信息
        body.add(new Position(0, 0));
        body.add(new Position(0, 1));
        body.add(new Position(0, 2));
    }

    public void move() {
        // 保存蛇尾的旧位置
        Position tailOldPos = body.getLast();

        // 更新蛇体每个部位的位置信息
        for (int i = body.size() - 1; i > 0; i--) {
            Position newPos = body.get(i - 1);
            body.set(i, newPos);
        }

        // 更新蛇头的位置信息
        Position head = body.getFirst();
        // 根据移动方向更新蛇头的位置
        // ...

        // 更新蛇尾的位置信息
        body.set(0, tailOldPos);
    }

    public static void main(String[] args) {
        Snake snake = new Snake();
        snake.move();
        // 获取蛇尾的旧位置
        Position tailOldPos = snake.body.getLast();
        System.out.println("蛇尾的旧位置:" + tailOldPos);
    }
}

class Position {
    private int x;
    private int y;

    public Position(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // 省略getter和setter方法
}

在上述示例代码中,我们使用LinkedList来表示蛇体,每个部位使用Position类来表示位置信息。在move()方法中,我们先保存蛇尾的旧位置,然后通过遍历更新蛇体每个部位的位置信息,最后更新蛇尾的位置信息。在main()方法中,我们可以通过snake.body.getLast()来获取蛇尾的旧位置。

请注意,上述示例代码仅为演示目的,实际应用中可能需要根据具体需求进行适当修改和完善。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在代码中获取Java应用当前的版本号?

最近需要在项目中获取项目的版本号,最笨的方法莫过于硬编码一个版本号,当然我也是这么干的。不过闲下来的时候突发奇想Spring Boot项目中pom.xml定义的版本号能不能通过API获得呢?...String version = this.getClass().getPackage().getImplementationVersion() 但是用IDE启动发现version=null,不过用java...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml中的属性注入到指定的资源文件中,具体操作为: ... <!...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息的自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息的方法

3.2K20

如何在代码中获取Java应用当前的版本号?

最近需要在项目中获取项目的版本号,最笨的方法莫过于硬编码一个版本号,当然我也是这么干的。不过闲下来的时候突发奇想Spring Boot项目中pom.xml定义的版本号能不能通过API获得呢?...String version = this.getClass().getPackage().getImplementationVersion() 但是用IDE启动发现version=null,不过用java...从配置文件读取 Maven在构建项目时可以通过资源插件将构建属性即pom.xml中的属性注入到指定的资源文件中,具体操作为: ... <!...Spring Boot提供 Spring Boot其实已经内置了获取项目构建信息的自动配置ProjectInfoAutoConfiguration,它包含一个条件BeanBuildProperties:...spring-boot-version", "time" : { "epochSecond" : 1620664643, "nano" : 591000000 } } 总结 今天介绍了几种从通过API获取项目构建版本信息的方法

6.1K20
  • aspose word指定位置插入图片,借助word模板文件中的书签来定位 及Java 获取网络图片

    aspose word指定位置插入图片,借助word模板文件中的书签来定位 及Java 获取网络图片 链接:aspose word模板文件生成pdf https://www.cnblogs.com/oktokeep.../p/16615900.html 在Aspose.Words中,您可以使用DocumentBuilder类在指定位置插入图片。...// 如果文档中没有书签,可以直接用索引指定位置,例如: // builder.MoveToDocument(index, true); // index代表文档中的特定位置 // 如果文档中有书签,...然后,我们使用DocumentBuilder的MoveToDocument方法或者MoveToBookmark方法移动光标到文档中的指定位置。...请注意,您需要替换"path/to/image.jpg"为您要插入的图片的实际路径,并且指定合适的尺寸和位置。

    17310

    贪吃蛇项目实践!(上)

    ); return 0; } 控制台屏幕上的坐标COORD COORD是WindowsAPI中定义的⼀个结构体,表⽰⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系(0,0)。...COORD类型的pos中,调⽤SetConsoleCursorPosition函数将光标位置设置到指定的位置。...(⾏和列可以根据⾃⼰的情况修改),再围绕地图画出墙 蛇⾝和⻝物 初始化状态,假设蛇的⻓度是5,蛇⾝的每个节点是●,在固定的⼀个坐标处,⽐如(24,5)处开始出现 蛇,连续5个节点。...注意:蛇的每个节点的x坐标必须是2个倍数,否则可能会出现蛇的⼀个节点有⼀半⼉出现在墙体中,另外⼀般在墙外的现象,坐标不好对⻬。...数据结构设计 在游戏运⾏的过程中,蛇每次吃⼀个⻝物,蛇的⾝体就会变⻓⼀节,如果我们使⽤链表存储蛇的信 息,那么蛇的每⼀节其实就是链表的每个节点。

    13710

    贪吃蛇穿墙代码_C语言贪吃蛇实现暂停功能

    } 当然,在Windows.h当中也有一个用于记录光标位置的结构体,我们只需定义一个该结构体变量,然后对其进行赋值,再进行光标位置设置即可。...若flag接收到的是0,则进行覆盖蛇。 打印蛇: 先根据结构体变量snake获取蛇头的坐标,到相应位置打印蛇头。 然后根据结构体数组body依次获取蛇身的坐标,到相应位置打印蛇身。...但需要注意在覆盖前判断覆盖的位置是否为(0,0)位置,因为当得分后蛇身长度增加,需要覆盖当前的蛇(进而打印长度增加后的蛇),而此时新加蛇身还未进行赋值(编译器一般默认初始化为0),我们根据最后一段蛇身获取到的坐标便是...蛇身结构体数组信息的变化: 结构体数组中第 i 个结构体的坐标信息被更新为第 i-1 个结构体的坐标信息。 结构体数组中第0个结构体的坐标信息被更新为当前蛇头的坐标信息。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    2.6K30

    【实战项目】想自己通过C语言编写贪吃蛇吗?先来学习一下什么是WIN32API

    2.3 system函数 刚才上述的操作都是在Windows的控制台下完成的,那我们应该如何在VS中来调用这些指令呢?这里就需要借助C语言提供的一个库函数——system函数。...也就是说GetConsoleCursorInfo这个函数是用来查找光标的相关信息的,检索的位置是在屏幕缓冲区内,函数会将查找好的光标信息放入结构体变量中,我们在进行结构体变量传参时,需要传入结构体指针变量...在今天的内容中我们就不展开讨论了,在下一个篇章中我们再好好的探讨一下; 有朋友可能会说,如果我想获取坐标的位置信息我又该如何操作呢?...也就是说GetConsoleScreenBufferInfo这个函数是专门用来获取光标的位置信息的,因为咱们本次的贪吃蛇游戏编写中不会涉及这个函数,因此这里我就不继续展开了,以后有机会我们再来分享; 八...结语 在今天的篇章中我们详细介绍了需要实现贪吃蛇项目的话需要掌握的Win32 API中的部分指令与函数: 设置控制台窗口大小和标题的指令以及控制台中的暂停指令; 获取控制台屏幕缓冲区的函数——GetStdHandle

    17510

    贪吃蛇小游戏

    现在 由博主去给大家介绍一下 二,技术要点 C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32API等 三.Win32API介绍 Windows这个多作业系统除了协调应⽤程序的执...它⽤于从⼀个特定的标准设备(标准输入、标准输出或标准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使用这个句柄可以操作设备。...1 : 0 ) 四.贪吃蛇游戏设计与分析 1.地图 2.宽字符的打印 打印墙体使⽤宽字符:□,打印蛇使⽤宽字符●,打印⻝物使⽤宽字符★ C语⾔适应国际化,C语⾔的标准中不断加⼊了国际化的⽀持。...⽐如:加⼊和宽字符类型wchar_t 和宽字符的输⼊和输出函数,加⼊和头⽂件 setlocale函数: setlocale(LC_ALL, "C") etlocale(LC_ALL...cur->x, cur->y); wprintf(L"%lc", BODY); cur = cur->next; } ps->Score += ps->FoodWeight; //释放旧的食物

    13610

    【C语言BOOS篇】贪吃蛇 一场代码与逻辑的较量(含游戏代码)

    : 这样我们后面只需要在打印前设置好想要的颜色就行了,想了解的朋友可以去:SetConsoleTextAttribute_360百科 我们还需要获取案件情况来判断当前蛇运行的状态...,因为在游戏过程中,贪吃蛇每吃一个食物都会增长一个蛇身节点,正好用链表节点来控制蛇的长度 //蛇身结构体的定义 typedef struct SnakeNode { int x; int y; struct...SnakeNode* next; }SnakeNode,* pSnakeNode; 另外我们需要用一个结构体来管理贪吃蛇游戏的信息,包括蛇身、食物、总分、当前分数、当前一个食物的分数、...蛇的速度、当前游戏状态和当前蛇运动状态(上、下、左、右) //贪吃蛇结构体定义 typedef struct Snake { pSnakeNode pSnake; //维护蛇的指针,指向蛇头 pSnakeNode...,感谢各位在我学习时的支持与陪伴,希望未来我们能一直坚持学习下去 “ 请不要相信胜利就像山坡上的蒲公英一样唾手可得,但是请相信生活中总有美好值得我们全力以赴,哪怕粉身碎骨!”

    15410

    【C语言】实现贪吃蛇--项目实践(超详细)

    =30"); //设置cmd窗⼝名称 system("title 贪吃蛇"); return 0; } 3.控制台屏幕上的坐标COORD COORD 是Windows API中定义的⼀个结构体,表...这个结构体用于存储有关控制台光标的信息,如光标的大小和可见性。 4.使用GetConsoleCursorInfo函数来获取当前控制台光标的信息,并将这些信息存储在CursorInfo结构体中。...SetConsoleCursorPosition 设置指定控制台屏幕缓冲区中的光标位置,我们将想要设置的坐标信息放在COORD类型的pos中,调 ⽤SetConsoleCursorPosition函数将光标位置设置到指定的位置...5,蛇⾝的每个节点是●,在固定的⼀个坐标处,⽐如(24, 5)处开始出现 蛇,连续5个节点。...3.数据结构设计 在游戏运⾏的过程中,蛇每次吃⼀个⻝物,蛇的⾝体就会变⻓⼀节,如果我们使⽤链表存储蛇的信 息,那么蛇的每⼀节其实就是链表的每个节点。

    65710

    贪吃蛇(C语言实现)

    此外,我们还需要两个结构体用于表示蛇头和蛇身。蛇头结构体当中存储着当前蛇身的长度以及蛇头的位置坐标。...与隐藏光标的操作步骤类似,先定义一个光标位置的结构体变量,然后设置光标的横纵坐标,最后用这个光标位置的结构体变量进行光标位置设置即可。...在打印过程中需要注意两点: 在cmd窗口中一个小方块占两个单位的横坐标,一个单位的纵坐标。 光标跳转函数CursorJump接收的是光标将要跳至位置的横纵坐标。...打印蛇: 先根据结构体变量snake获取蛇头的坐标,到相应位置打印蛇头。 然后根据结构体数组body依次获取蛇身的坐标,到相应位置进行打印即可。 覆盖蛇: 用空格覆盖最后一段蛇身即可。...但需要注意在覆盖前判断覆盖的位置是否为(0,0)位置,因为当得分后蛇身长度增加,需要覆盖当前的蛇(进而打印长度增加后的蛇),而此时新加蛇身还未进行赋值(编译器一般默认初始化为0),我们根据最后一段蛇身获取到的坐标便是

    2.1K20

    【C语言项目】贪吃蛇(上)

    COORD是Windows API中的一个结构体,表示一个字符在控制台屏幕上的坐标,左上角的坐标为(0,0) COORD中有两个short值,一个为x,一个为y typedef struct _...隐藏控制台光标 SetConsoleCursorInfo(hOutput, &CursorInfo);//设置控制台光标状态 ⑤SetConsoleCursorPosition 设置指定控制台屏幕缓冲区中的光标位置...当中,调用该函数将光标位置设置到指定的位置 使用: COORD pos = {10, 5}; HANDLE houtput = NULL; //获取标准输出的句柄(⽤来标识不同设备的数值) houtput...; //获取标准输出的句柄(⽤来标识不同设备的数值) houtput = GetStdHandle(STD_OUTPUT_HANDLE); //设置标准输出上光标的位置为pos...食物节点的x坐标也是2的倍数,并且坐标不能与蛇身重合 3、数据结构设计 游戏运行过程中,蛇每吃掉一个食物蛇体就增加一个节点,每个节点就存储当前的坐标以及下一个节点的坐标 typedef struct

    13410

    贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识

    通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。 总体需求 本系统主要是完成贪吃蛇游戏的基本操作,用户可自己练习和娱乐。...需要满足以下几点要求: (1)利用方向键来改变蛇的运行方向。 (2)空格键暂停或继续游戏,并在随机的地方产生食物。 (3)吃到食物就变成新的蛇体(蛇身长度变长,游戏继续)。...fx="d"; } } repaint(); } 定时器执行方法 @Override public void actionPerformed(ActionEvent e) { //改变蛇的位置...个人主页: 青00 (一起学Java)的博客_CSDN博客-一起学Java,Java领域博主 ?我的《一起学Java》板块持续更新中,欢迎各位编程爱好者前来观看!...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    99020

    刚学会 TypeScript, 顺手做个贪吃蛇小游戏

    在获取食物坐标的方法中,我们采用了 getter 取值函数来取值,我们就可以像使用普通变量一样来获取 X 和 Y 值 由于每次食物被吃了之后,我们都需要生成一个新的食物,其实我们也只是让食物换一个位置而已...我们尽量设置好,以确保我们的变量不会被我们误用导致错误 我们再来定义 getter 和 setter 方法,用来获取蛇头的位置,以及设置蛇头的位置 为什么要是蛇头呢?...类中编写 // 添加一个蛇身体移动的方法 moveBody() { //位置在前一个蛇块的位置 for (let i = this.bodies.length - 1; i > 0;...,让它的位置变成前一个蛇块的位置 这样就能一个接着一个移动了,不理解的可以想一想噢~ 在这段代码中,遇到了很多类型断言的问题,由于 TS 检查机制中不确定数组元素中有没有 offset 类方法,因此会给我们报错提示...在蛇移动的时候,第二节蛇身的位置应该是第一节的位置,蛇头的位置是value 的位置,当蛇头反向时,它的值就会变成第二节身体的位置 画个图好理解一点,圆圈表示蛇头即将到达的位置,右边的方块是蛇头 因此我们添加这段代码

    39810

    刚学会 TypeScript, 顺手做个贪吃蛇小游戏

    在获取食物坐标的方法中,我们采用了 getter 取值函数来取值,我们就可以像使用普通变量一样来获取 X 和 Y 值 由于每次食物被吃了之后,我们都需要生成一个新的食物,其实我们也只是让食物换一个位置而已...我们尽量设置好,以确保我们的变量不会被我们误用导致错误 我们再来定义 getter 和 setter 方法,用来获取蛇头的位置,以及设置蛇头的位置 为什么要是蛇头呢?...类中编写 // 添加一个蛇身体移动的方法 moveBody() { //位置在前一个蛇块的位置 for (let i = this.bodies.length - 1; i > 0;...,让它的位置变成前一个蛇块的位置 这样就能一个接着一个移动了,不理解的可以想一想噢~ 在这段代码中,遇到了很多类型断言的问题,由于 TS 检查机制中不确定数组元素中有没有 offset 类方法,因此会给我们报错提示...在蛇移动的时候,第二节蛇身的位置应该是第一节的位置,蛇头的位置是value 的位置,当蛇头反向时,它的值就会变成第二节身体的位置 画个图好理解一点,圆圈表示蛇头即将到达的位置,右边的方块是蛇头 因此我们添加这段代码

    38640

    【c语言】简单贪吃蛇的实现

    注意:蛇的每个节点的x坐标必须是2个倍数,否则可能会出现蛇的一个节点有一半儿出现在墙体中,另外一般在墙外的现象,坐标不好对齐。...五、数据结构设计​ 在游戏运行的过程中,蛇每次吃一个食物,蛇的身体就会变长一节,如果我们使用链表存储蛇的信 息,那么蛇的每一节其实就是链表的每个节点。每个节点只要记录好蛇身节点在地图上的坐标就行。...enum DIRECTION dir;:这是一个枚举类型,表示蛇当前移动的方向。具体的枚举值也没有在代码中给出,但通常包括“向上”、“向下”、“向左”、“向右”等方向。...结构体成员:记录它们的坐标:(x,y),和记录下一个位置的前驱结构体指针:next。...先创建下一个节点,根据移动方向和蛇头的坐标,蛇移动到下一个位置的坐标。

    21210

    TypeScript 贪吃蛇游戏详细教程

    ; constructor() { // 获取页面中的food元素并将其赋值给element this.element = document.getElementById...四.初步编写蛇模块 因为蛇地模块,涉及的东西比较多,比如蛇的位置、蛇的身体、蛇的移动、蛇吃东西、蛇撞墙等等。这一节,先初步地编写一下蛇模块,到后面小节再来完善蛇的其他功能。...下面来对这个方法简单解释一下: insertAdjacentHTML() 是Element的API中的一个方法,可以将字符串文本转化为你想要的节点(Node),并且插入到你想要插入的位置中。...完整代码如下(不懂评论区再来问我): 蛇身体的移动逻辑也非常简单,就是蛇后一个身体部分的位置要移动到前一个身体部分的位置。...如果判断出蛇有多节身体的话,就要判断蛇头移动的位置是否为第二节身体的位置,如果是,则不允许掉头,不是,则允许掉头,就这么简单。

    1.2K40

    C语言实现贪吃蛇【完整版】

    轴,如下图所示:   我们在windows窗口上描述一个坐标需要使用一个windows API中定义的一个结构体 COORD,表示一个字符在控制台屏幕缓冲区上的坐标,在C语言中,我们需要包含 windows.h...  要隐藏光标,我们就先要获得一个光标信息,上面我们已经获取了标准输出相关设备的句柄,接下来我们创建 CONSOLE_CORSOR_INFO 结构体对象(接收有关主机光标信息的结构体),再调用 GetConsoleCursorInfo...  设置终端光标输出位置,我们首先要获取想要输出位置的坐标,上面我们介绍了COORD结构体,用来设置位置坐标。...获取完坐标之后,我们可以调用 SetConsoleCorsorPosition 函数将光标位置设置到获取的坐标位置。...(L"%lc\n", ch); return 0; } 效果如下: 游戏逻辑   我们采用链式结构类表示贪吃蛇,所以我们需要一个结构体来描述蛇的节点以及蛇的一些属性等: #define WALL L'

    28810
    领券