Android贪吃蛇游戏实现
说明:贪吃蛇游戏是一款比较经典的休闲游戏,这是我做的第一个Android项目,会存在一些问题,文章包括项目的部分源码以及运行界面的一些图片,项目也参考学习了许多大佬的文章,会在文章最后面贴出参考文章,包括源码的链接,有什么问题也请大家指正。
登录与注册
登录界面和注册界面的后台数据采用了Android自带的sqlite数据库进行存储,通过sqlite的助手类对用户添加和用户的登录进行操作,这里贴一些关于登录和注册的方法。
//添加新用户,即注册public long insertUserData(UserData userData) {String userName=userData.getUserName();String userPwd=userData.getUserPwd();ContentValues values = new ContentValues();values.put(USER_NAME, userName);values.put(USER_PWD, userPwd);return mSQLiteDatabase.insert("users", ID, values);}//根据用户名找用户,可以判断注册时用户名是否已经存在public int findUserByName(String userName){int result=0;String Query = "Select * from users where USER_NAME =?";Cursor cursor = mSQLiteDatabase.rawQuery(Query,new String[] { userName });if(cursor!=null){result=cursor.getCount();Log.w("result=",String.valueOf(result));cursor.close();}return result;}//根据用户名和密码找用户,用于登录public int findUserByNameAndPwd(String userName,String pwd){int result=0;String Query = "Select * from users where USER_NAME =? and USER_PWD =?";Cursor mCursor = mSQLiteDatabase.rawQuery(Query,new String[] { userName,pwd});if(mCursor!=null){result=mCursor.getCount();mCursor.close();}return result;}
游戏界面

一、主游戏界面
主游戏界面包括了小蛇的运动界面,上方的暂停对话框、分数显示的TextView,以及下方的方向键采用了ImageButton。主要说一下小蛇运动界面的实现,这是我参考了一位大佬的做法,先在Android写一个View的子类,将界面划分为32*32的小方格坐标存储在一个二维数组中,然后新建一个蛇运动的界面类,将界面的一些图片填入到方格中。
Bitmap[] mTileArray; //放置图片的数组int[][] mTileGrid; //存放各坐标对应的图片
//加载三幅小图片,包括墙,蛇身,蛇头public void loadTile(int key, Drawable tile) {Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);tile.setBounds(0, 0, mTileSize, mTileSize);tile.draw(canvas);mTileArray[key] = bitmap;}@Overridepublic void onSizeChanged(int w, int h, int oldw, int oldh){//地图数组初始化mXTileCount = (int) Math.floor(w / mTileSize);mYTileCount = (int) Math.floor(h / mTileSize);//够分成一格的分成一格, 剩下不够一格的分成两份,左边一份,右边一份mXOffset = ((w - (mTileSize * mXTileCount)) / 2);mYOffset = ((h - (mTileSize * mYTileCount)) / 2);mTileGrid = new int[mXTileCount][mYTileCount];clearTiles();}//给界面的二维数组赋值,坐标存放想要放的图片public void setTile(int tileindex, int x, int y) {mTileGrid[x][y] = tileindex;}
二、食物的生成
食物是通过random产生随机坐标,存放到食物的Arraylist中,然后调用父类的方法将图片画在view上。
private ArrayList<Coordinate> mFoodList = new ArrayList<Coordinate>(); // 存储食物的所有坐标的数组private static final Random RNG = new Random();//随机生成食物的坐标
private void updateFood() {for (Coordinate c : mFoodList) {setTile(snakebody, c.x, c.y);}}private void addRandomFood() {Coordinate newCoord = null;boolean found = false;while (!found) {int newX = 1+RNG.nextInt(28);//坐标0-22+1int newY = 3+RNG.nextInt(20);//坐标0-23+3newCoord = new Coordinate(newX, newY);boolean collision = false;int snakelength = mSnakeTrail.size();//遍历snake, 看新添加的apple是否在snake体内, 如果是,重新生成坐标for (int index = 0; index < snakelength; index++) {if
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
