首页
学习
活动
专区
工具
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获取项目构建版本信息方法

5.9K20
  • 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代表文档特定位置 // 如果文档中有书签,...然后,我们使用DocumentBuilderMoveToDocument方法或者MoveToBookmark方法移动光标到文档指定位置。...请注意,您需要替换"path/to/image.jpg"为您要插入图片实际路径,并且指定合适尺寸和位置

    12010

    贪吃项目实践!(上)

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

    12410

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

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

    2.6K30

    贪吃小游戏

    现在 由博主去给大家介绍一下 二,技术要点 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; //释放食物

    12910

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

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

    15610

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

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

    95220

    【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

    12310

    贪吃(C语言实现)

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

    2.1K20

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

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

    39210

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

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

    37840

    C语言项目实战——贪吃

    渲染画面:使用图形库(SDL、Allegro等)绘制游戏界面,包括、食物和游戏边界等。...在C语言中,这些功能通常通过定义结构来管理游戏状态,使用函数来实现各个功能模块,并通过循环和条件语句来控制游戏流程。实现过程还需要考虑性能优化和用户体验等因素。...一方面,随着Windows操作系统升级,一些API函数可能不再被推荐使用,甚至被新API函数所替代。...=30"); //设置cmd窗口名称 system("title 贪吃"); return 0; } 6.3 控制台屏幕上坐标COORD COORD是Windows API定义一个结构...,我们将想要设置坐标信息放在COORD类型pos,调用SetConsoleCursorPosition函数将光标位置设置到指定位置

    37110

    TypeScript 贪吃游戏详细教程

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

    1.2K40

    【c语言】简单贪吃实现

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

    20010

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

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

    24210

    基于C语言和Win32 API实现贪吃

    渲染画面:使用图形库(SDL、Allegro等)绘制游戏界面,包括、食物和游戏边界等。...在C语言中,这些功能通常通过定义结构来管理游戏状态,使用函数来实现各个功能模块,并通过循环和条件语句来控制游戏流程。实现过程还需要考虑性能优化和用户体验等因素。...一方面,随着Windows操作系统升级,一些API函数可能不再被推荐使用,甚至被新API函数所替代。...=30"); //设置cmd窗口名称 system("title 贪吃"); return 0; } 6.3 控制台屏幕上坐标COORD COORD是Windows API定义一个结构...,我们将想要设置坐标信息放在COORD类型pos,调用SetConsoleCursorPosition函数将光标位置设置到指定位置

    14710
    领券