经典游戏还原之:贪吃蛇

版权声明:

  • 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客"(微信号:unitymaker)
  • 您可以自由转载,但必须加入完整的版权声明!

贪吃蛇与方块

  • 主要玩法:贪吃蛇吃食物,吃到食物后根据相应数值增加身体长度,如果贪吃蛇碰到方块后,根据方块的数值逐渐减少贪吃蛇身体长度,如果贪吃蛇长度为0时,游戏结束,场景中会有一下墙壁阻挡贪吃蛇的左右移动。
  • 角色操作:点击鼠标左键,并在屏幕上左右移动,可以控制贪吃蛇在场景中左右移动,贪吃蛇要吃食物,并且要躲避方块,或者消除方块。
  • 游戏计分规则:贪吃蛇要撞击方块(消除方块),方块上都有对应数值,贪吃蛇消除一个方块,根据方块上的数值增加分数。
  • 原版游戏画面:





实际游戏运行画面:



通过脚本固定窗口大小(此脚本可以挂在到任意的游戏对象上):

    void Start ()
    {
        Screen.SetResolution(768, 1024, false);
    }

贪吃蛇生成:

    public void SpawnBodyParts()
    {
        firstPart = true;

        //Add the initial BodyParts
        for (int i = 0; i < initialAmount; i++)
        {
            //Use invoke to avoid a weird bug where the snake goes down at the beginning.
            Invoke("AddBodyPart", 0.1f);
        }
    }


贪吃蛇移动:

  • 主要就是检测鼠标是否在屏幕上,通过鼠标左键按下并左右移动来控制贪吃蛇的左右移动,并不用定位坐标,仅检测鼠标左右移动来控制贪吃蛇的左右移动。
  • 贪吃蛇可以会自动向前移动,碰到方块会停顿一下,方块消除后并且贪吃蛇不为0,则贪吃蛇继续向前移动,如果贪吃蛇为0时,游戏结束。
    float curSpeed = speed;
    
            //Always move the body Up
            if(BodyParts.Count > 0)
                BodyParts[0].Translate(Vector2.up * curSpeed * Time.smoothDeltaTime);
    
            //check if we are still on screen
            float maxX = Camera.main.orthographicSize * Screen.width / Screen.height;
    
            if (BodyParts.Count > 0)
            {
                if (BodyParts[0].position.x > maxX) //Right pos
                {
                    BodyParts[0].position = new Vector3(maxX - 0.01f, BodyParts[0].position.y, BodyParts[0].position.z);
                }
                else if (BodyParts[0].position.x < -maxX) //Left pos
                {
                    BodyParts[0].position = new Vector3(-maxX + 0.01f, BodyParts[0].position.y, BodyParts[0].position.z);
                }
            }
    

    贪吃蛇吃食物:

  • 贪吃蛇吃到食物后,根据食物上的数值增加身体。
    public class FoodBehavior : MonoBehaviour
    {
    
        [Header("Snake Manager")]
        SnakeMovement SM;
    
        [Header("Food Amount")]
        public int foodAmount;
    
        // Use this for initialization
        void Start ()
        {
            SM = GameObject.FindGameObjectWithTag("SnakeManager").GetComponent<SnakeMovement>();
    
            foodAmount = Random.Range(1, 10);
    
            transform.GetComponentInChildren<TextMesh>().text = "" + foodAmount;
        }
    
        // Update is called once per frame
        void Update ()
        {
            if (SM.transform.childCount > 0 && transform.position.y - SM.transform.GetChild(0).position.y < -10)
                Destroy(this.gameObject);
        }
    
        private void OnTriggerEnter2D(Collider2D collision)
        {
            Destroy(this.gameObject);
        }
    }

    菜单系统:

    计分:

        void Start ()
        {
            //Initially, set the menu and Score is null
    
            SetMenu();
            SCORE = 0;
    
            //Initialize some booleans
            speedAdded = false;
    
            //Load the best score
            BESTSCORE = PlayerPrefs.GetInt("BESTSCORE");
        }
    

粒子系统:

-贪吃蛇碰撞方块就会触发粒子系统。

摄像机控制:

```
public class CameraMovement : MonoBehaviour
{

    [Header("Snake Container")]
    public Transform SnakeContainer;

    Vector3 initialCameraPos;

    // Use this for initialization
    void Start ()
    {

        initialCameraPos = transform.position;
    }

    // Update is called once per frame
    void Update ()
    {
        if(SnakeContainer.childCount > 0)
            transform.position = Vector3.Slerp(transform.position,
                (initialCameraPos + new Vector3(0,SnakeContainer.GetChild(0).position.y - Camera.main.orthographicSize/2,0)),
                0.1f);
    }
}
```

原文地址:https://www.cnblogs.com/raymondking123/p/8424661.html

时间: 2024-10-12 23:20:39

经典游戏还原之:贪吃蛇的相关文章

Qt小游戏开发:贪吃蛇

周末没事,手写小游戏继续~ 预览 步骤 1 定义数据结构 逻辑与界面分离,游戏场景是个二维数组区域,贪吃蛇是若干个连续的坐标点集合,用动态链表维护,果实是一个随机坐标点. const int BLOCK_SIZE=25; //单个方块单元的边长 const int MARGIN=5; //场景边距 const int AREA_ROW=15; //场景行数 const int AREA_COL=15; //场景列数 QPoint foodPoint; //果实出现坐标 QList<QPoint>

Love2D游戏引擎制作贪吃蛇游戏

代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windows下的生成方法请查看: for windows 预览游戏 love2d游戏引擎重要函数 详情: love2d wiki love.load:当游戏开始时被调用且仅调用一次 love.draw:回调函数,每帧更新一次游戏画面 love.update:回调函数,每帧更新一次游戏状态 love.keypressed:回调函

C语言小游戏开发之贪吃蛇

寒假期间一时兴起,想着用C语言能开发出贪吃蛇小游戏应该是一件不错的事!但C语言学习过程中从来都是字符界面的编程,如何能有"图形化"的效果呢?于是小编就在度娘, 谷歌等网站搜索了一番,发现了一些有用的Win32 API函数,于是小编的心一下子激动了起来,有了这些API函数也许能够实现哟!开始吧! 编程之前小编的构思是这样的,贪吃蛇小游戏应该实现的有: 1.贪吃蛇在不进行控制的条件下应该能够自主前进. 2.玩家可以通过WASD键来控制贪吃蛇的前进方向. 3.运行过程中若贪吃蛇撞击到墙壁或自

[C入门 - 游戏编程系列] 贪吃蛇篇(六) - 蛇实现

这一篇是关于设置蛇的属性的,接上一篇(五). 设置蛇的速度,很简单,只要不是负数就行了. void SNK_SetSnakeSpeed(Snake *snake, int speed) { if (snake != 0) snake->speed = SDL_abs(speed); } 设置蛇的方向有些复杂,玩过贪吃蛇的都知道,蛇向前移动时,它无法向后转弯:向左移动时,它无法向右转弯.所以,我也要做些这样的判断. void SNK_SetSnakeDirection(Snake *snake,

[C入门 - 游戏编程系列] 贪吃蛇篇(三) - 蛇定义

蛇是这个游戏的主角,要实现的功能也是最复杂的一个.因为蛇不止有属性,还有行为.它会动,还会吃东西,还会长大!而且还会死!这是很要命的.我一向看不懂复杂的代码,也写不出复杂的代码.所以对于蛇,我很纠结,如何才能简单的实现它. 毫无质疑的一点是,食物具有的属性,蛇也具有.蛇必须存在于世界中,有大小和位置以及颜色.这样最起码可以推测出一个蛇的简单定义.但是这还远远不够,蛇是活的,它能动,就必须有速度和方向,它能吃,就必须能长大.所以,抛开其它的一切,它最简单的形式起码也得这样: typedef str

[C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现

由于食物是贪吃蛇游戏中最简单的一部分,而且和其他部分关联性不强,基本上是一个独立的部分,所以我打算先实现它. 我的想法是食物必须在世界中才能被创造出来,也就是说,先有世界再有食物,所以我得先判断世界是否存在,存在的话才可以创建食物. Food * SNK_CreateFood(World *world, int size) { Food *food; if (world == 0) return 0; if ((food = (Food *)SDL_malloc(sizeof(Food))) =

[C入门 - 游戏编程系列] 贪吃蛇篇(二) - 食物定义

游戏中的食物没有那么多复杂属性,特别是贪吃蛇游戏中,我把食物看待的很简单: 1. 它必须属于世界,才能出现在世界.不可能一个不属于世界的食物,出现在世界中:但是可能存在着一个食物,它属于世界,但是却没有出现在世界中(即食物的颜色和世界的颜色相同,因此看不见食物).这就像鬼一样,它可能存在于这个世界上,但我们看不到它. 2. 一个属于世界的食物,具有在这个世界中的位置. 3. 它有颜色和大小. 因此,食物的结构体定义就显而易见了! typedef struct Food { World *worl

python游戏练手--贪吃蛇

啥也不说了,就是个小练习 #!/usr/bin/env python# coding=utf-8import pygameimport sysimport random # 全局定义,screen的长和宽SCREEN_X = 600SCREEN_Y = 600 # 蛇类# 点以25为单位class Snake(object): # 定义一个类--Snake,默认使用object类,如果你有更好的话,可以替换它 # 初始化各种需要的属性 [开始时默认向右/身体块x5] def __init__(s

经典游戏还原之:松鼠大作战2

版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客"(微信号:unitymaker) 您可以自由转载,但必须加入完整的版权声明! 松鼠大作战游戏制作 游戏介绍 1990年,经迪士尼授权,由日本卡普空(Capcom)电视游戏公司制作的基于任天堂FC主机的电视游戏<松鼠大作战>出版发行.游戏延用迪士尼动画片<松鼠大作战>里的两只可爱花