直接上代码:

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. 题解 [SHOI2002]滑雪

    记忆化搜索$||dp||$剪枝 先讲方法,代码待会上 方法一:记忆化搜索 这个方法不怎么解释,就是每搜索完一个高度的最长路径记录一下,以后搜索其他的点时如果走到了这条路就直接用记录的值计算就是了 方法 ...

  2. js如何从一个数组中随机取出n个不同且不重复的值

    前言 一位正在学习前端的菜鸟,虽菜,但还未放弃. 给大家画张图了解思路 以下是代码 function randomArr(arr,num){ let newArr = [];//创建一个新数组 for ...

  3. 41-native关键字的理解

    使用 native 关键字说明这个方法是原生函数,也就是这个方法是用 C/C++等非Java 语言实现的,并且被编译成了 DLL,由 java 去调用. (1)为什么要用 native 方法 java ...

  4. SqlServer 查询的几种方式以及数字函数、时间函数的应用总结(回归基础)

    --语法:select * from 表名 *表示查询所有字段数据 select * from Class select * from Student select * from RankingLis ...

  5. JConsole、VisualVM 依赖的 JMX 技术到底是什么

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  6. Java课堂总结

    通过重载函数,来实现对不同类型的参数运算.

  7. 记一次LayUI中Table动态添加列数据

    这次在开发中遇到,有列数不固定的情况.废话不多说,先上图,在上代码. 下面上JS代码 function SearchData() { var dYear = $("#DYear") ...

  8. 「查缺补漏」巩固你的Redis知识体系

    Windows Redis 安装 链接: https://pan.baidu.com/s/1MJnzX_qRuNXJI09euzkPGA 提取码: 2c6w 复制这段内容后打开百度网盘手机App,操作 ...

  9. 从零搭建Spring Boot脚手架(3):集成mybatis

    1. 前言 今天继续搭建我们的kono Spring Boot脚手架,上一文集成了一些基础的功能,比如统一返回体.统一异常处理.快速类型转换.参数校验等常用必备功能,并编写了一些单元测试进行验证,今天 ...

  10. Python爬虫获取百度贴吧图片

    #!/usr/bin/python# -*- coding: UTF-8 -*-import urllibimport re文章来源:https://www.cnblogs.com/Axi8/p/57 ...