一、需求分析
当提到贪吃蛇游戏时,通常是指一款经典的电子游戏,玩家通过操作一个蛇在屏幕上移动,目标是吃掉各种食物并尽量避免碰撞到自己的身体或游戏区域的边界。
贪吃蛇游戏最早出现在20世纪70年代末的个人电脑上,后来在各种游戏平台上得到广泛的普及。它简单而上瘾,在过去几十年里一直是游戏界的经典之一。
游戏的规则通常是,当蛇吃到食物时,身体会变长一节,游戏的难度也会逐渐增加。如果蛇碰到自己的身体或游戏区域的边界,那么游戏就会结束。玩家可以使用方向键(上、下、左、右)来控制蛇的移动方向。
现在,贪吃蛇游戏已经有了许多不同的版本和变种,包括各种图形风格和游戏机制。它也可以在不同的平台上玩,包括个人电脑、手机、游戏机等。
如果你对贪吃蛇游戏感兴趣,可以在各大应用商店中搜索,并下载适合你设备的版本进行尝试。愿你在游戏中获得乐趣!
二、实现分析
【业务逻辑】
一、先把蛇画出来定义一下蛇的结构,用一个数组保存一堆矩形,包含蛇头(红)和蛇身(灰)。
二、蛇能动(重点)蛇移动方式:自始至终都只有蛇头在动画一个灰色的方块,位置与蛇头重叠。
将蛇头向设定的前进方向移动一格。
需要一个保存方向的变量(direction),包括:R、L、U、D。
根据方向进行移动,一次移动一个格,根据按键改方向。三、随机投放食物需要随机食物的位置。
需要判断食物在不在蛇身上。四、吃食物判断食物是否与蛇头重叠。
数组加一个元素(少删除一个元素就是加一个元素)。
生成新的食物。
【主要代码】
//监听按键@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();//实现空格暂停 继续if (keyCode == KeyEvent.VK_SPACE) {if (isFaild) {initSnake();} else {isStarted = !isStarted;}
// repaint();}//实现转向else if (keyCode == KeyEvent.VK_UP && !direction.equals("D")) {direction = "U";} else if (keyCode == KeyEvent.VK_DOWN && !direction.equals("U")) {direction = "D";} else if (keyCode == KeyEvent.VK_LEFT && !direction.equals("R")) {direction = "L";} else if (keyCode == KeyEvent.VK_RIGHT && !direction.equals("L")) {direction = "R";}}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}/** 1.定个闹钟* 2.蛇移动* 3.重画一次蛇*/@Overridepublic void actionPerformed(ActionEvent e) {timer.start();if (isStarted && !isFaild) {//移动身体for (int i = len; i > 0; i--) {snakex[i] = snakex[i - 1];snakey[i] = snakey[i - 1];}//头移动if (direction.equals("R")) {//横坐标+25snakex[0] = snakex[0] + 25;if (snakex[0] > 850) snakex[0] = 25;} else if (direction.equals("L")) {//横坐标-25snakex[0] = snakex[0] - 25;if (snakex[0] < 25) snakex[0] = 850;} else if (direction.equals("U")) {//纵坐标-25snakey[0] = snakey[0] - 25;if (snakey[0] < 75) snakey[0] = 650;} else if (direction.equals("D")) {//纵坐标+25snakey[0] = snakey[0] + 25;if (snakey[0] > 650) snakey[0] = 75;}//吃食物if (snakex[0] == foodx && snakey[0] == foody) {len++;foodx = r.nextInt(34) * 25 + 25;foody = r.nextInt(24) * 25 + 75;}//判断游戏失败for (int i = 1; i < len; i++) {if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {isFaild = true;}}}repaint();}
三、效果展示
【界面展示】
【游戏过程】
四、完整代码
经典项目Java小游戏-贪吃蛇资源-CSDN文库