首页
学习
活动
专区
工具
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.1K20

何在代码获取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.7K20

贪吃项目实践!(上)

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

10610

贪吃穿墙代码_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; //释放食物

11710

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

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

12810

【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

10410

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

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

90620

贪吃(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 位置,当蛇头反向时,它值就会变成第二节身体位置 画个图好理解一点,圆圈表示蛇头即将到达位置,右边方块是蛇头 因此我们添加这段代码

36540

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

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

37310

C语言项目实战——贪吃

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

21510

TypeScript 贪吃游戏详细教程

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

1.2K40

【c语言】简单贪吃实现

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

17710

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

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

13710

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

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

10910

c程序设计,贪吃程序是什么_C语言编写贪吃

第一步,光标移动go_toxy()函数 void go_toxy(int x,int y) { /* COORD是Windows API定义一种结构 * typedef struct _COORD...*/ int y = rand() % 17 + 2; 第三步,先对整个坐标进行判断是否与身重合,如果是则重新产生随机位置,如果不是就继续执行,并且将食物坐标存放在一个链表,以备后续使用。...第二步:进行判断方向位置,进行头结点位置改变 Snakebody *Phead_2 = (Snakebody*)malloc(sizeof(Snakebody)); //开辟新结点,定义新结构指针,...(就是输出显示开始位置) { /* COORD是Windows API定义一种结构 * typedef struct _COORD * { * SHORT X; * SHORT Y; * }...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

2K10
领券