4 功能设计
4.1 贪吃蛇移动及加速功能设计
贪吃蛇的移动功能主要依赖于选择语句和键盘监听器来实现,用W、S、A、D或↑、↓、←、→控制蛇的运动方向为上、下、左、右进行游戏。当按下F键时,蛇加速运动。
4.2 贪吃蛇吃食物加速及死亡判定功能的设计
在贪吃蛇吃食物以及死亡判定的过程中,使用到了以下参数:
Timer类的一个参数:int 类型的time,程序中调用timer.setDelay(time)方法更改定时器的参数(time越小,蛇运动越快);
记录蛇死亡与否的参数:boolean 类型的isDied(true则蛇死,false则蛇活),默认为false;
蛇的长度:int 类型的length(初始为3);
积分参数:int 类型的score(初始为0),程序中通过循环控制每吃一次食物加10分;
蛇头的坐标:int类型的snakeX[0]与snakeY[0],分别储存蛇头的横纵坐标;
蛇身的坐标:int[] 类型的snakeX[i]和snakeY[i],分别储存每一节蛇身的横纵坐标(i≠0);
食物的坐标:int 类型的foodX,foodY,分别储存食物的横纵坐标,foodX与foodY均为使用Random类中的nextInt()方法产生的随机数,故食物的坐标是随机的。
以下使用上述参数时便不再赘述。
4.2.1 贪吃蛇吃食物加速功能的设计
当蛇头的坐标snakeX[0]与snakeY[0]分别与食物的坐标foodX,foodY相等时,得分score增加10,蛇身长度length加1,Timer参数time减10,从而完成蛇吃到食物后的加分,蛇身加长及加速功能。该功能的流程设计图如下:
4.2.2 贪吃蛇死亡判定功能的设计
当贪吃蛇吃到自己的时候蛇死亡,即蛇头坐标snakeX[0]与snakeY[0]分别与蛇身坐标snakeX[i]和snakeY[i]相等时,即蛇死亡。此时isDied=!isDied。
4.3 贪吃蛇主动加速功能的设计
贪吃蛇的主动加速功能即在游戏过程中按住F键,蛇的移动速度加快,若按住后松开,则蛇的速度恢复默认值。这主要通过GUI中的键盘监听器来实现,实现了键盘监听器的两个方法,keyPressed()与keyReleased()分别监听按下F键的操作和松开F键的操作。其次用到了参数time,程序中改变time的值通过调用timer.setDelay(time)方法(timer为Timer类的一个对象)从而改变定时器的频率,达到蛇速度加快的效果。
4.4 贪吃蛇奖励机制功能的设计
贪吃蛇奖励机制功能主要使用了选择结构以及通过paintComponent(Graphics g)方法中的画笔工具来实现。当游戏达到一定的得分时,程序会调用画笔工具中的g.drawString(“XXX”,snakeX[0],snakeY[0])方法,在蛇头位置绘制出提示文字。
5 项目结构与项目实现
5.1 项目结构及类间关系