直接上代码:

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. TearmQuery()

    lucene 中的  TearmQuery() 在.search( tearmQuery, q)查询时 比较矫情 q只能是小写

  2. PCL使用RANSAC拟合三位平面

    1.使用PCL工具 //创建一个模型参数对象,用于记录结果 pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); ...

  3. Python多线程-ThreadLocal

    参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017630786314240#0 ThreadLocal ThreadLocal变量虽然是 ...

  4. Tomcat访问图片

    Tomcat访问图片 配置server.xml 在 节点中添加 <Context docBase="D:/Tomcat/tomcat-8083/imgs" path=&quo ...

  5. 2017面向对象程序设计(Java)第五周工作总结

    时光如逝,岁月如梭,不知不觉已经开学五个星期了.在代老师的带领下,我们一步一步走近Java,也渐渐的适应了翻转课堂的个性化教学,此时此刻相信同学们对Java也有了更加深入的了解.下面我对第五周的助教工 ...

  6. Python精选库大全,建议收藏留用!

    Python为啥这么火,这么多人学,就是因为简单好学,功能强大,整个社区非常活跃,资料很多.而且这语言涉及了方方面面,比如自动化测试,运维,爬虫,数据分析,机器学习,金融领域,后端开发,云计算,游戏开 ...

  7. Python-关于正则表达式的总结

    什么是正则表达式? 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),用于字符串的 匹配 和 提取 等操作.正则表达式在所有编程语言中都是通用的. 很多人 ...

  8. myBatis源码解析-数据源篇(3)

    前言:我们使用mybatis时,关于数据源的配置多使用如c3p0,druid等第三方的数据源.其实mybatis内置了数据源的实现,提供了连接数据库,池的功能.在分析了缓存和日志包的源码后,接下来分析 ...

  9. 制作的excel表格如何放到微信公众号文章中?

    制作的excel表格如何放到微信公众号文章中? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件 ...

  10. day27:异常&反射

    目录 认识异常处理 1.程序错误的种类    2.异常的分类 3.AssertionError(断言assert语句失败) 异常处理的基本语法 1.异常处理的基本语法 2.带有分支的异常处理 3.处理 ...