毕业设计思路
毕业设计作品思路范文(共23篇)

毕业设计作品思路范文(共23篇)如何衡量一件商业设计作品的优劣我又瞎琢磨了一通,我觉得决定一件设计作品是否优秀的因素主要有三个方面考量:一、信息承载和文化认同;二、差异化表现;三、构成的美学高度,先就这三个方面先扯扯。
一、信息承载和文化认同所谓信息承载说的是一件设计作品在讲什么?就企业标志设计举例,在一件标志的设计中我们都知道应该是文化信息的概括和提炼。
一个圈我们说天圆,一个框我们说地方,一道弧我们说努力进取积极向上,不小心掉了个墨点点我们说不据一格勇于突破。
暖色我们说热情奔放,冷色的我们说理智严谨,灰色的我们说沉稳老练。
怎么说我们都有理由,你不服我都不行啊。
呵呵,开个玩笑,但在设计中我们确实要尽量准确地阅读客户需求并且将一些最主要的信息通过视觉元素体现出来。
这种传达我认为越直接越有效。
而文化认同便是指在设计中所使用的元素是否可以引发目标群体的共鸣,不同的目标群对不同元素的接受程度显然也是不一样的,你说如果目标群是些白发苍苍的老同志而你却把个东西做得花里呼哨嘻哈得很那让人家当场打出来是必然的。
所以,目标受众群体的分析也是非常重要的,这直接决定了你作品的设计方向。
二、差异化表现设计中的差异化表现是决定一件作品是否有可能在众多同类设计作品中脱颖而出的重要因素。
为什么我们往往觉得什么什么作品好像似曾相识,我们也经常为一件作品到底是抄袭的还是借鉴啥的相互口水喷个不停,主要原因就是设计师本身也往往很难突破这个所谓的差异化表现的瓶颈。
我们都说自己的工作是个创意的工作,是个创新的过程,那么首先所谓的创新便是先汲取前人的经验,自己做标志那首先先看个百八十万个标志作品。
但要明确一点的是,如果一个概念大多数人用了圆的那么作为一个设计来说就要考虑是不是不要再使用圆了如果必须用圆我们也要考虑是不是在圆里面在加个渐变啥的,因为只有这样才有可能使我们的设计有突破前人的可能性,把那些该拍在沙滩上的人拍在沙滩上。
(话说回来,我自己可能就是被拍在沙滩上的吧,其实人类文明的进步就是这样的啊。
毕业设计的方案设计思路怎么写

毕业设计的方案设计思路怎么写毕业设计的方案设计思路怎么写毕业设计是大学生完成学业的重要环节,也是展示自己专业能力的重要机会。
因此,制定一个详细的毕业设计方案十分重要。
本文将从六个方面详细阐述毕业设计方案的设计思路。
一、确定研究目标毕业设计的研究目标是什么,直接关系到研究的深度、广度和成果。
因此,在制定毕业设计方案时,需要明确研究目标。
研究目标应该明确、具体、可行、可量化,并且与研究背景、研究问题紧密相连。
例如,在研究某个软件系统的过程中,研究目标可以是分析系统的性能指标,确定系统的优化方案等。
二、确定研究问题研究问题是毕业设计方案的核心。
在确定研究问题时,需要确保问题具有一定的学术研究价值、实际应用价值和可行性。
同时,研究问题的确定还需要考虑诸如研究方法、数据来源、分析工具等因素。
例如,在研究某个行业市场营销策略的过程中,研究问题可以是:如何针对不同消费群体制定最有效的营销策略?三、制定研究方法研究方法是解决研究问题的重要手段。
在制定毕业设计方案时,需要根据研究问题和研究目标,选择合适的研究方法。
常用的研究方法包括文献综述、案例研究、问卷调查、实验研究等。
例如,在研究某个软件系统的过程中,可以使用实验研究的方法,通过对不同的系统参数进行调整,来评估系统的性能指标。
四、采集和分析数据数据采集和分析是毕业设计中的重要步骤,在制定毕业设计方案时也需要进行详细规划。
数据采集可以通过问卷调查、实验研究、网站分析等方式进行。
数据分析可以采用SPSS、Excel等软件进行。
数据的采集和分析应该与研究问题和研究目标紧密相连,确保数据的准确性和可靠性。
例如,在研究某个行业市场营销策略的过程中,可以通过问卷调查的方式,采集消费者的购买偏好、消费习惯等数据。
五、撰写论文毕业设计的论文是研究成果的呈现形式,也是检验研究能力的标准。
在制定毕业设计方案时,需要考虑论文的结构、内容和格式等方面。
论文应该清晰明确,逻辑性强,符合学术规范。
毕业设计作品思路

毕业设计作品思路
1.选题确定:首先,根据你的专业方向和兴趣爱好选择一个具有研究价值、创新性和实际应用意义的课题。
例如,如果你是计算机科学专业的学生,可能涉及人工智能算法的应用、大数据分析、网络安全等方面;如果是艺术设计专业的学生,则可能关注于环保主题的视觉传达设计、传统工艺与现代设计的融合等。
2.需求分析:明确毕业设计要解决的问题或者达成的目标,深入理解课题背景,调研相关领域的前沿动态和研究成果,找出目前存在的问题或改进点。
3.方案设计:基于需求分析,初步构想解决问题的方法或设计方案,可以包括技术路线、设计思路、功能模块划分等。
例如,如果是一个软件开发项目,需要考虑系统架构、数据库设计、界面交互等方面的设计;如果是产品设计,要考虑材料选择、形态设计、用户体验等方面。
4.实施计划:详细规划每个阶段的工作内容和时间安排,包括文献查阅、方案细化、原型制作、实验验证、结果分析、论文撰写等环节。
5.预期成果展示:预设你的毕业设计最终将以何种形式呈现,如实物模型、软件系统、研究报告、设计图纸、视频演示等,并描述其创新点和实际价值。
6.可行性评估:分析整个设计方案在技术、经济、时间等方面的可行性,以确保能够在规定的时间内顺利完成。
7.后续展望:对毕业设计成果的应用前景进行预测,探讨未来进一步优化或拓展的方向。
毕业设计设计思路怎么写

引言概述:毕业设计是大学生在完成学业之前的重要任务,它不仅可以体现学生所学知识的应用能力,还可以展示学生自主思考、创新能力和解决问题的能力。
设计思路的写作是毕业设计开展的第一步,它承载着整个设计的方向与目标。
本文将围绕着如何写毕业设计的设计思路展开详细讨论。
正文:一、明确设计目标1.研究背景和现状:了解相关领域的现有研究成果和应用情况,对于设计目标的确定具有重要意义。
2.问题定义与需求分析:通过深入调研和分析,准确定位设计中的问题和需求,明确解决的痛点和目标。
二、制定设计方案1.技术选择与理论支持:根据问题和需求的分析,选择适合的技术手段和理论方法,确保设计方案的可行性和有效性。
2.系统结构和模块划分:将整个设计分解为若干个相对独立的模块,明确每个模块的功能和相互之间的关系。
三、设计具体实现方案1.确定设计的具体内容和功能:明确设计的具体功能和性能指标,确保实现方案的可行性和有效性。
2.界面设计和交互方式:针对具体实现方案,设计清晰、直观的用户界面和友好的交互方式,提升用户体验。
四、实验与测试1.设计验证的方法和步骤:制定实验和测试方案,明确验证设计方案的方法和步骤,以及评估指标。
2.数据分析与评估:总结实验和测试的结果,分析数据并对设计方案进行评估,提出改进建议。
五、设计思路的创新与优化1.根据实践和测试结果,对设计方案进行优化和改进,提高系统的性能和功能。
2.分析设计过程中发现的问题和挑战,并提出解决方案和未来工作的展望。
总结:在撰写毕业设计设计思路时,需要明确设计目标、制定设计方案、设计具体实现方案、进行实验与测试,同时要注重设计思路的创新与优化。
通过系统的设计思路,可以保证毕业设计具有指导性、可行性和创新性。
只有合理明确的设计思路,才能在后续的毕业设计过程中顺利开展,并取得较好的研究成果。
因此,设计思路的写作至关重要,需要认真对待,确保每个设计细节都能得到合理的解释和论证。
毕业设计的设计思路不仅是实现目标的蓝图,更是展现个人创新能力和解决问题能力的重要依据。
毕业设计的思路的范文

毕业设计的思路的范文毕业设计的思路的范文随着大学生就业竞争的加剧,毕业设计成为了评判学生综合能力的重要指标。
然而,很多同学在开始毕业设计时都会遇到一个共同的问题:如何找到一个合适的毕业设计思路?本文将分享一些毕业设计思路的范文,希望能给大家一些启发和帮助。
一、基于实践的毕业设计思路毕业设计是一个实践性很强的项目,因此基于实践的思路是很受欢迎的。
比如,你可以选择一个与你专业相关的实际问题,通过调研、数据分析等方法,提出解决方案。
例如,如果你是计算机专业的学生,你可以选择一个常见的软件问题,然后设计一个新的算法来解决它。
这样的毕业设计既能展示你的专业能力,又能对实际问题做出贡献。
二、基于创新的毕业设计思路创新是推动社会进步的重要力量,因此基于创新的毕业设计思路也备受青睐。
你可以选择一个已有的产品或服务,然后通过改进或创新来提升它的性能或用户体验。
例如,如果你是工业设计专业的学生,你可以选择一款普通的家电产品,然后设计一个更加智能化、便捷化的版本。
这样的毕业设计不仅能展示你的创新能力,还能为市场提供新的解决方案。
三、基于跨学科的毕业设计思路跨学科的思路可以将不同学科的知识融合在一起,创造出更有价值的成果。
例如,如果你是心理学专业的学生,你可以选择一个与心理学相关的问题,然后结合计算机科学的方法,设计一个基于人工智能的心理辅助系统。
这样的毕业设计不仅能展示你的学科综合能力,还能为学术界和实际应用提供新的思路。
四、基于社会需求的毕业设计思路毕业设计不仅仅是一项学术任务,更是为社会服务的一种方式。
因此,基于社会需求的思路也是很有意义的。
你可以选择一个社会问题,然后通过设计和实践来解决它。
例如,如果你是建筑设计专业的学生,你可以选择一个城市中的老旧建筑,然后设计一个改造方案,使其更加环保、节能。
这样的毕业设计不仅能展示你的专业能力,还能为城市环境改善做出贡献。
总之,毕业设计的思路可以多样化,关键是要选择一个与自己专业相关、具有实践性和创新性的主题。
毕业设计思路怎么写范文(优选3)

引言概述:毕业设计是大学生期望完成自己专业学习的重要一环。
为了帮助学生更好地理清思路、合理安排时间和提供一定的参考,本文将结合三个优选的范文,分别阐述毕业设计思路的写作方法。
正文内容:一、明确毕业设计的目标和意义1.从学术角度解释毕业设计的目标2.引用相关理论与前人研究的成果,对毕业设计的意义进行说明3.分析毕业设计对个人职业发展的影响二、选择适合的研究主题1.对自己的兴趣和专业领域进行思考和研究2.查阅相关文献,了解当前研究的热点和趋势3.选取具备可行性和创新性的研究主题4.考虑实际可行因素,如实验条件和资源三、制定合理的时间计划1.明确毕业设计的期限和要求2.将整个研究过程划分为不同的阶段或任务3.合理安排每个阶段或任务的时间和优先级4.确定必要的里程碑和检查点,以保证按时完成设计四、构建合理的研究方法和方案1.根据研究目标和主题选择合适的研究方法,如实证研究、文献综述等2.设计详细的实验方案或调查问卷,确保数据的准确性和可靠性3.选择适当的统计方法或分析工具进行数据处理和结果解释4.讨论研究方法的优势和限制,提出改进和扩展的建议五、论述研究预期结果和最终成果1.阐述研究预期结果与相关理论或前人研究之间的联系2.对研究结果进行解读和分析,指出可能的影响和应用3.总结毕业设计对个人能力提升和学术贡献的意义4.提出进一步研究的建议和展望结论:毕业设计思路的写作需要明确目标和意义,选择适合的研究主题,制定合理的时间计划,构建合理的研究方法和方案,并最终论述研究预期结果和最终成果。
这些步骤将有助于学生更好地准备和完成毕业设计,并在最后展示出对专业知识的深入理解和研究能力的提升。
通过合理的组织和论述,毕业设计思路的写作将具备高质量和专业性,为学生的毕业设计成功奠定基础。
毕业设计思路及方案

毕业设计思路及方案一、引言毕业设计是高等教育阶段的重要环节,是对学生综合运用所学知识和技能的一次能力检验和实践机会。
在毕业设计中,学生需要独立完成一项涉及专业领域的实际项目,旨在提高学生的实际操作能力和解决问题的能力。
本文将介绍毕业设计的思路和方案,以帮助学生明确设计方向,提高设计的质量和可行性。
二、毕业设计的思路1. 确定研究领域首先,学生需要确定自己感兴趣的研究领域。
可以选择与专业相关的领域,如计算机科学、生物学、工程学等。
选择一个自己熟悉且感兴趣的领域,可以更好地提高研究的效果和学习的积极性。
2. 收集相关资料在确定研究领域后,学生需要广泛收集相关的资料和文献。
可以通过图书馆、学术期刊、专业网站等渠道获取到最新的研究成果和理论基础。
资料的收集可以帮助学生了解当前的研究状况,为毕业设计提供相关的理论支持。
3. 确定研究问题在收集资料的基础上,学生可以逐渐明确自己的研究问题。
研究问题应该具有实际意义和研究价值,并且能够通过已有的理论和方法进行分析和解决。
4. 设计实验或调查根据研究问题的具体要求,学生需要设计实验或调查的方案。
实验设计要考虑实验的可行性、准确性和可重现性;调查设计要考虑样本的选择、调查方法的合理性和数据的收集方式。
5. 数据分析和结果呈现在完成实验或调查后,学生需要对收集到的数据进行分析。
数据分析可以使用统计学方法、图表分析等手段进行,以得出准确的研究结论。
最后,学生需要将研究结果进行呈现,可以通过报告、论文、演示等形式进行展示。
三、毕业设计的方案1. 时间安排毕业设计的时间安排是整个设计过程的基础,学生需要根据毕业设计的要求和学校的安排,制定出合理的时间计划。
时间安排要考虑到研究的复杂性、实验或调查的时间消耗以及数据分析的时间。
2. 设计团队在毕业设计中,学生可以选择组建设计团队来共同完成项目。
设计团队应该由具有不同专业背景和技能的成员组成,以保证设计的全面性和多样性。
3. 设备和资源准备在开始毕业设计前,学生需要确定所需的设备和资源,并进行准备工作。
毕业设计设计思路范文(必备)

引言:毕业设计是大学生毕业前必须完成的一项重要任务,它不仅是对所学知识的综合运用,更是对个人能力的全面考验。
在进行毕业设计前,设计思路的构建是至关重要的一步。
本文将围绕毕业设计设计思路的构建展开详细阐述。
概述:设计思路是毕业设计的一个重要组成部分,它解决了设计问题的方法和途径,并为设计师在后续的设计过程中提供了指导和支持。
一个良好的设计思路能够帮助毕业生更好地理解并解决设计问题,从而使设计具备创新性和可行性。
正文:一、明确设计目标1.确定设计的目的与意义在进行毕业设计之前,首先需要明确设计的目的与意义。
通过明确设计目标,能够帮助设计师更好地界定设计的范围和重点,同时也能够为设计的后续工作提供明确的方向和目标。
2.分析研究已有设计案例为了确保设计的独特性和突出性,必须对已有的设计案例进行充分的分析和研究。
通过对已有设计案例的梳理和研究,可以了解到设计行业的最新趋势和发展方向,为设计的创新性提供参考和借鉴。
3.进行用户需求调研在进行毕业设计的过程中,需要充分考虑用户的需求。
通过与用户的交流和调研,设计师能够了解到用户的真实需求和期望,从而更好地满足用户的需求,提高设计的适用性和用户体验。
4.确定具体的设计目标和要求在明确了设计的目的与意义、分析研究已有设计案例和进行用户需求调研的基础上,设计师可以进一步确定具体的设计目标和要求。
这些目标和要求应该与设计的目的和用户需求相一致,能够为设计的后续工作提供明确的指导和依据。
二、构思创意化设计方案1.进行头脑风暴在构思创意化设计方案的过程中,头脑风暴是一个非常有用的方法。
通过开放性的讨论和思考,可以激发设计师的创造力和想象力,产生富有创意的设计方案。
2.保持灵感的源头不断涌现保持灵感的源头不断涌现是一个设计师需要时刻注重的问题。
设计师可以通过阅读、观察、旅行等方式,不断地获取新的灵感和创意,为设计方案的构思提供源源不断的动力。
3.评估与筛选设计方案在构思了多个创意化的设计方案后,需要对这些方案进行评估与筛选。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
毕业设计思路Java编写贪吃蛇游戏思路一、需求分析:1.游戏以经典贪吃蛇默认规则设计需要蛇能够按照给定的方向每隔一段时间自动移动;方向键“↑”、“↓”、“←”、“→”可以控制蛇移动的方向,蛇每吃到一个食物后身体长度增加一格,原有食物消失,再随机生成一个不再石头上的新食物;石头即为地图,蛇吃到石头后游戏结束。
2.为了使游戏更加具备娱乐性和挑战性,增设关卡,随着关卡级别的升高,蛇移动速度加快,蛇吃到食物的难度加大,吃到一定数量的食物即可过关进入下一个关卡;为蛇吃到食物后添加声音效果,增设背景音乐,可以控制背景音乐的开关;3.为了区别与经典模式的不同,游戏增加新的规则模式,新的模式规则中,初始化的蛇长度一定,蛇吃到食物后,食物随机产生一个新的食物,原来的食物经过蛇的消化后变为石头固定在原处不能移动。
二、设计思路:1.首先考虑所需要的总体框架贪吃蛇游戏主题应为蛇,需要创建蛇这个类命名为Snake,还要有食物类命名为Food,石头类命名为Stone,显示面板类命名为DisplayPanel,逻辑处理类命名为Logic以及主函数类命名为MainOfGreedySnake。
2.搭建类与类之间的关系蛇吃食物,食物在被蛇吃到后随机产生新的食物,食物不能在石头上生成,关系复杂,我们可以将这些关系在逻辑处理类Logic中搭建,这样即降低了上面三个类之间的耦合性,又方便以后对辅助功能的添加。
蛇,食物,石头需要在显示面板中显示出来,而三者又在逻辑处理这个类Logic中做逻辑关系运算,我们可创建自己的显示面板类DisplayPanel,用逻辑处理类Logic创建对象作为参数传递给显示面板,使得蛇,食物,石头以及显示面板直接的关系更加简单。
3.添加简单的测试功能首先需要创建主函数,主函数中创建逻辑处理类Logic的实例对象,创身体由多个格子组成,需要一个链表集合存储,定义一个LinkedList类型的集合命名为snakeBody,存储类型为格子类型Square的对象;蛇有一个长度,定义一个int型的变量Length 存储长度,定义一个int型的direction变量控制蛇移动的方向;定义一个boolean类型的变量iseatfood,来标识蛇是否吃到食物;定义一个boolean类型的变量iseatstone来标识蛇是否吃到石头;蛇的功能有移动功能,创建功能函数move(),关于蛇移动,我们可以让存储蛇身体的集合snakeBody添加一个蛇头,去掉一个尾巴来实现,蛇头添加的位置又应该由蛇移动的方向控制,因此在添加蛇头之前应该判断蛇头的方向,如果蛇向上移动,direction应为1,我们让改变之前的snakeBody调用addFirst ()功能添加蛇头,里面的参数应为改变之前的蛇头的纵坐标减一个格子,向下,向左,向右原理相同。
蛇已更改具有改变方向的功能,以便于后面控制蛇移动的时候改变方向,定义函数changeDirection(),传入int型的方向值。
蛇还应该有判断是否吃到食物的功能,定义功能函数isEatFood(),判断蛇是否吃到食物只需判断蛇头的坐标是否和食物的坐标相同,这里有一个小问题,蛇类中没有定义食物Food 类型的引用,判断时还要有食物类型的对象,为了降低蛇与食物之间的联系,不得不传入一个Food 类型的参数。
图:2-4.2蛇应该有判断是否吃到石头的功能,由于石头是一个比较大的集合,若沿用判断是否吃到食物的方法必将浪费大量的资源,在后面设计石头的时候我们可以用一个boolean类型的二维数组来存储一组石头命名为map[][],是石头设置这个坐标为true,不是则设为false,这样判断蛇是否吃到食物就较为简单,只需判断蛇头的坐标作为石头数组时是否为treu即可。
如图2-4.2所示,也即是直接反回map[snakeBody.getfirst().getx()][snakeBody.getfirst().getx()]即可。
蛇的另一个功能是判断蛇是否吃到自己的身体,需要定义一个功能函数isEatBoody()判断蛇是否吃到身体同判断是否吃到食物相同,只需判断蛇头的坐标与蛇身的坐标是否相同,为了减少CPU的工作量,可以稍微优化一点,判断蛇头与蛇身的坐标是否相同时从第4截身体开始判断即可,因为不管蛇怎么移动都不会与第二截、第三截身体相撞。
蛇要在显示面板中显示,按照面向对象的思想,蛇要在面板中显示身体,设计到的两个对象,蛇、面板,显然显示这个动作蛇自身应该最具权威性,蛇对自己的属性最了解,就应该把显示蛇这个功能定义在蛇这个类中,创建功能函数drawMe()给它传递一个画笔Graphics g,从蛇头到蛇身依次画出每个格子。
最后考虑到以后重新开始游戏,以及多个关卡的问题,这里先定义好一个蛇初始化的功能函数init()。
关于蛇的分析先到这里。
其次是对食物的分析:食物在游戏中自始至终只会有一个,只需定义一个Square对象即可,命名为food;由于后面蛇吃到食物后要随机生成一个新的食物,需要用到Random类中的随机函数,这里事先定义好一个Random ran;确定好参数后确定功能函数,首先应该是判断食物是否被吃掉,定义函数isFoodEaten();同isEatFood相似。
其次食物被吃掉之后会随机产生一个新的食物,定义函数setFood (),产生新食物的瞬间,旧食物已经消失,没有必要在去创建一个food 对象,只需将food中的坐标改变一下即可,x坐标传入一个随机的参数,y坐标传入一个随机的参数,显示面板大小先确定划分为30*30个格子,x坐标和y坐标应该在0~29之间,只需简单的一句话x = (int)(ran.nextFloat()*30),通过Random类获取0~1之间的小数,乘以30得到0~30之间的数,在强制转换为int类型的数传递给x,y;最后同蛇相似,食物也应该在面板中显示,定义显示的功能函数drawMe()传入参数Graphics g。
再接着对石头分析:在对蛇分析的时候依然考虑到石头的存储,定义一个boolean类型的数组记录是否画石头,boolean map[][] = new boolean [30][30];考虑到以后地图的改变,在创建石头的时候应该设计不同的地图,根据传入参数的不同,创建不同的地图,定义构造函数Stone();传入一个int类型的参数,根据参数创建不同的地图;地图设计较为简单,利用switch()case:判断需要创建何种地图。
创建地图既是在map[][]数组中不同的位置设置成true。
同蛇与食物相同,石头类应该具有显示功能drawMe(),传入参数Graphics g。
完善以上功能之后就可以在逻辑处理类Logic中先搭建简单的处理关系,以保证蛇,食物,石头可以显示出来;Snake snake = new Sanke ();Food food = new Food();Stone stone = new Stone(1);先显示地图1作为测试。
在显示面板类DisplayPanel中创建构造函数传入Logic的实例对象;重写paint方法,paint()方法中调用logic.Snake.drawMe() logic.Stone.drawMe() logic.food.drawMe() ;运行可显示效果,看到蛇,食物,石头已经显示到面板中。
4.逻辑关系处理做好的蛇还不会移动,接下来就来实现此功能:蛇要在每隔一段时间移动一个格子。
蛇要移动,还要在没有死亡之前一直移动,主函数所启动的主线程的任务是启动窗体以及在内存中创建好所需要的资源,这里必需另开一个新的线程。
开启线程的方法有两种,这里选择实现Runnable接口的方法,让Logic implements Runnable,实现run()方法,由于蛇要不停的运动在蛇的move方法之外加入while(true),蛇每隔一段时间会自动移动一格,在move方法之后添加Thread.sleep(300),经过多次运行测试得出的时间;在主函数MainOfGreedySnake中创建线程thread t = new Thread(logic);运行观察效果,会发现蛇依旧不会移动,这是因为显示面板中的paint函数需要重新被调用才会重新绘制图形,在DisplayPanel的paint最后加上repaint();再次运行,蛇已经可以自己移动。
现在的蛇依然可以移动,但不受控制,会移动出边界,因此需要在蛇移动之后判断蛇是否移出边界,将此功能封装成函数,显然应该定义在蛇类中,命名为isOverBand(),函数所需的功能即判断蛇头是否移出边界,若是则将蛇头的坐标更换为另一边界的坐标,实现了蛇在规定范围内自动移动。
蛇可以自动移动,但仍然还不受控制,后面将实现键盘控制蛇移动方向:键盘控制蛇移动方向,也即是每按下一个键,通过某种响应,让蛇的方向改变,很容易想到Java GUI开发中提供的事件监听机制,但问题在于事件监听机制是针对GUI组件设计的,这就需要将蛇的方向和主函数创建的JFrame联系到一起,主函数中需要创建Logic实例对象,Logic中有创建蛇对象,可以直接在主函数的JFrame上添加监听器,关于监听器的创建这里为了以后添加更多功能不至于关系复杂化,采用匿名内部类的方法为JFrame添加监听器,JFrame jf = new JFrame();jf.addKeyListener(new KeyListener(){}),监听器里面重写keyPressed()功能函数,利用switch(){case}语句判断方向键调用logic.snake.chageDirection()方法改变方向。
到这里程序调试运行方向以然可以控制,但按照规定,蛇不能向相反方向运行,在改变方向的时候应该做一个判断,新传入的方向值若和snake对象中方向值相同的话,snake方向值不做改变,加以判断之后,蛇的运行轨迹同想象中的运行规则几乎没有差别了,但是还有一个小小的bug存在,就是如果蛇向下移动的话,在下一次移动触发前,先按下向左,在按下向上,蛇还会向相反的方向移动,对于这个问题的解决首先要找到问题的根源,如果蛇向下移动的时候,先按下向左的方向,蛇的direction会被赋值为向左,但在蛇下一次移动之前,又按下向上的方向键,在判断方向的时候,向上的方向与向左的方向值不是相反方向,又会被赋值,这就导致了相反方向仍然会存在的可能性,关于此问题的解决,可以定义两个方向值,一个用于保存蛇移动之前的方向,命名为oldDirection,一个用于保存蛇移动之后的方向,命名为newDirection,在做方向判断的时候,拿新来的方向跟oldDirection向比较,方向不相反,把新传入的方向值副给newDirection,在蛇移动一次之后,再将newDirection赋值给oldDirection,这样便解决了无效方向的问题。