首页 > 编程语言 >C++游戏飞翔的小鸟软件二次开发

C++游戏飞翔的小鸟软件二次开发

时间:2024-03-04 21:33:48浏览次数:26  
标签:life void C++ 小鸟 private 二次开发 using public

引言:
在快节奏的现代生活中,人们总是在寻找一种方式来放松自己,释放内心的压力。游戏作为一种娱乐方式,早已深入人心。今天,我要向大家介绍的是一款简单而又充满挑战的小游戏——飞翔的小鸟。
这款游戏的核心玩法是控制一只小鸟在无尽的天空中飞翔,通过点击屏幕使小鸟上升,避开各种障碍物,如树枝、岩石等。游戏的画面简洁明了,色彩鲜艳,给人一种轻松愉快的感觉。同时,游戏的音效也十分悦耳,为玩家营造了一个舒适的游戏环境。
在此本篇笔者对该小游戏进行二次开发

游戏主界面:

游戏主要代码

点击查看代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;


public class StarButLis : MonoBehaviour
{
      // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    //用来监听鼠标按下物体
    private void onm ouseDown(){
        transform.localScale = transform.localScale * 0.8f;//鼠标缩小
    }
    //用于监听鼠标松开了物体
    private void onm ouseUp(){
        transform.localScale = transform.localScale / 0.8f;//鼠标放大
        //SceneManager.LoadScene("game");//转换到game场景   3删了
        PlayerCol.life = true;//死亡重新开始
        ScoreCol.score=0;//死亡重新开始算分
        Danrudanchu.qiehuannchangjing("game");//淡入淡出.切换场景
    }
}
该模块主要是完成游戏开始以及重新开始和开始按钮的缩放。
代码中的(life、score、qiehuannchangjing("game"))
PlayerCol.life = true;//死亡重新开始
        ScoreCol.score=0;//死亡重新开始算分
        Danrudanchu.qiehuannchangjing("game");//淡入淡出.切换场景
分别为三个脚本(PlayerCol、  ScoreCol、Danrudanchu)中的元素和函数。


2.PlayerCol(脚本)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCol : MonoBehaviour
{
    // Start is called before the first frame update
    public float speed;
    public float jumpForce;//跳跃的力度
    private Rigidbody2D rb;//刚体
    public  static bool life=true;//小鸟是否还活着
    private Animator anim;//动画控制器

    private GameObject  gameover;//gameover的图片,小鸟死亡的图片

    private float time;


    void Start()
    {
        rb=GetComponent<Rigidbody2D>();//获得刚体
        anim = GetComponent<Animator>();

        gameover = GameObject.Find("Canvas/Image");//获得死亡图片
    }

    // Update is called once per frame
    void Update()
    {
        if(life)
        { 
           rb.velocity=new Vector2(speed, rb.velocity.y);//赋予玩家水平速度
           if(Input.GetMouseButtonDown(0))
           {
           rb.velocity=new Vector2(rb.velocity.x, jumpForce);//赋予玩家垂直速度的向量
           }
        }

        else{
            time +=Time.deltaTime;
           if(time>=3){
                //life = true;
               // ScoreCol.score=0;
                 Danrudanchu.qiehuannchangjing("title");
            }
        }

        gameover.SetActive(!life);

    }
    //如果碰撞器碰撞到了某个物体,判断小鸟死亡
    private  void OnCollisionEnter2D(Collision2D collision){
        if(life){
           huamianshanshuo.shanshuo();
        }
        life = false;
        anim.SetBool("life",false);
    }
}

//}

该代码主要是完成小鸟跳跃、速度、以及动画控制器、判断小鸟是否存活的代码。
rb.velocity=new Vector2(speed, rb.velocity.y);//赋予玩家水平速度
这个代码是使玩家获得一个水平的速度。
代价中的life就是小鸟的存活状态,如果为true则小鸟没有死亡。
如果小鸟为false,则说明小鸟死亡,然后游戏将重新开始。
else{
            time +=Time.deltaTime;
           if(time>=3){
                //life = true;
               // ScoreCol.score=0;
                 Danrudanchu.qiehuannchangjing("title");
            }
        }

切换到游戏开始的页面, 
 private  void OnCollisionEnter2D(Collision2D collision){
        if(life){
           huamianshanshuo.shanshuo();
        }
        life = false;
        anim.SetBool("life",false);
    }
}
并且小鸟将停止挥动。


3.YanXuWuTi(脚本)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    public GameObject yaoshengchengdewuti;//要生成的物体
    public float shengchengzaiqianfangdejuli;//生成在前方的距离

    public bool yijingchufa = false;//已经触发
    private float time =0f;

    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(yijingchufa && PlayerCol.life){
          time += Time.deltaTime;
           if(time > 3)
           {
               Destroy(transform.gameObject);//自动销毁
           }

        }
    }
    //当某个刚体碰撞到触发器,开始延续物体
private void OnTriggerEnter2D(Collider2D collision){
        Instantiate(yaoshengchengdewuti,new Vector3(transform.position.x+shengchengzaiqianfangdejuli,transform.position.y,transform.position.z),transform.rotation );
       // Destroy(transform.gameObject,3);//3秒后自动销毁
        yijingchufa=true;
    }
}
该代码模块主要是完成背景和地面以及柱子无限延续的作用。
  if(yijingchufa && PlayerCol.life){
          time += Time.deltaTime;
           if(time > 3)
           {
               Destroy(transform.gameObject);//自动销毁
           }

        }
此处代码模块是完成延续物体产生之后,小鸟运动过程中将后方已经产生的延续物体自动删除。* 

改进项目

1.丰富用户体验游戏的体验感

点击查看代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Danrudanchu : MonoBehaviour
{// Start is called before the first frame update
    public Texture img;//黑色的图片系统传过来
    private static string changjing;//场景
    private static float alpha=0f;
    private static  bool danchu=false;//淡出
    public float speed;
    public static bool danru=false; //淡入

    void Start()
    {
        
    }

    // Update is called once per frame
    void OnGUI()
    {
        if(danchu){
            alpha +=speed * Time.deltaTime;
            if(alpha>=1){
                danru=true;
                danchu=false;
                SceneManager.LoadScene(changjing);//切换场景
            }
        }

        if(danru){
            alpha -=speed * Time.deltaTime;
            if(alpha<=0){
                danru =false;
            }
        }
        GUI.color = new Color (GUI.color.r,GUI.color.g,GUI.color.b, alpha);//透明度
        GUI.DrawTexture(new Rect(0,0, Screen.width,Screen.height), img);//绘制黑色的图片
    }

    public static void qiehuannchangjing(string scene)
    {//切换场景
        if(danru) {danru=false;}
        danchu=true;
        changjing=scene;
    }
}
此处代码主要是完成切换场景时淡入淡出的作用,这样子显得更加生动。

2.小鸟发生消失问题

GameObject.Find("player");引入角色player(小鸟)。

void Update()
{

    transform.position = new Vector3(player.transform.position.x, transform.position.y, transform.position.z);
}

此处代码主要是完成小鸟运动时水平跟随游戏界面,这样子就不会发生小鸟消失的问题了。

3.优化小鸟死亡时的动态效果

点击查看代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class huamianshanshuo : MonoBehaviour
{
    ///死亡画面
    public Texture img;//白色图片
    public float speed;
    private static bool zhrngzaibianbai = false;//正在变白
    private float alpha = 0f;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    void OnGUI(){
        if(zhrngzaibianbai){
            alpha += speed * Time.deltaTime;
            if(alpha >= 1){
                zhrngzaibianbai = false;
            }
        }
        else{
            if(alpha>0){
                alpha -= speed * Time.deltaTime;
            }
        }
        GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b,alpha);
        GUI.DrawTexture(new Rect(0,0,Screen.width, Screen.height),img);

    }

    public static void shanshuo(){//闪烁
        zhrngzaibianbai = true;
    }
}
该模块主要是完成小鸟死亡时产生白色闪烁。

结语:

通过对飞翔的小鸟游戏的二次开发,我获得了许多宝贵的经验和教训。虽然经过数次的努力和改进,游戏仍然存在一些缺陷和不足,但这个过程让我更加熟悉了游戏开发的流程和细节,也让我更有信心面对编程中的挑战和困难。在不断地优化和迭代中,我逐渐提高了自己的问题分析能力、解决问题的技巧以及编程实践能力。

展望未来,我将持续努力,不断提升自己的编程技能,追求更高的技术成就。虽然编程之路充满了挑战,但正是这种挑战推动着我不断前行,实现自我超越。感谢飞翔的小鸟游戏二次开发带给我的成长和启示,让我更加坚定地走在编程的道路上!

标签:life,void,C++,小鸟,private,二次开发,using,public
From: https://www.cnblogs.com/xctt/p/18052743

相关文章

  • C++网上购书系统项目的二次开发 2252416 hzx
    1、来源:同学大二下的期末大作业:网上购书系统项目。2、运行环境:VisualStudio2019代码:点击查看代码#include"StdAfx.h"#include<iostream>#include"person.h"#include<string.h>#include"globalfunction.h"#include"book.h"#include"adm.h&......
  • c++在类外是不能直接调用私有成员函数的
    c++在类外是不能直接调用私有成员函数的,比如#include<iostream>usingnamespacestd;classA3{voidshow3(){cout<<"classA3"<<endl;//注意,类内部默认是私有}};intmain(){A3obj3;obj3.show3();//这里出错return0;}......
  • C++U6-06 - 一维线性动态规划
    上节课作业:链接:https://pan.baidu.com/s/17Fei1SuGEk5pnSspf_hprg?pwd=hq04提取码:hq04 动态规划  [最长上升子序列]  本题采用动态规划。数据储存,设定数组a[]用于存储数字序列,设定dp[]数组用于统计上升的序列个数;遍历组数a[],在遍历的过程中如果出现了数......
  • C++ mySQL数据库连接池(windows平台)
    C++MySQL数据库连接池新手学了C++多线程,看了些资料练手写了C++数据库连接池小项目,自己的源码地址关键技术点MySQL数据库编程、单例模式、queue队列容器、C++11多线程编程、线程互斥、线程同步通信和unique_lock、基于CAS的原子整形、智能指针shared_ptr、lambda表达式、生产......
  • C++ 简易STL 教程 与 C++ 标准库
    C++STL(标准模板库)是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++标准模板库的核心包括以下三个组件:组件描述容器(Containers)容器是用来管理某一类对象的集合。C++提供了各种不......
  • C++U5-第06课-广度优先搜索3
    温故知新广搜的概念,编程实现基本流程 二进制矩阵中的最短路径]    【题意分析】找到一个从(0,0)到达(n-1,n-1)的路径并且路径上每一个数字都为0【思路分析】首先如果grid[0][0]=1,那么显然不存在最短路径,因此输出-1。使用dist[x][y]保存左上角单......
  • 【C++】【OpenCV-4.9.0】灰度图取反(Mat属性的使用)
    此次我们将一张图像转灰度后再进行灰度取反,即黑的变白的,白的变黑的,所以我们需要获取每个像素点上的灰度级,cv中提供了一个函数at,但是这个函数还有11个重载函数,太多了,我们只用这次需要用到的,即通过读取像素点的位置来获取灰度级。◆ at() [3/12]template<typename_Tp>c......
  • 提高C++编译速度
    提高C++编译速度BuildPerformanceInsights-Crascit如何分析和提高大型项目(C/C++)的编译速度?-知乎(zhihu.com)以上链接提供了提高编译速度的方案,以及如何检查是编译哪个文件花的时间最长。实践下来,我采用的方案是直接换用ninja来替代make,结合CMake计时参数,成功将......
  • C语言“贪吃蛇”小游戏二次开发
    引言当谈到经典的电子游戏时,贪吃蛇(Snake)无疑是首选之一。贪吃蛇游戏以简单却具有挑战性的玩法深受玩家喜爱。在游戏中,玩家需要操控一条蛇在游戏界面上不断移动,吃掉食物并尽可能长大,同时避免撞到墙壁或者自己的身体。其简单却耐玩的特点使得贪吃蛇成为了许多人童年时的美好回忆。......
  • C++ 命名空间
    在C++应用程序中。例如,您可能会写一个名为xyz()的函数,在另一个可用的库中也存在一个相同的函数xyz()。这样,编译器就无法判断您所使用的是哪一个xyz()函数。因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。......