贪吃蛇是怎么实现的,循环数组的魔力

news2024/9/24 19:23:20

在这里插入图片描述

贪吃蛇是怎么实现的,比如有5个结点的蛇,1,2,3,4,5,1是头,5是尾,结点的坐标用(x,y)表示,蛇要移动x,y怎么变化?没有转向的时候好理解,如果是在水平方向直着走,所有结点的横坐标x+1,如果是在垂直方向直着走,所有结点的纵坐标y+1。蛇不能像螃蟹一样横着走,如果蛇要拐弯,蛇其他结点的也是紧紧跟着蛇头转向。

蛇头转向,蛇身体的结点的坐标如何变化呢?比如蛇现在的位置从蛇头开始依次的坐标为(0,4),(0,3),(0,2),(0,1),(0,0),我们用一个数组来存这些坐标。蛇要向右转,进到第一象限,结点如何移动? 首先是头结点坐标变为(1,4),原先装(0,0)的位置被蛇头用掉了,原先其他的位置依次换成下一个位置就行了。妙啊!

许多年前我在思考这个问题的时候没学到循环数组。当时我的设想是,蛇头改变方向,记下改变位置的坐标和方向,其他结点到达这个位置时也改变方向,但这种做法只能让蛇折一次,就最多使蛇变成一个L形,不能让蛇变成S形,因为当蛇处于L形状时,又让蛇转向会,产生了两个转向点,但只记录了一个,导致bug产生。

附录:
实验数据
head,tail,x,y=0,0,50,60
head,tail,x,y=1,1,50,70
head,tail,x,y=2,2,50,80
head,tail,x,y=3,3,50,90
head,tail,x,y=4,4,50,100
head,tail,x,y=5,5,50,110
head,tail,x,y=6,6,50,120
head,tail,x,y=7,7,50,130
head,tail,x,y=8,8,50,140
head,tail,x,y=9,9,50,150
head,tail,x,y=10,10,50,160
head,tail,x,y=11,11,50,170
head,tail,x,y=12,12,50,180
head,tail,x,y=13,13,50,190
head,tail,x,y=14,14,50,200
head,tail,x,y=15,15,50,210
head,tail,x,y=16,16,50,220
head,tail,x,y=17,17,50,230
head,tail,x,y=18,18,50,240
head,tail,x,y=19,19,50,250
head,tail,x,y=0,0,50,260

head,tail,x,y=4,19,150,300
head,tail,x,y=5,0,160,300
head,tail,x,y=6,1,170,300
head,tail,x,y=7,2,180,300
key is down0
head,tail,x,y=8,3,180,-10
head,tail,x,y=9,4,180,0
head,tail,x,y=10,5,180,10
head,tail,x,y=11,6,180,20
head,tail,x,y=12,7,180,30
head,tail,x,y=13,8,180,40
head,tail,x,y=14,9,180,50
head,tail,x,y=15,10,180,60
head,tail,x,y=16,11,180,70
head,tail,x,y=17,12,180,80
key is right2
head,tail,x,y=18,13,190,80
head,tail,x,y=19,14,200,80
head,tail,x,y=0,15,210,80
key is down0
head,tail,x,y=1,16,210,90
head,tail,x,y=2,17,210,100
head,tail,x,y=3,18,210,110
head,tail,x,y=4,19,210,120
head,tail,x,y=5,0,210,130
head,tail,x,y=6,1,210,140
head,tail,x,y=7,2,210,150
head,tail,x,y=8,3,210,160
head,tail,x,y=9,4,210,170
head,tail,x,y=10,5,210,180
head,tail,x,y=11,6,210,190
key is left3
head,tail,x,y=12,6,200,190
head,tail,x,y=13,7,190,190
head,tail,x,y=14,8,180,190
head,tail,x,y=15,9,170,190
head,tail,x,y=16,10,160,190
head,tail,x,y=17,11,150,190
head,tail,x,y=18,12,140,190
head,tail,x,y=19,13,130,190
head,tail,x,y=0,14,120,190

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/930635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32之9.中断优先级配置

主函数main.c #include <stm32f4xx.h> #include "led.h" #include "key.h"#define PAin(n) (*(volatile uint32_t *)(0x42000000 (GPIOA_BASE0x10-0x40000000)*32 (n)*4)) #define PEin(n) (*(volatile uint32_t *)(0x42000000 (GP…

Spring Cloud Alibaba-Sentinel-Sentinel入门

1 什么是Sentinel Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel 具有以下特征: 丰富的应用场景&#xff1a;Sentinel 承接了阿里…

开始MySQL之路——MySQL约束概述详解

MySQL约束 create table [if not exists] 表名(字段名1 类型[(宽度)] [约束条件] [comment 字段说明],字段名2 类型[(宽度)] [约束条件] [comment 字段说明],字段名3 类型[(宽度)] [约束条件] [comment 字段说明] )[表的一些设置]; 概念 约束英文&#xff1a;constraint 约束实…

【详解】文本检测OCR模型的评价指标

关于文本检测OCR模型的评价指标 前言&#xff1a;网上关于评价标准乱七八糟的&#xff0c;有关于单词的&#xff0c;有关于段落的&#xff0c;似乎没见过谁解释一下常见论文中常用的评价指标具体是怎么计算的&#xff0c;比如DBNet&#xff0c;比如RCNN&#xff0c;这似乎好像…

6种限流实现,附代码![通俗易懂]

作者 | 磊哥 来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09; 转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone 限流是一种控制访问速率的策略&#xff0c;用于限制系统、服务或API接口的请求频率或数量。它的目的是为了保护系统免受过多请求的影响…

人体行走电压测试仪的特点

人体行走电压测试仪是一种用于测量人体行走时身体所受到的电压的设备。当人体行走时&#xff0c;我们身体与地面之间会形成电位差&#xff0c;这个电位差通常是很小的&#xff0c;但可能会对人体产生影响。通过使用行走电压测试仪&#xff0c;可以精确地测量这种电位差的大小。…

Leetcode-每日一题【剑指 Offer 36. 二叉搜索树与双向链表】

题目 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点&#xff0c;只能调整树中节点指针的指向。 为了让您更好地理解问题&#xff0c;以下面的二叉搜索树为例&#xff1a; 我们希望将这个二叉搜索树转化为双向循环链表…

(mybatis与spring集合

mybatis与spring集合 一、Spring集成MyBatis1.1. pom依赖1.2. 配置文件1.3. Spring整合MyBatis1.3.1. 配置自动扫描JavaBean1.3.2. 配置数据源1.3.3. 配置session工厂1.3.4. 配置mapper扫描接口1.3.5. 配置事务管理器1.3.6. 配置AOP自动代理1.4. 测试 二、Spring集成PageHelper…

Nodejs+vue+elementui幼儿园管理系统5umt6

本课题主要研究如何用信息化技术改善传统幼儿园行业的经营和管理模式&#xff0c;简化幼儿园管理的难度&#xff0c;根据幼儿园管理实际业务需求&#xff0c;调研、分析和编写系统需求文档&#xff0c;设计编写符合企业需要的系统说明书&#xff0c;绘制数据库结构模型&#xf…

AI驱动的大数据创新:探索软件开发中的机会和挑战

文章目录 机会数据驱动的决策自动化和效率提升智能预测和优化个性化体验 挑战数据隐私与安全技术复杂性数据质量和清洗伦理和社会问题 案例&#xff1a;智能代码生成工具总结 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &…

SpringBoot使用@Scheduled实现定时任务

前言 Spring3.0版本之后就自带定时任务&#xff0c;提供了EnableScheduling和Scheduled这两个注解来实现定时任务的功能。 创建定时任务也变得尤为简单。 创建过程 步骤一&#xff1a;在SpringBoot的启动类上加上EnableScheduling注解&#xff0c;开启定时任务管理。 步骤二…

2023-08-26 LeetCode每日一题(汇总区间)

2023-08-26每日一题 一、题目编号 228. 汇总区间二、题目链接 点击跳转到题目位置 三、题目描述 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖…

五、多表查询-4.外连接

一、语法 二、演示-左外连接 【例】查询emp1表的所有数据&#xff08;17条&#xff09;&#xff0c;和对应的部门信息&#xff08;左外连接&#xff09; 【 左外连接和内连接区别】 内连接只能查到16条数据&#xff0c;dept_id为null的值查不到 左外连接可以查到17条所有数据…

中文乱码处理

&#x1f600;前言 中文乱码处理 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x1f609; 在csdn获奖荣誉: &#x1f3c…

改进探索性数据分析的实用技巧!

Datawhale干货 译者&#xff1a;张峰&#xff0c;Datawhale成员 让 EDA 更简单&#xff08;更美观&#xff09;的实用指南&#xff01; 原文链接&#xff1a;https://towardsdatascience.com/practical-tips-for-improving-exploratory-data-analysis-1c43b3484577 介绍 探索性…

fastadmin iis伪静态应用入口文件index.php

<?xml version"1.0" encoding"UTF-8"?> <configuration><system.webServer><rewrite><rules><rule name"OrgPage" stopProcessing"true"><match url"^(.*)$" /><conditions…

骨传导耳机哪款比较好,几款骨传导耳机品牌推荐

相对于传统耳机&#xff0c;骨传导耳机的佩戴方式更加舒适。传统耳机需要插入耳道&#xff0c;可能会造成不适甚至痛感&#xff0c;而骨传导耳机则不需要直接接触耳朵&#xff0c;大大提高了佩戴的舒适度。并且骨传导耳机可以实现外界环境的感知。传统耳机会将耳朵与外界隔绝&a…

Java智慧工地源码:进度、质量、 成本、安全尽在掌握

智慧工地是一种崭新的工程全生命周期管理理念。智慧工地是智慧城市在建筑施工领域的延伸&#xff0c;是智慧城市的“基石”。随着工程信息化管理技术的发展&#xff0c;移动互联网、物联网、AI、大数据等新技术与施工现场业务场景深度融合&#xff0c;智慧工地已成为建筑工地信…

SpringCloud学习笔记(九)_使用Java类加载SpringBoot、SpringCloud配置文件

我们都知道平常在使用SpringBoot和SpringCloud的时候&#xff0c;如果需要加载一两个配置文件的话我们通常使用Value(“${属性名称}”)注解去加载。但是如果配置文件属性特别多的时候使用这种方式就显得特别的不友好了。 比如说&#xff0c;我们要加载下方这个名为application.…

nmon的安装与使用

一、Linux服务器配置信息 操作系统&#xff1a;CentOS 7.6 64位&#xff08;可用命令&#xff1a;cat /etc/redhat-release和uname -a查看&#xff09; CPU&#xff1a;1核&#xff08;可用命令top查看&#xff09; 内存&#xff1a;2GB&#xff08;可用命令free查看&#xff…