优化代码

This commit is contained in:
JIe 2024-11-04 13:09:46 +08:00
parent 57277eff2d
commit 36ea81e5e2
13 changed files with 264 additions and 100 deletions

View File

@ -0,0 +1,46 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="24">
<item index="0" class="java.lang.String" itemvalue="blinker" />
<item index="1" class="java.lang.String" itemvalue="autopep8" />
<item index="2" class="java.lang.String" itemvalue="Flask-Cors" />
<item index="3" class="java.lang.String" itemvalue="Werkzeug" />
<item index="4" class="java.lang.String" itemvalue="Flask-HTTPAuth" />
<item index="5" class="java.lang.String" itemvalue="SQLAlchemy" />
<item index="6" class="java.lang.String" itemvalue="cryptography" />
<item index="7" class="java.lang.String" itemvalue="MarkupSafe" />
<item index="8" class="java.lang.String" itemvalue="click" />
<item index="9" class="java.lang.String" itemvalue="Flask-SQLAlchemy" />
<item index="10" class="java.lang.String" itemvalue="casbin" />
<item index="11" class="java.lang.String" itemvalue="pip-review" />
<item index="12" class="java.lang.String" itemvalue="Authlib" />
<item index="13" class="java.lang.String" itemvalue="filelock" />
<item index="14" class="java.lang.String" itemvalue="platformdirs" />
<item index="15" class="java.lang.String" itemvalue="certifi" />
<item index="16" class="java.lang.String" itemvalue="virtualenv" />
<item index="17" class="java.lang.String" itemvalue="charset-normalizer" />
<item index="18" class="java.lang.String" itemvalue="casbin-sqlalchemy-adapter" />
<item index="19" class="java.lang.String" itemvalue="gevent" />
<item index="20" class="java.lang.String" itemvalue="Flask" />
<item index="21" class="java.lang.String" itemvalue="typing_extensions" />
<item index="22" class="java.lang.String" itemvalue="greenlet" />
<item index="23" class="java.lang.String" itemvalue="Flask-APScheduler" />
</list>
</value>
</option>
</inspection_tool>
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N803" />
<option value="N802" />
<option value="N806" />
</list>
</option>
</inspection_tool>
</profile>
</component>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/screepCpde.iml" filepath="$PROJECT_DIR$/.idea/screepCpde.iml" />
</modules>
</component>
</project>

12
.idea/screepCpde.iml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

67
.idea/workspace.xml Normal file
View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="c827e683-0dd1-4e51-b9ab-32ea80c8033c" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/src/modules/creepApi.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/index.d.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/index.d.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/modules/builder.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/modules/builder.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/modules/setting.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/modules/setting.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/modules/spawnCreep.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/modules/spawnCreep.ts" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectColorInfo"><![CDATA[{
"associatedIndex": 1
}]]></component>
<component name="ProjectId" id="2oMglzZAjAmWPupiCpptc5L6kGn" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.ShowReadmeOnStart": "true",
"git-widget-placeholder": "master",
"ignore.virus.scanning.warn.message": "true",
"last_opened_file_path": "C:/document/code/ts/screepCpde",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"ts.external.directory.path": "C:\\document\\code\\ts\\screepCpde\\node_modules\\typescript\\lib",
"vue.rearranger.settings.migration": "true"
}
}]]></component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-js-predefined-1d06a55b98c1-91d5c284f522-JavaScript-WS-241.15989.105" />
</set>
</attachedChunks>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="c827e683-0dd1-4e51-b9ab-32ea80c8033c" name="Changes" comment="" />
<created>1730685013447</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1730685013447</updated>
<workItem from="1730685014588" duration="3709000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

8
src/index.d.ts vendored
View File

@ -1,4 +1,8 @@
interface CreepMemory{
interface CreepMemory {
role: string,
working: boolean | null
working?: boolean | null,
[property: string]: any,
}
declare type Part = WORK | MOVE | CARRY | HEAL | ATTACK | RANGED_ATTACK | TOUGH | CLAIM;

View File

@ -1,5 +1,5 @@
import { MAIN_SOURCE_ID } from "./setting";
import { FindCapacity, GetConstructureSet, GetContainer, GetSource } from "./util";
import { FindCapacity, GetConstructureSet, GetContainer, GetSource } from "./creepApi";
export function Build(creep: Creep, structureType: string | null = null) {
if (creep.memory.working && creep.store[RESOURCE_ENERGY] == 0) {
@ -27,7 +27,7 @@ export function Build(creep: Creep, structureType: string | null = null) {
}
} else {
creep.memory.working = false
var target = GetContainer(creep);
const target = GetContainer(creep);
if (creep.withdraw(target[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(target[0], { visualizePathStyle: { stroke: '#ffaa00' } });
}

85
src/modules/creepApi.ts Normal file
View File

@ -0,0 +1,85 @@
import {Role} from "@/modules/setting";
export function SetRole(creep: Creep, role: Role){
switch(role){
case Role.Harvester:
creep.memory.role ="Harvester";
case Role.BigHarvester:
creep.memory.role = "BigHarvester";
case Role.Builder:
creep.memory.role = "Builder";
case Role.Upgrader:
creep.memory.role = "Upgrader";
case Role.Repairer:
creep.memory.role = "Repairer";
}
}
export function RoleToString(role: Role) : string{
switch(role){
case Role.Harvester:
return "Harvester";
case Role.BigHarvester:
return "BigHarvester";
case Role.Builder:
return "Builder";
case Role.Upgrader:
return "Upgrader";
case Role.Repairer:
return "Repairer";
}
}
export function SpawnCreep(spawn: StructureSpawn, body: Part[], role?:Role) : number{
const name = "Creep" + Game.time;
return spawn.spawnCreep(body, name, {memory: {role : RoleToString(role)}});
}
export function FindCapacity(creep: Creep): AnyStructure[] {
return creep.room.find(FIND_STRUCTURES, {
filter: (structure: StructureSpawn | StructureExtension) => {
let type = structure.structureType;
return (
(type == STRUCTURE_EXTENSION ||
type == STRUCTURE_SPAWN||
type == STRUCTURE_CONTAINER) &&
structure.store.getFreeCapacity(RESOURCE_ENERGY) as number > 0
)
}
})
}
export function GetSource(sourceId: Id<Source> | null): Source {
return Game.getObjectById(sourceId);
}
export function GetConstructureSet(creep: Creep, structureType: string | null = null): ConstructionSite<BuildableStructureConstant>[] {
return creep.room.find(FIND_CONSTRUCTION_SITES, {
filter: (structure: Structure) => {
if (structureType == null) return true;
return structure.structureType == structureType;
}
})
}
export function GetConstructure(creep: Creep, structureType: string, ){
return creep.room.find(FIND_STRUCTURES, {filter:(structure: AnyStructure)=>{
return structure.structureType == structureType;
}})
}
export function GetContainer(creep: Creep): StructureContainer[]{
let target = GetConstructure(creep, STRUCTURE_CONTAINER) as StructureContainer[];
return target
}
export function GetCreeps() : Map<string, number>{
let resp: Map<string, number> = new Map();
for (var name in Game.creeps){
var creep = Game.creeps[name];
if(resp.has(creep.memory.role))
resp.set(creep.memory.role, resp.get(creep.memory.role)+1)
else
resp.set(creep.memory.role, 1);
}
return resp;
}

View File

@ -1,4 +1,4 @@
import { FindCapacity, GetContainer, GetSource } from "./util"
import { FindCapacity, GetContainer, GetSource } from "./creepApi"
import { MAIN_SOURCE_ID } from "./setting";
export function Harvest(creep: Creep) {

View File

@ -1,13 +1,16 @@
let HARVESTER_COUNT: number = 0;
let BUILDER_COUNT: number = 1;
let UPGRADER_COUNT: number = 6;
export let HARVESTER_COUNT: number = 0;
export let BUILDER_COUNT: number = 1;
export let UPGRADER_COUNT: number = 4;
let MAIN_SOURCE_ID: Id<Source> = "ef990774d80108c" as Id<Source>;
export {
HARVESTER_COUNT,
BUILDER_COUNT,
UPGRADER_COUNT,
MAIN_SOURCE_ID,
export let MAIN_SOURCE_ID: Id<Source> = "ef990774d80108c" as Id<Source>;
export const enum Role {
Harvester,
BigHarvester,
Builder,
Upgrader,
Repairer,
}
export let mk1Body: Part[] = [WORK, CARRY, MOVE];
export let mk2Body: Part[] = [WORK, WORK, CARRY, CARRY, MOVE, MOVE];
export let Mk2harvesterBody: Part[] = [WORK, WORK, WORK, WORK, MOVE];

View File

@ -1,70 +1,40 @@
import "./setting";
import { BUILDER_COUNT, HARVESTER_COUNT, UPGRADER_COUNT } from "./setting";
import * as setting from "./setting";
import * as creepApi from "./creepApi"
var createDefaultHarvester = (spawn: StructureSpawn) => {
let name = "Harvester" + Game.time;
return spawn.spawnCreep([WORK, CARRY, MOVE], name, {
memory: {
role: "Harvester",
working: false
}
});
}
var createDefaultBuilder = (spawn: StructureSpawn) => {
let name = "Builder" + Game.time;
return spawn.spawnCreep([WORK, CARRY, MOVE], name, {
memory: {
role: "Builder",
working: false
}
});
const createDefaultHarvester = (spawn: StructureSpawn) => {
return creepApi.SpawnCreep(spawn, setting.mk1Body, setting.Role.Harvester);
}
const createDefaultBuilder = (spawn: StructureSpawn) => {
return creepApi.SpawnCreep(spawn, setting.mk1Body, setting.Role.Builder);
};
var createDefaultUpgrader = (spawn: StructureSpawn) => {
let name = "Upgrader" + Game.time;
return spawn.spawnCreep([WORK, CARRY, MOVE], name, {
memory: {
role: "Upgrader",
working: false
}
});
const createDefaultUpgrader = (spawn: StructureSpawn) => {
return creepApi.SpawnCreep(spawn, setting.mk1Body, setting.Role.Upgrader);
};
const createMk2Harvester = (spawn: StructureSpawn) => {
return creepApi.SpawnCreep(spawn, setting.Mk2harvesterBody, setting.Role.BigHarvester);
}
export function SpawnCreep(spawn: StructureSpawn) {
if (spawn.spawning) return;
let harvesters = _.filter(Game.creeps,
/**@param {Creep} creep*/
(creep) => {
return creep.memory.role == "Harvester";
});
let builders = _.filter(Game.creeps,
/**@param {Creep} creep*/
(creep) => {
return creep.memory.role == "Builder";
});
let upgraders = _.filter(Game.creeps,
/**@param {Creep} creep*/
(creep) => {
return creep.memory.role == "Upgrader";
});
if (harvesters.length < HARVESTER_COUNT) {
let currentCreeps = creepApi.GetCreeps();
if (currentCreeps.get(creepApi.RoleToString(setting.Role.Harvester)) > setting.HARVESTER_COUNT) {
if (createDefaultHarvester(spawn) == 0) {
console.log("Spawn Harvester")
}
}
if (upgraders.length < UPGRADER_COUNT) {
if (currentCreeps.get(creepApi.RoleToString(setting.Role.Upgrader)) > setting.UPGRADER_COUNT) {
if (createDefaultUpgrader(spawn) == 0) {
console.log("Spawn Upgrader")
}
}
if (builders.length < BUILDER_COUNT) {
if (currentCreeps.get(creepApi.RoleToString(setting.Role.Builder)) > setting.BUILDER_COUNT) {
if (createDefaultBuilder(spawn) == 0) {
console.log("Spawn Builder")
}
}
if (spawn.spawning) {
var spawningCreep = Game.creeps[spawn.spawning.name];
spawn.room.visual.text(

View File

@ -1,5 +1,5 @@
import { MAIN_SOURCE_ID } from "./setting";
import { GetContainer, GetSource } from "./util";
import { GetContainer, GetSource } from "./creepApi";
/**@param {Creep} creep */
export function Upgrade(creep: Creep) {

View File

@ -1,37 +0,0 @@
export function FindCapacity(creep: Creep): AnyStructure[] {
return creep.room.find(FIND_STRUCTURES, {
filter: (structure: StructureSpawn | StructureExtension) => {
let type = structure.structureType;
return (
(type == STRUCTURE_EXTENSION ||
type == STRUCTURE_SPAWN||
type == STRUCTURE_CONTAINER) &&
structure.store.getFreeCapacity(RESOURCE_ENERGY) as number > 0
)
}
})
}
export function GetSource(sourceId: Id<Source> | null): Source {
return Game.getObjectById(sourceId);
}
export function GetConstructureSet(creep: Creep, structureType: string | null = null): ConstructionSite<BuildableStructureConstant>[] {
return creep.room.find(FIND_CONSTRUCTION_SITES, {
filter: (structure: Structure) => {
if (structureType == null) return true;
return structure.structureType == structureType;
}
})
}
export function GetConstructure(creep: Creep, structureType: string, ){
return creep.room.find(FIND_STRUCTURES, {filter:(structure: AnyStructure)=>{
return structure.structureType == structureType;
}})
}
export function GetContainer(creep: Creep): StructureContainer[]{
let target = GetConstructure(creep, STRUCTURE_CONTAINER) as StructureContainer[];
return target
}