C#垃圾代码随机生成器
直接上代码:
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#垃圾代码随机生成器的更多相关文章
- Auty自动化测试框架第六篇——垃圾代码回收、添加suite支持
[本文出自天外归云的博客园] 垃圾代码回收 添加脚本恢复机制,因为框架会自动生成一些代码,如果代码生成后出现问题导致代码没有正常删除掉,则会造成代码垃圾,在auty目录添加recovery.py文件: ...
- 使用Swift的代理,闭包来封装一个公用协议减少垃圾代码
iOS开发中,如果不进行适当的封装,使用协议或者继承类来进行开发,你就会遇到传说中的ViewController(以后简称VC) Hell的问题…… 比如说,我们先声网App中为了调用接口,做简单的判 ...
- 随机生成器、thread(暂停)、清屏定义
1.生成一个随机生成器 Random a = new Random(); //()可以填写随机生成器的种子,这个种子只能是整数(int) ); //()内的数字代表小于5的非负整数,包括零,例如0,1 ...
- MyBatis-plus 代码自动生成器
MyBatis-plus 代码自动生成器 1.添加pom文件依赖 <!-- Mybatis-Plus 自动生成实体类--> <dependency> <groupId& ...
- 你写的什么垃圾代码让Vsync命令不能及时处理呢?(1)
想想自己写的什么垃圾代码导致Vsync不能及时处理#(不高兴) 想不开? 实际开发中性能问题不好复现?这你就可能需要一些工具来帮你检测这种情况. 首先是Android系统自带的工具(4.1之后的版本) ...
- Teleport Ultra 垃圾代码 tppabs的清理<转>
在使用整站下载软件Teleport Pro或Teleport Ultra下载的离线文件里会包含大量垃圾代码,下载后就需要清除整站下载文件中的冗余代码:tppabs等.这些代码本是Teleport自动添 ...
- CodeMixerPro工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...
- ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...
- CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...
随机推荐
- python数据可视化编程实战PDF高清电子书
点击获取提取码:3l5m 内容简介 <Python数据可视化编程实战>是一本使用Python实现数据可视化编程的实战指南,介绍了如何使用Python最流行的库,通过60余种方法创建美观的数 ...
- 最后通牒!8月1日开始ios中国区下架全部无版号游戏
据媒体报道,苹果早于7月8日就给中国游戏开发者发送邮件,要求游戏开发者必须在7月31日前提交游戏版号及相关文件,否则付费游戏将不可以在中国AppStore供应,8月1日期全部正式下架. 需 ...
- CF习题集三
CF习题集三 一.CF8C Looking for Order 题目描述 \(Lena\)喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她 ...
- 网络安全传输系统-sprint3账号管理子系统设计
part1:sqlite嵌入式数据库移植 1.数据库系统构成:访问数据库应用-->管理数据库系统-->数据库存储(自上而下) 2.数据库中数据以表的形式而存在.表与表之间可能存在关联关系( ...
- Android RecyclerView的补充。
明天写吧.. 今天写,然后再写今天的内容,虽然结课了,我们还是得学习,所以如果我学习了一些知识,不出意外每天会持续更新的. RecyclerView其实是可以完全代替ListView的存在, 但是为啥 ...
- Spring Boot 数据缓存 - EhCache
EhCache 集成 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider. 在 Spring Boot 中集成 E ...
- CenterNet文献调研记录
心仪院校导师任务之一,文献调研记录. 本文部分思路参考: 1. Anchor-Free 2. https://zhuanlan.zhihu.com/p/66048276 3. https://blog ...
- react 样式冲突解决方案 styled-components
前置 在 react 中解决组件样式冲突的方案中,如果您喜欢将 css 与 js 分离,可能更习惯于 CSS-Modules:如果习惯了 Vue.js 那样的单文件组件,可能习惯于使用 styled- ...
- 狄利克雷卷积 & 莫比乌斯反演
积性函数与完全积性函数 积性函数 若一个数论函数\(f\)满足当\(gcd(n,m)=1\)时,\(f(nm)=f(n)f(m)\) 则称\(f\)为积性函数 一些常见的积性函数 完全积性函数 若一个 ...
- 简单Web服务器
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...