Android Studio实现贪吃蛇小游戏

这篇具有很好参考价值的文章主要介绍了Android Studio实现贪吃蛇小游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、项目概述

贪吃蛇是一款经典的街机游戏,不仅在电子游戏史上占有一席之地,也在很多人的童年回忆中留下了深刻的印象。在游戏中,玩家需要操纵一条蛇通过吃食物来增加自己的长度,同时要避免撞到墙或自己的身体。随着蛇不断吃食物,它的身体会越来越长,游戏的难度也会随之增加。贪吃蛇的游戏机制很简单,但是它具有很高的可玩性和挑战性,深受玩家喜爱。在现代计算机上,贪吃蛇已经经过了许多改进和升级,增加了更多的游戏元素和特性,例如多种模式,不同的难度级别,多人游戏等等。

本次实现的贪吃蛇小游戏在游戏机制中去除了墙壁和自己身体的碰撞限制,玩家操控贪吃蛇不断地在吃食物使自己变得强大。

二、开发环境

android studio 小游戏,Android项目,android studio,android,安卓,安卓app,android程序

三、详细设计

定义的SnakeSpace类,继承父类View,定义了很多数学,在构造方法中initView(),方向默认向上,创建个snakeArray链表,存储当前的方块位置,我们将二维数组映射到一维数组,所以每个(x, y)变为x * width + y,showFood()是显示食物的小方块。

    private void initView(){
        direction = DIRECTION_UP;
        snakeArray = new LinkedList<Integer>();
        snakeArray.add(6*100+16);
        snakeArray.add(6*100+17);
        snakeArray.add(6*100+18);
        showFood();
    }

Math.random()返回[0, 1)的随机数,我们乘以8,就是[0, 8),Math.round()函数返回一个数字四舍五入后最接近的整数。比如10.5返回11,10.4返回10这样。所以先生成一个食物坐标,如果链表中包含了这个食物坐标,则继续随机生成,最后将坐标再进行映射为snakeFood。

    private void showFood(){
        int x = (int) Math.round(Math.random() * 8);
        int y = (int) Math.round(Math.random() * 16);

        while (snakeArray.contains(x * 100 + y)){
            x = (int) Math.round(Math.random() * 8);
            y = (int) Math.round(Math.random() * 16);
        }
        Log.e("SnakeSpace", "food pos = " + snakeFood);
        snakeFood = x*100 + y;
    }

onDraw(Canvas canvas)函数非常核心,先获取到屏幕的宽和高,也就是分辨率。定义画笔对象paint,设置画笔粗细为4。画布对象canvas使用本画笔drawLine()绘制网格线。然后定义新的画笔paint2,设置画笔颜色为淡青色,使用双层for循环遍历网格,如果是贪吃蛇身体或者食物就画黑色的矩形, 如果是空闲块就画淡青色的矩形。

    @Override
    protected void onDraw(Canvas canvas) {
        int width = getWidth();
        int height = getHeight();
        int dx = width / 16;
        Paint paint = new Paint();
        paint.setStrokeWidth(4);
        canvas.drawColor(0xaa87CEEB);
        canvas.drawLine(0, 0, width, 0, paint);
        canvas.drawLine(width, 0, width, height, paint);
        canvas.drawLine(width, height, 0, height, paint);
        canvas.drawLine(0, height, 0, 0, paint);
        Paint paint2 = new Paint();
        paint2.setColor(0xaaE1FFFF);

        for (int i = 0; i < 16; i++){
            for (int j = 0; j < 32; j++) {
                // 如果是贪吃蛇身体或者食物就画黑色的矩形
                if (snakeArray.contains(i*100+j) || snakeFood == (i*100+j)){
                    canvas.drawRect((dx * i) + 1, (dx * j) + 1, (dx * i) + dx - 1, (dx * j) + dx - 1, paint);
                }else{
                    // 如果是空闲块就画淡青色的矩形
                    canvas.drawRect((dx * i) + 1, (dx * j) + 1, (dx * i) + dx - 1, (dx * j) + dx - 1, paint2);
                }
            }
        }

        super.onDraw(canvas);
    }

android studio 小游戏,Android项目,android studio,android,安卓,安卓app,android程序

在MainActivity中执行 startTimer()方法,定义定时任务对象mTimerTask,控制snake进行move(),并且显示score,延迟1s后开始每0.5s执行上述方法。

    private fun startTimer(){
        // 先停止计时
        stopTimer()
        // 计时器对象
        mTimer = Timer()
        // 定时任务对象
        mTimerTask = object : TimerTask(){
            override fun run() {
                snake.move()
                score?.post({
                    score?.setText("" + (snake.snakeArray.size - 3))
                })
            }
        }
        // 延迟1s后开始每0.5s执行一次任务
        mTimer!!.schedule(mTimerTask, 1000, 500)
    }

move()方法主要是首先获取贪吃蛇的头部坐标,这里我们提到的坐标都是映射后的一维坐标。根据方向进行选择。向左如果没出界每次移动100,向上没出界移动1,向右是100,向下是1,移动后的坐标为firstIndex,我们将它加入链表头部,如果firstIndex等于snakeFood,说明移动的位置刚好吃掉食物,直接showFood()显示新的食物位置,否则removeLast()删除链表尾部元素,因为你头部前进一格,尾部必然减少一格。

 public void move(){
        int firstIndex = snakeArray.getFirst();
        switch (direction){
            case DIRECTION_LEFT:
                if (firstIndex >= 100){
                    firstIndex -= 100;
                }else{
                    return;
                }
                break;
            case DIRECTION_UP:
                if (firstIndex%100 > 0){
                    firstIndex -= 1;
                }else{
                    return;
                }
                break;
            case DIRECTION_RIGHT:
                if (firstIndex < 1500){
                    firstIndex += 100;
                }else{
                    return;
                }
                break;
            case DIRECTION_DOWN:
                if (firstIndex%100 < 31){
                    firstIndex += 1;
                }else{
                    return;
                }
                break;
        }
        snakeArray.addFirst(firstIndex);
        if (firstIndex == snakeFood){
            showFood();
        }else{
            snakeArray.removeLast();
        }
        postInvalidate();
    }

四、运行演示

Android Studio实现贪吃蛇小游戏

五、项目总结

贪吃蛇是一款广受欢迎的编程练习项目。许多编程语言和平台都提供了贪吃蛇的编程实现教程,通过编写贪吃蛇游戏,学习者可以掌握很多计算机科学的基础知识,例如数据结构、算法、图形界面设计等。总之,贪吃蛇是一款非常经典和有趣的游戏,它不仅提供了娱乐,也可以作为一个教育工具来帮助人们学习计算机科学和编程。

六、源码获取

关注公众号《萌新加油站》,后台回复:贪吃蛇

点此直接下载源码:👉Android Studio实现贪吃蛇小游戏文章来源地址https://www.toymoban.com/news/detail-743343.html


🚀这有你错过的精彩内容🚀
Android Studio实现五子棋小游戏
Android Studio实现知乎日报App
Android Studio实现文件管理器
Android Studio实现文艺阅读App
Android Studio实现多功能日记本

到了这里,关于Android Studio实现贪吃蛇小游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言-------实现贪吃蛇小游戏

    Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序

    2024年04月29日
    浏览(30)
  • 挑战!贪吃蛇小游戏的实现(2)

    在贪吃蛇小游戏的实现(1)中,我们学习了win32 相关的一些知识,本篇文章,博主将带领大家从0开始实现贪吃蛇小游戏! locale.h实现本地化 ,该头文件提供的函数用于控制C标准库中对于不同的地区会产生不一样行为的部分,如:数字量的格式,货币量的格式,字符集以及日

    2024年02月21日
    浏览(26)
  • TypeScript实现一个贪吃蛇小游戏

    游戏效果 文件目录 准备1 :新建index.html,编写游戏静态页面 准备2 :使用less,修改样式,编写CSS 准备3: 创建4个类:食物类-Food、记分牌等级类-ScorePanel、蛇类-Snake、操控类-GameControl 准备4 :创建index.ts文件,执行游戏

    2024年01月19日
    浏览(37)
  • python快速实现简易贪吃蛇小游戏

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。  贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式、赏金模式、挑战模式等多种玩法。  另外还有一种名为“贪

    2024年02月13日
    浏览(36)
  • 基于Unity+MySQL实现贪吃蛇小游戏

    【主界面控制程序】: using TMPro; using UnityEngine; using UnityEngine.UI; public class MainUIController : MonoBehaviour {     private static MainUIController _instance; //制作外部调用的方法     public static MainUIController Instance    //制作外部调用的方法     {                                        

    2023年04月15日
    浏览(35)
  • 使用Python+pygame实现贪吃蛇小游戏

    使用第三方库pygame,关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 给出两种实现。 第一种 运行效果如下: 游戏源码如下: 第二种 就不给出运行效果图了,你可以运行看看。 下面给出另一种实现源码: OK! 

    2024年01月16日
    浏览(43)
  • 使用TypeScript实现贪吃蛇小游戏(网页版)

    本项目使用webpack+ts所编写 下边是项目的文件目录 /src下边的index.html页面是入口文件 index.ts是引入所有的ts文件 /modules文件夹是用来存放所有类的 index.html index.ts  /style/less /modules/Food.ts /modules/GameControl.ts /modules/ScorePanel.ts /modules/Snake.ts

    2024年02月13日
    浏览(29)
  • 学生学python编程---实现贪吃蛇小游戏+源码

    前言 这几年人工智能技术大发展,Python因此几乎成了第一位的语言。实际上,多年来,它不仅在软件工程师中得到广泛使用,也是各行业通用的专家语言,就是说,不管孩子以后做什么,都可能用得着。准备针对我自己上小学的孩子,每周抽出些时间,通过学习他们感兴趣的

    2023年04月09日
    浏览(31)
  • C语言从零实现贪吃蛇小游戏

    制作不易,点赞关注一下呗!!! 文章目录 前言 一.  技术要点 二、 WIN32API介绍 三、 贪吃蛇游戏设计与分析         1.游戏开始前的初始化         2.游戏运行的逻辑  总结 当我们掌握链表这样的数据结构之后,我们就可以用它来做一些小项目,比如童年小游戏贪吃蛇

    2024年02月20日
    浏览(29)
  • C语言之实现贪吃蛇小游戏篇(2)

    目录 🎇测试游戏test.c 🎇游戏头文件包含函数声明snake.h 🎇游戏实现snake.c 屏幕录制 2023-12-02 204515   ✔✔✔✔✔最后感谢大家的阅读,若有错误和不足,欢迎指正!乖乖敲代码哦!  代码---------→【唐棣棣 (TSQXG) - Gitee.com】 联系---------→【邮箱:2784139418@qq.com】

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包