直接上代码:

using UnityEngine;
using System.Collections.Generic;
using UnityEditor;
using System.IO;
using System.Text; public class RubbishCodeGenerator
{
static string filePath = "/RubbishCode/RubbishCode.cs";
static bool hasReturnValue;
static string returnType;
static string methodNamePrefix= "AutoGBCode";
static string className = "AutoCreateRubbish";
static List<string> usedMethodName = new List<string>(); static int methodCount = ;
static int methodLineCount = ;
/// <summary>
/// 垃圾代码类中的控制变量,用于控制垃圾方法的具体行为
/// </summary>
static string forLoopCycleCount = "forLoopCycleCount";
static string whileLoopCycleCount = "whileLoopCycleCount";
static string openLoop = "openForLoop";
static string openWhile = "openWhile";
static string openIfElse = "openIfElse"; [MenuItem("Window/垃圾代码生成器")]
static void CreateCode()
{ string realPath = Application.dataPath + filePath; var fs = new FileStream(realPath, FileMode.OpenOrCreate); if (!fs.CanWrite)
{
Debug.LogError("无法写入文件");
return;
} string data = CreateClass(false); var bytes = Encoding.UTF8.GetBytes(data);
Debug.Log("class总长度:" + bytes.Length); fs.Write(bytes, , bytes.Length); fs.Flush();
fs.Close();
} static string CreateClass(bool implementMono)
{
StringBuilder sb = new StringBuilder(); sb.Append(CreateUsing());
var str = CreateClassHead(false, className);
sb.Append(str);
sb.Append(CreateControlVariables()); for (int i = ; i < methodCount; i++)
{
int j = UnityEngine.Random.Range(, );
bool k = i % == ;
string returnValue = GetReturnValue();
sb.Append(CreateMethod(k, returnValue, methodNamePrefix, methodLineCount)); } sb.Append("\n}"); return sb.ToString();
} private static string GetReturnValue()
{
int i = UnityEngine.Random.Range(, ); switch (i)
{
case :
return "int";
case :
return "string";
case :
return "long";
case :
return "object";
case :
return "UnityEngine.Vector3";
default:
return "int";
}
} static string CreateUsing()
{
StringBuilder sb = new StringBuilder(); sb.Append("using UnityEngine;\nusing System;"); return sb.ToString();
} static string CreateClassHead(bool implementMono,string className)
{
string str = implementMono ? ":MonoBehaviour" : "";
return "\npublic static class " + className + str + "\n{";
} /// <summary>
/// 创建类的控制类变量,包含:
/// 1.for循环次数
/// 2.是否开启循环
/// 3.是否开启switch语句
/// 4.是否开启判断语句
/// </summary>
/// <returns></returns>
static string CreateControlVariables()
{
string _forLoop = "\n\tpublic static int "+forLoopCycleCount+" = 1000;";
string _openLoop = "\n\tpublic static bool "+openLoop+" = true;";
string _openWhile = "\n\tpublic static bool "+openWhile+" = true;";
string _openIfElse = "\n\tpublic static bool "+openIfElse+" = true;";
string _whileLoop = "\n\tpublic static int " + whileLoopCycleCount + " = 1000;";
return _forLoop + _openLoop + _openWhile + _openIfElse+_whileLoop;
} /// <summary>
/// 创建一个随机函数
/// </summary>
/// <param name="hasReturnValue"></param>
/// <param name="methodNamePrefix"></param>
/// <returns></returns>
static string CreateMethod(bool hasReturnValue,string returnValueType,string methodNamePrefix,int totalLine)
{
StringBuilder sb = new StringBuilder(); sb.Append(CreateMethodHead(hasReturnValue, methodNamePrefix,returnValueType)); sb.Append(CreateMethodBody(totalLine, hasReturnValue, returnValueType)); sb.Append("\n\t}"); return sb.ToString();
} /// <summary>
/// 创建函数头部,格式为 public 返回值 函数名(){},需要注意这些函数全部没有参数名,方便调用
/// </summary>
/// <param name="hasReturnValue"> 是否有返回值</param>
/// <param name="methodNamePrefix">如果有返回值 返回值类型</param>
/// <returns></returns>
static string CreateMethodHead(bool hasReturnValue,string methodNamePrefix,string returnType)
{
var methodName = methodNamePrefix + RandomMethodName();
var returnStr = hasReturnValue ? returnType : "void";
return "\n\n\tpublic " + returnStr + " " + methodName + "()\n\t{";
} /// <summary>
/// 创建函数体,为包含在函数{}内部的代码,由几部分组拼而成
/// </summary>
/// <param name="needToRun">需不需函数运行,如果不需要,直接return</param>
/// <param name="totalLine">总共需要多少行代码</param>
/// <param name="hasReturnValue">是否有返回值</param>
/// <param name="ReturnValueType">如果有返回值,返回值的类型</param>
/// <returns></returns>
static string CreateMethodBody(int totalLine,bool hasReturnValue, string ReturnValueType)
{
string returnStatement = CreateReturnStatement(ReturnValueType,);//返回语句 if (totalLine<)
{
totalLine = ;
}
int totalCount = UnityEngine.Random.Range(, totalLine); StringBuilder sb = new StringBuilder(); for (int i = ; i < totalCount; i++)
{
int j = UnityEngine.Random.Range(, );
int k = UnityEngine.Random.Range(, ); switch (j)
{
case :
sb.Append(CreateForLoop(CreateSingleRandomStatement(k)));
break;
case :
int m = UnityEngine.Random.Range(, );
sb.Append(CreateIfElse(CreateSingleRandomStatement(k),CreateSingleRandomStatement(m)));
break;
case :
sb.Append(CreateWhile(CreateSingleRandomStatement(k)));
break;
default:
break;
}
} sb.Append(returnStatement); return sb.ToString(); } /// <summary>
/// 创建For循环,其中循环次数为类的静态全局变量控制
/// int forLoops:控制循环次数
/// bool openLoop: 是否开启循环
/// </summary>
/// <param name="statementInForLoop">要放入for循环的具体语句</param>
/// <returns></returns>
static string CreateForLoop(string statementInForLoop)
{
return "\n\n\t\tif("+ openLoop + ")\n\t\t{\n\t\t\tfor(int i = 0;i<"+ forLoopCycleCount + ";i++)\n\t\t\t{\n\t\t\t\t"+ statementInForLoop + "\n\t\t\t}\n\t\t}";
} /// <summary>
/// 创建 if-else判断
/// </summary>
/// <param name="ifString">if语句里面要执行的东西</param>
/// <param name="elseString">else语句里面要执行的东西</param>
/// <returns></returns>
static string CreateIfElse(string ifString,string elseString)
{
return "\n\n\t\tif("+ openIfElse + ")\n\t\t{\n\t\t\t"+ ifString + "\n\t\t}\n\t\telse\n\t\t{\n\t\t\t"+ elseString + "\n\t\t}";
} /// <summary>
/// 创建while循环
/// </summary>
/// <param name="whileStr">while循环中要执行的东西</param>
/// <returns></returns>
static string CreateWhile(string whileStr)
{
return "\n\n\t\tif("+ openWhile + ")\n\t\t{\n\t\t\tint i =0;\n\t\t\twhile(i<"+ whileLoopCycleCount + ")\n\t\t\t{\n\t\t\t\t"+ whileStr + "\n\t\t\t}\n\t\t}";
} /// <summary>
/// 创建返回语句
/// </summary>
/// <param name="returnValueType"></param>
/// <param name="suojin"></param>
/// <returns></returns>
static string CreateReturnStatement(string returnValueType,int suojin)
{
return "\n"+GetSuoJin(suojin)+"return default("+ returnValueType + ");";
} /// <summary>
/// 获取缩进的字符串
/// </summary>
/// <param name="suojin"></param>
/// <returns></returns>
static string GetSuoJin(int suojin)
{
if (suojin<=)
{
return "";
} string suojinstr = string.Empty; for (int i = ; i < suojin; i++)
{
suojinstr += "\t";
} return suojinstr;
} /// <summary>
/// 随机函数名字
/// </summary>
/// <returns></returns>
static string RandomMethodName()
{
int methodLength = UnityEngine.Random.Range(, ); StringBuilder sb = new StringBuilder(); for (int i = ; i < methodLength; i++)
{
sb.Append(GetLetter(UnityEngine.Random.Range(, )));
} if (usedMethodName.Contains(sb.ToString()))
{
return RandomMethodName();
}
else
{
usedMethodName.Add(sb.ToString());
return sb.ToString();
} } static string CreateSingleRandomStatement(int index)
{
switch (index)
{
case :
return "int neverMSDFA = UnityEngine.Random.Range(0,100);";
case :
return "UnityEngine.Debug.Log(\"HELLO WORLD\");";
case :
return "var str = \"Hello world\";";
default:
return "";
} } static string GetLetter(int index)
{
switch (index)
{
case :
return "A";
case :
return "B";
case :
return "C";
case :
return "D";
case :
return "E";
case :
return "F";
case :
return "G";
case :
return "H";
case :
return "I";
case :
return "J";
case :
return "K";
case :
return "L";
case :
return "M";
case :
return "N";
case :
return "O";
case :
return "P";
case :
return "Q";
case :
return "R";
case :
return "S";
case :
return "T";
case :
return "U";
case :
return "V";
case :
return "W";
case :
return "X";
case :
return "Y";
case :
return "Z";
default:
return ""; }
} }

C#垃圾代码随机生成器的更多相关文章

  1. Auty自动化测试框架第六篇——垃圾代码回收、添加suite支持

    [本文出自天外归云的博客园] 垃圾代码回收 添加脚本恢复机制,因为框架会自动生成一些代码,如果代码生成后出现问题导致代码没有正常删除掉,则会造成代码垃圾,在auty目录添加recovery.py文件: ...

  2. 使用Swift的代理,闭包来封装一个公用协议减少垃圾代码

    iOS开发中,如果不进行适当的封装,使用协议或者继承类来进行开发,你就会遇到传说中的ViewController(以后简称VC) Hell的问题…… 比如说,我们先声网App中为了调用接口,做简单的判 ...

  3. 随机生成器、thread(暂停)、清屏定义

    1.生成一个随机生成器 Random a = new Random(); //()可以填写随机生成器的种子,这个种子只能是整数(int) ); //()内的数字代表小于5的非负整数,包括零,例如0,1 ...

  4. MyBatis-plus 代码自动生成器

    MyBatis-plus  代码自动生成器 1.添加pom文件依赖 <!-- Mybatis-Plus 自动生成实体类--> <dependency> <groupId& ...

  5. 你写的什么垃圾代码让Vsync命令不能及时处理呢?(1)

    想想自己写的什么垃圾代码导致Vsync不能及时处理#(不高兴) 想不开? 实际开发中性能问题不好复现?这你就可能需要一些工具来帮你检测这种情况. 首先是Android系统自带的工具(4.1之后的版本) ...

  6. Teleport Ultra 垃圾代码 tppabs的清理<转>

    在使用整站下载软件Teleport Pro或Teleport Ultra下载的离线文件里会包含大量垃圾代码,下载后就需要清除整站下载文件中的冗余代码:tppabs等.这些代码本是Teleport自动添 ...

  7. CodeMixerPro工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

  8. ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...

  9. CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

随机推荐

  1. Jvm相关文章

    深入理解JVM-内存模型(jmm)和GC https://www.jianshu.com/p/76959115d486

  2. Tarjan算法 学习笔记

    前排提示:先学习拓扑排序,再学习Tarjan有奇效. -------------------------- Tarjan算法一般用于有向图里强连通分量的缩点. 强连通分量:有向图里能够互相到达的点的集 ...

  3. NTFS 文件系统结构

    背景 NTFS 作为一个新的文件系统,因其安全性高而受到越来越多的重视,越来越多的应用采用了NTFS 文件系统.作为一个新的文件系统,NTFS 有着许多区别于FAT32 的优点,如磁盘配额.文件系统加 ...

  4. 职场老鸟,一文教你如何正确入门Python爬虫!

    爬虫现在的火热程度我就不说了,先说一下这门技术能干什么事儿,主要为以下三方面: 1.爬取数据,进行市场调研和商业分析 爬取知乎.豆瓣等网站的优质话题内容:抓取房产网站买卖信息,分析房价变化趋势.做不同 ...

  5. Java 的几种运算符

    一.原码.反码.补码 1 用二进制表示 00000001 -1 如果只变符号位(原码) 10000001 那么 1 + -1 = 10000010 = -2 -1 的反码 11111110 除去符号位 ...

  6. Java基础高级篇 NIO

    nio模型与io模型的对比 netty 是什么 怎么使用

  7. 精讲RestTemplate第4篇-POST请求方法使用详解

    本文是精讲RestTemplate第4篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  8. Vue视图渲染原理解析,从构建VNode到生成真实节点树

    前言 在 Vue 核心中除了响应式原理外,视图渲染也是重中之重.我们都知道每次更新数据,都会走视图渲染的逻辑,而这当中牵扯的逻辑也是十分繁琐. 本文主要解析的是初始化视图渲染流程,你将会了解到从挂载组 ...

  9. 【模式识别与机器学习】——PCA与Kernel PCA介绍与对比

    PCA与Kernel PCA介绍与对比 1. 理论介绍 PCA:是常用的提取数据的手段,其功能为提取主成分(主要信息),摒弃冗余信息(次要信息),从而得到压缩后的数据,实现维度的下降.其设想通过投影矩 ...

  10. C#LeetCode刷题之#704-二分查找(Binary Search)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3999 访问. 给定一个 n 个元素有序的(升序)整型数组 num ...