经典小游戏开发思路和算法之打砖块(3) 您所在的位置:网站首页 小游戏怎么制作流程图视频 经典小游戏开发思路和算法之打砖块(3)

经典小游戏开发思路和算法之打砖块(3)

2024-07-13 19:06| 来源: 网络整理| 查看: 265

很长时间没有更新了,今天终于抽出点时间写一下之前看过的一个小游戏案例,相关素材和工程我会放到我的资源下载里面。(共同学习进步,一直在路上从未停下脚步)

打砖块游戏规则:

玩家操作在屏幕底端的横板,通过反弹小球的方式,使小球击打并消除砖块,只需要打掉所有的砖块即可获的胜利。 小球掉落横板下方即失败。

先来简单介绍一下打砖块的历史:

《Breakout》世界上第一款打砖块游戏,1976年由英宝格公司发行。游戏设计者是后来创立苹果电脑公司的史蒂夫·乔布斯与斯蒂夫·沃兹尼亚克两人,程序设计者Bread Stewart。 《Gee Bee》日本Namco公司在1978年推出的该公司第一款街机游戏,合并了打砖块与弹珠台游戏的特色。 快打砖块《Arkanoid》,日本泰托(Taito)公司在1986年推出的街机游戏,引入了电脑控制的敌机,还有后来打砖块游戏中常见的加强道具(Power up Item)等元素。

程序思路: 1.地图生成

使用动态生成的方式,利用循环,通过循环遍历的方式生成新的砖块。 如下:

for(x轴) { for(y轴) { 生成砖块; } }

游戏需要设置砖块随机颜色以及砖块的排布(砖块随机组成各种设定好的图形)。外置一个储存地图的文件夹,内含地图的txt文档,将地图中方块排布转换为txt储存,由程序读取后循环遍历生成。 外置几个编译好的txt文档,里面保存了地图数据,其中X表示空,R表示红色,B表示蓝色,G表示绿色,Y表示黄色。如下图: 在这里插入图片描述

2.砖块控制

设置一个砖块类,定义Color(用于显示)和hits(作为可被撞击次数,即生命值)。

3.小球控制

给小球一个力,使其获得一个初速度。小球接触横板后,将获得一个向上的力(ySpeed),小球接触砖块时也将获得一个力使其反弹,但目前大多数平台都有物理引擎,所以我们可以使用其中的物理材质来实现反弹。 (1).小球反弹方向的思路: 小球与横板碰撞时的反弹方向,由于横板的x坐标为横板中心,所以我们只需要用球的x坐标减去横板的x坐标,即可判断小球是在横板的左边或右边与横板接触的,所以公式为:(ballPos.x-racketPos.x)/recketWidth。 小球碰触横板不同位置将获取不同方向的反弹力(xSpeed).

float HitFacter { return(ballPos.x-racketPos.x)/racketWidth; } if(碰撞板) { 小球的xSpeed=HitFacter; } 4.游戏流程图

在这里插入图片描述

5.程序实现

(素材包在我的资源里面名字为: Break Out 里面有完整的游戏案例和游戏所需要的一切素材) 先看一下游戏实现之后的游戏截图 不同的颜色可撞击的次数也不同,颜色和次数可以自己设置

在这里插入图片描述 下面直接来上代码,以及相关的讲解(关于素材的导入和场景的搭建(基础知识不做详解)) (1).横板的控制、道具生效、挡板与道具的触发器(横板的控制只是左右移动并不超出左右边界即可)

public class RacketMove : MonoBehaviour { /// /// 挡板移动速度 /// public float Racketmovespeed = 10f; // Update is called once per frame void Update () { //挡板左移 if (Input.GetKey(KeyCode.LeftArrow)) { //挡板左移不能超过屏幕左侧的边界 if (transform.position.x>-5.2) { transform.Translate(Vector3.left * Time.deltaTime * Racketmovespeed); } else { return; } }//挡板右移 else if (Input.GetKey(KeyCode.RightArrow)) { //右边也不能超过边界 if (transform.position.x 4.0f) { this.gameObject.transform.localScale = new Vector3(x -= 0.25f,this.gameObject.transform.localScale.y,1.0f); } break; case "paddle_speed_up": Racketmovespeed += 3; break; case "paddle_speed_down": if (Racketmovespeed > 7) { Racketmovespeed-= 3; } break; default: break; } } /// /// 挡板与道具的触发器 /// /// private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.tag=="upgrade") { string name = collision.gameObject.GetComponent().upgradeName; performUpgrade(name); Destroy(collision.gameObject); } } }

(2).小球控制 小球运动控制的分析:

小球需要一个弹性且无能量损失的材质小球第一次发出需要一个向上且能使小球运动到画面最上方的初始作用力 (小球的材质的话我们直接用物理材质,然后调整一下拖入小球的物理材质框即可如下图:) 在这里插入图片描述 在这里插入图片描述 小球的控制代码:(球与横板接触位置与反弹方向的公式、发球的碰撞触发器) public class Ball : MonoBehaviour { public float speed = 20f;//小球的速度 bool num = false; // Update is called once per frame void Update () { //num控制小球是不是第一次离开横板 按任何键小球获得初始速度 if (Input.anyKey&&!num) { GetComponent().velocity = Vector2.up * speed;//给小球初始速度 num=true; } //小球掉落后重新加载场景 if (transform.position.y


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有