之前在网上看到很多人在在找贪吃蛇源码,难道今天比较闲就动手写了一个小项目现在分享给大家。 游戏源码获取方式1:游戏源码 首先下面看一下效果图: 小蛇每吃一个食物就会长长一点,当碰到自身或者墙壁游戏就结束了。 用法: 要点: 1. 图形的绘制 2. 贪吃蛇的移动 3. 食物的随机分布 4. 碰撞检测 5. 死亡检测 一 图形的绘制 图形绘制使用的是ImageIcon里的paintIcon() 方法,该方法接收三个参数: 第一个参数是要绘制的地方,第二个参数是画笔对象,第三个是要绘制图形位置的x坐标,第四个是要绘制图形的y坐标主要代码如下:
二 贪吃蛇的移动: 蛇画出之后要解决的就是蛇的移动问题,移动的算法就是整个游戏的核心,核心思想是: 蛇头向前移动之后,跟在后面的身体依次向前进行移动,然后重新绘制图片,主要代码如下:
if(isStarted && !isDead){ //移动蛇的身体 for(int i=len-1;i>0;i--){ snake.snakeX[i]=snake.snakeX[i-1]; snake.snakeY[i]=snake.snakeY[i-1]; } //移动蛇的头部 if(direction.equals("R")){ snake.snakeX[0]+=25; }else if (direction.equals("D")) { snake.snakeY[0]+=25; }else if (direction.equals("L")) { snake.snakeX[0]-=25; }else if (direction.equals("U")) { snake.snakeY[0]-=25; }三 食物的随机分布 食物是贪吃蛇游戏中第二重要的,它的位置要随机分布而不是固定的位置,这就要用到Random函数了,该函数可以产生随机数。初始化食物类的时候会对其坐标进行随机分配,当贪吃蛇将食物吃下之后会调用getRandomXY()方法再获取一个随机位置主要代码如下:
public Food() { random=new Random(); foodX=random.nextInt(30)*20+30; foodY=random.nextInt(30)*20+30;}public void getRandomXY(){ foodX=random.nextInt(30)*20+30; foodY=random.nextInt(30)*20+30;}四 碰撞检测 如何知晓贪吃蛇可以吃食物!就必须进行碰撞检测,当贪吃蛇的头与食物接触,食物重新绘制,原理很简单,虽然碰撞检测有很多种,比如矩形碰撞,像素检测等。但是对于贪吃蛇这种小游戏矩形碰撞已经足够了。首先要用到Rectangle类把贪吃蛇的头包装成一个矩形,然后食物也包装成一个矩形,当两个矩形有接触时,碰撞! Rectangle类的初始化方法需要四个参数。
被包装物体左上角x坐标值被包装物体左上角y坐标值物体宽度物体长度主要代码如下: 贪吃蛇包装:
public Rectangle getRect() { return new Rectangle((int)snakeX[0],(int)snakeY[0],30,28); }食物包装:
public Rectangle getRect(){ return new Rectangle((int)foodX,(int)foodY,25,25);}碰撞检测:
private void checkFood() { if(snake.getRect().intersects(food.getRect())){ len++; food.getRandomXY(); } }五 死亡检测 死亡检测比较简单,只要判断蛇头的坐标是否大于边界或小于边界。当头与身体的坐标重合之后也可以判断为死亡最主要代码如下:
if(snake.snakeX[0]==snake.snakeX[i]&&snake.snakeY[0]==snake.snakeY[i]){ isDead=true; } if(snake.snakeX[0]<=0||snake.snakeX[0]>=775||snake.snakeY[0]<=0||snake.snakeY[0]>=725){ isDead=true; }游戏源码获取方式2:关注微信公众号:SmileBoyblog,回复:贪吃蛇大冒险 即可获取
新闻热点
疑难解答