python中的进程-实战部分

python中的进程-实战部分,第1张

如果想了解进程 可以先看一下这一篇 python中的进程-理论部分

python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。

multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。

  multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。

需要再次强调的一点是:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。

创建进程的类

参数介绍:

group参数未使用,值始终为None

target表示调用对象,即子进程要执行的任务

args表示调用对象的位置参数元组,args=(1,2,'tiga',)

kwargs表示调用对象的字典,kwargs={'name':'tiga','age':18}

name为子进程的名称

方法介绍:

p.start():启动进程,并调用该子进程中的p.run()

p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法

p.terminate():强制终止进程p,不会进行任何清理 *** 作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁

p.is_alive():如果p仍然运行,返回True

p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程

属性介绍:

注意:在windows中Process()必须放到# if __name__ == '__main__':下

创建并开启子进程的两种方式

方法一:

方法二:

有了join,程序不就是串行了吗???

terminate与is_alive

name与pid

RA2的单位属性都定义在rules.ini文件里 尤里是rulesmd.ini

先以美国大兵为例

[E1]

UIName=Name:E1 /单位在游戏中显示的名字,相关内容在RA2(md).CSF里

Name=GI /单位的名字(可有可无)

Image=GI /单位的图象显示名称(在art(md).ini中编辑

Category=Soldier /单位的类型

Primary=M60 /主武器

Secondary=Para /次要武器

Occupier=yes/是否可以占领建筑物作战

OccupyWeapon=UCPara /在占领建筑物中使用的武器

EliteOccupyWeapon=UCElitePara/精英级别在占领建筑物中使用武器

OpenTransportWeapon=1/在运输工具中用第一武器(好象是这样)

Prerequisite=GAPILE /必须的建筑

CrushSound=InfantrySquish /挨坦克压的音效

Strength=125/生命值

Pip=white /在运输工具中显示什么颜色

OccupyPip=PersonBlue/在占领建筑物中显示的颜色

Armor=none /装甲类型

TechLevel=1 /科技等级(不同的需求为1到10,-1即不能建造)

Sight=5 /视力(可以打开多少黑幕)

Speed=4 /速度

Owner=British,French,Germans,Americans,Alliance /所属国家(阵营)

Cost=200 /价钱

Soylent=100 /好象是塞进垃圾箱后得到的钱

Points=10 /好象是被消灭后得到的经验值

IsSelectableCombatant=yes /定义为可以控制的单位

VoiceSelect=GISelect /单位的语音

VoiceMove=GIMove /单位的语音

VoiceAttack=GIAttackCommand /单位的语音

VoiceFeedback=GIFear /单位的语音

VoiceSpecialAttack=GIMove /单位的语音

DieSound=GIDie/单位的语音

Locomotor={4A582744-9839-11d1-B709-00A024DDAFD1} /运动方式(这里是陆地移动方式)

PhysicalSize=1 /单位的大小(就是进运输工具时所占的空间)

MovementZone=Infantry/运动地域

ThreatPosed=10 (好象电脑优先攻击的数值)

ImmuneToVeins=yes (好象是对矿免疫)

ImmuneToPsionics=no /是否对尤里的心灵控制免役

Bombable=yes (抱歉,忘了)

Deployer=yes /是否可以展开

DeployFire=yes /展开后可以攻击

VeteranAbilities=STRONGER,FIREPOWER,ROF,SIGHT,FASTER /老手级后的能力.分别为生命加强,火力提高,攻击间隔减少,视力加大,速度变快

EliteAbilities=SELF_HEAL,STRONGER,FIREPOWER,ROF /精英级的能力.自疗,生命加强,火力提高,攻击间隔减少

Size=1 /单位的大小

Crushable=yes /能够被压扁

DeploySound=GIDeploy /展开的音效

UndeploySound=GIUndeploy/展开后站起来的音效

ElitePrimary=M60E/精英级主武器

EliteSecondary=ParaE /精英级副武器

IFVMode=2/进入步兵车后所用的武器

以上是美国大兵的代码段

它的图象定义在art.ini中 尤里是artmd.ini

[GI] /用的是素材的文件名

Cameo=GIICON/单位的图标名(格式为图标文件名后加 ICON )

AltCameo=GIUICO /升级图标

Sequence=GISequence /控制图象的次序段

Crawls=yes /是行走运动的单位

Remapable=yes /不知道

FireUp=2 /图象开火的位置

PrimaryFireFLH=80,0,105 /主武器图象开火的坐标

SecondaryFireFLH=80,0,90 /次要武器图象开火的坐标

如果在rules(md)中不使用这代码段名[GI]做为单位的代码名(rules中用"[E1]"),则要在rules(md)的该单位代码中加上 Image=GI

参考上面的代码,来制作一个新的单位

比如在RA2任务中出现过的美国总统的保镖

先复制这段代码到文件任意一个地方~

这是它的代码:

[SSRV]

UIName=Name:SecretService

Name=Secret Service

Category=Soldier

Strength=50

Primary=Pistola

Armor=none

TechLevel=-1 ******平民单位,不能建造,把它改为1

CrushSound=InfantrySquish

Sight=2

Speed=4

Owner=Russians,Confederation,Africans,Arabs,YuriCountry ******所属国,这里定义了它为苏军阵营和尤里可拥有

在后面加入British,French,Germans,Americans,Alliance使它可以被所有国家建造(用逗号格开)

AllowedToStartInMultiplayer=no *****定义它是否在初始部队出现,为了方便,改为 yes

Cost=10

Soylent=100

Points=1

Pip=white

VoiceSelect=SSSelect

VoiceMove=SSMove

VoiceAttack=SSAttackCommand

VoiceFeedback=

VoiceSpecialAttack=SSMove

DieSound=SSDie

Locomotor={4A582744-9839-11d1-B709-00A024DDAFD1}

PhysicalSize=1

MovementZone=Infantry

ThreatPosed=0

ImmuneToVeins=yes

Size=1

IFVMode=0

下面是修改后的:

[SSRV2] *********为了不覆盖原来的单位,改一个其他的名字!

UIName=Name:SecretService

Name=Secret Service

Category=Soldier

Image=SSRV **********素材,就是保镖的样子,别忘加上这句!

Strength=50

Primary=Pistola

Armor=none

TechLevel=1

CrushSound=InfantrySquish

Sight=2

Speed=4

Owner=British,French,Germans,Americans,Alliance,Russians,Confederation,Africans,Arabs,YuriCountry

AllowedToStartInMultiplayer=yes

Cost=10

Soylent=100

Points=1

Pip=white

VoiceSelect=SSSelect

VoiceMove=SSMove

VoiceAttack=SSAttackCommand

VoiceFeedback=

VoiceSpecialAttack=SSMove

DieSound=SSDie

Locomotor={4A582744-9839-11d1-B709-00A024DDAFD1}

PhysicalSize=1

MovementZone=Infantry

ThreatPosed=0

ImmuneToVeins=yes

Size=1

IFVMode=0

Prerequisite=GAPILE ******定义为盟军兵营建造

IsSelectableCombatant=yes ******加上这句保险

好,代码是写好了.但是还有一道程序

就是注册单位名字

找到[InfantryTypes](步兵单位列表)

在数字后面加上**=SSRV2 *******注意要大写

同样的

[VehicleTypes]

是机动车列表

[AircraftTypes]

飞行器列表

修改完毕,保存,一个新的单位诞生了~~

但是,还有一个问题.....没有图标!

由于没有新的图标文件,先用美国大兵的替一下

打开art.ini或artmd.ini

找到[SSRV]一段

你会看到图标已经有了定义

Cameo=SHKICON

AltCameo=SHKUICO

那是磁暴兵的图标

有了图标就别动了,进游戏看看吧~~~

关于武器,用犀牛的主炮来做个说明

[120mm]

Damage=90 杀伤力

ROF=65 射d间隔

Range=5.75 距离

Projectile=Cannon 射d方式(定义射d图象等)

Speed=40 速度

Warhead=AP d头

Report=RhinoTankAttack 音效

Anim=GUNFIRE 发炮口动画

Bright=yes 打出去的炮d落在地上会亮一下

*****特别要注意大小写不能有差错

[Cannon] 射d名称

Image=120MM 图象名称

Arcing=true 定义它呈弧线运动

SubjectToCliffs=yes 是否可以射击悬崖

SubjectToElevation=yes 是否可以射击高地

SubjectToWalls=yes 是否可以射击围墙

[AP] d头名字

CellSpread=.3 爆炸范围

PercentAtMax=.5 忘了~

Wall=yes 是否可以打坏围墙

Wood=yes 是否可以打坏木头?

Verses=25%,25%,15%,75%,100%,100%,65%,45%,60%,60%,100% d头对装甲的伤害比例,分别为1-3步兵, 4-6坦克, 7-9建筑,后两个是特殊装甲,如蜘蛛

Conventional=yes 又忘了~

InfDeath=3 步兵被这个武器打击后的死亡方式.

AnimList=S_CLSN16,S_CLSN22 动画

ProneDamage=50%

根据以上设定,可以自己做一个新的武器

举例:

[130mm]

Damage=100 威力加大~

ROF=65

Range=5.75

Projectile=Cannon

Speed=40

Warhead=130mmAP 自己做一个d头

Report=RhinoTankAttack

Anim=GUNFIRE

Bright=yes

还可以加上如"Burst=2"(一次打两发)等语句加强威力

*****d头跟单位一样,新加的要注册

注册在[Warheads]列表中

[130mmAP] 注意名字要和前面的一样

CellSpread=2 范围大些威力强~(不能超过10)

PercentAtMax=.5

Wall=yes

Wood=yes

Verses=100%,100%,100%,200%,200%,200%,100%,100%,000%,100%,100% 这样设置,对坦克建筑强,尤其是步兵

Conventional=yes

InfDeath=3

AnimList=S_CLSN16,S_CLSN22

ProneDamage=50%

这是一个BT武器~范围大对坦克步兵建筑威力超强~~

武器之AIRBURST,

[xxx];母d名

Damage=5

ROF=75

Range=12

MinimumRange=6

Projectile=Launcher22

Speed=40

Warhead=ApocAPE

Report=ApocalypseAttackGround

Anim=VTMUZZLE

Burst=2

Bright=yes

[Launcher22] 母d射d

Arm=2

High=yes

VeryHigh=yes

Proximity=yes

Cluster=9

Ranged=yes

AA=no

Image=120MM

ROT=4

Airburst=yes

AirburstWeapon=SEPARATE;分裂出来的炸d

IgnoresFirestorm=no

CourseLockDuration=10

SubjectToCliffs=no

SubjectToElevation=no

[SEPARATE];子d

Projectile=BlimpBombP子d的d道(我是用KIROV的)

Damage=100

Warhead=NUKE32

Anim=MININUKE

Range=2

ROF=10

FireInTransport=no

;下面的这个要在[WARHEADS]申明

[NUKE32]

Verses=150%,100%,100%,150%,150%,220%,100%,150%,100%,100%,100%

Sparky=no

Fire=yes

InfDeath=6

CellSpread=5

PercentAtMax=.5

Bright=yes

AnimList=MININUKE

子d的武器要成为一个不可造单位的武器

比如:

[XBURST]

UIName=Name:XCOMET

Name=Placeholder Airburst 2

Image=HTNK

Prerequisite=GAWEAP,GATECH

Primary=SEPARATE;子d

Secondary=TeslaFragment2

Strength=300

Category=AFV

Armor=heavy

Turret=yes

IsTilter=yes

TooBigToFitUnderBridge=true

TechLevel=-1;一定要弄不可造

Sight=8

Speed=4

CrateGoodie=no

Crusher=yes

Owner=British,French,Germans,Americans,Alliance

Cost=2

Points=50

ROT=5

IsSelectableCombatant=yes

AllowedToStartInMultiplayer=no

Explosion=TWLT070,S_BANG48,S_BRNL58,S_CLSN58,S_TUMU60

VoiceSelect=

VoiceMove=

VoiceAttack=

VoiceFeedback=

MaxDebris=3

Locomotor={4A582741-9839-11d1-B709-00A024DDAFD1}

MovementZone=Destroyer

ThreatPosed=40

DamageParticleSystems=SparkSys,SmallGreySSys

DamageSmokeOffset=100, 100, 275

Weight=3.5

VeteranAbilities=STRONGER,FIREPOWER,SIGHT,FASTER

EliteAbilities=STRONGER

Accelerates=false

ZFudgeColumn=8

ZFudgeTunnel=13

Size=3

Trainable=yes

箱子的设置:

1代表几率(所有几率数相加最好不要超过110)

2代表动画效果

3代表是否出现在水里

[Powerups]

Armor=10,ARMOR,yes,1.5 1,2,3, 装甲增加到1.5倍

Firepower=10,FIREPOWR,yes,2.0 1,2,3, 火力增加到2.0倍

HealBase=10,HEALALL,yes 1,2,3 <---加生命值

Money=20,MONEY,yes,2000 1,2,3, 钱数

Reveal=10,REVEAL,yes 1,2,3 <---全图

Speed=10,SPEED,yes,1.2 1,2,3, 速度增加到1.2倍

Veteran=20,VETERAN,yes,1 1,2,3, 升级的级数

Unit=20,<none>,no 1,2,3 <---获得车辆

Invulnerability=0,ARMOR,yes,1.0 1,2,3, 延迟时间 <---刀q不入,类似铁幕,是RA1遗留下来的东西,一般无实际作用

IonStorm=0,<none>,yes 1,2,3 <---引起离子风暴,是TS遗留下来的东西,一般无实际作用

Gas=0,<none>,yes,100 1,2,3,泰伯利亚气体云的杀伤力 <---好像也没什么用

Tiberium=0,<none>,no 1,2,3 一片矿(好东西~)

Pod=0,<none>,no 1,2,3 <---获得Drop Pod一次,TS测试版的东西,在FS里不知是否有用,RA2无效

Cloak=0,CLOAK,yes 1,2,3 <---隐形

Darkness=0,SHROUDX,yes 1,2,3 <---关闭全图

Explosion=0,<none>,yes,500 1,2,3,爆炸杀伤力 <---大爆炸~~

ICBM=0,CHEMISLE,yes 1,2,3 <---核d一次

Napalm=0,<none>,no,600 1,2,3,火焰杀伤力 <---RA1就有的东西,现在似乎仍有用

Squad=0,<none>,no 1,2,3 <---RA1遗留下来的,在RA2中无效

〖转贴〗任何游戏都有它走向衰败的一天,最经典的红警系列也不例外。我所指的修

改,不是RPG游戏中的单纯能力值修改,而是结合图形、音效、武器系统、地图

编辑、电脑智能、特技效果以及文字编辑等方面内容的综合技巧运用。这样改了

以后红警会好玩吗?就看你的造化了。

再看~

这是个体统计学中步兵类型列表的第一例~[E1]美国大兵属性:

GI

[E1] 【注册名】

UIName=Name:E1 【游戏中显示名】

Name=GI 【自己好认的名,随便改就行】

Image=GI 【游戏中显示图形】

Category=Soldier 【分类=军人】

Primary=M60 【第一武器=M60机q】

Secondary=Para 【第二武器=Para机q】

Occupier=yes 【能占据建筑物射击=是的】

Prerequisite=GAPILE 【制造前提=兵营】

CrushSound=InfantrySquish 【被碾碎声音~~惨!】

Strength=125 【生命值=125】

Pip=white 【运兵时显示刻度色=白色】

Armor=none 【装甲=没有】

TechLevel=1 【制造必须科技等级=1】

Sight=5 【视野范围=5】

Speed=4 【移动速度=4】

Owner=British,French,Germans,Americans,Alliance【可以制造的国家】

Cost=200 【制造价格=200元】

Soylent=150 【????】

Points=10 【被毁时对方得到经验值=10】

IsSelectableCombatant=yes 【能选择到战斗】

VoiceSelect=GISelect 【被单点选择时声音】

VoiceMove=GIMove 【点选移动答复声音】

VoiceAttack=GIAttackCommand 【点选攻击答复声音】

VoiceFeedback=GIFear 【害怕的惊叫声音】

VoiceSpecialAttack=GIMove 【特殊攻击叫声】

DieSound=GIDie 【牺牲时的叫声】

Locomotor={4A582744-9839-11d1-B709-00A024DDAFD1}【运动模式】

PhysicalSize=1 【物理尺寸=1】

MovementZone=Infantry 【运动限制=步兵】

ThreatPosed=10 【威胁等级=10】

ImmuneToVeins=yes 【免疫??=是】

ImmuneToPsionics=no 【免疫精神武器=没有】

Bombable=yes 【能爆炸?】

Deployer=yes 【可以展开=是的】

DeployFire=yes 【展开射击=是的】

VeteranAbilities=STRONGER,FIREPOWER,ROF,SIGHT,FASTER

EliteAbilities=SELF_HEAL,STRONGER,FIREPOWER,ROF

Size=1 【运兵体积=1】

Crushable=yes 【能被碾压=是的】

DeploySound=GIDeploy 【展开沙包声音】

UndeploySound=GIUndeploy 【收回展开声音】

ElitePrimary=M60E 【升级的第一武器】

EliteSecondary=ParaE 【升级的第二武器】

IFVMode=2 【进入步兵战车炮塔改变模式】

_____________________________________________________________________

嘿!自己改改玩吧,不要过分了!大同小异的,还不快试试?

我不想写啦!白天工作好累啊!今天到此为止,下课啦!待续?.......

对于刚入门(或从未接触过修改)的红警玩家来说,应该从修改规则文件学

起。在这之前先准备好规则文件~RULES.INI和ART.INI『网上下载』

下面我就简要介绍规则文件的修改方法:(举例)

这一课先复习一下空投武器规则修改:

************ American Paradrop Special Rules ***********

These two lists _must_ have the same number of elements

AmerParaDropInf=E1,GHOST,ENGINEER ~~ (1)

AmerParaDropNum=6,6,6 How many of each of those infantry ~~ (2)

AmerParaDropInf=E1 (美国空投步兵类型)

AmerParaDropNum=8 (美国空投伞兵数量)

AllyParaDropInf=E1 (盟军占有民用机场空投步兵类型)

AllyParaDropNum=6 (盟军占有民用机场空投步兵数量)

SovParaDropInf=E2 (苏军占有民用机场空投步兵类型)

SovParaDropNum=9 (苏军占有民用机场空投步兵数量)

_____________________________________________________________________

注意(1)是美国空投步兵类型为~美国大兵、海豹部队、工程师。

(2)是美国空投步兵数量为~6,6,6

也就是说三种步兵各投六个,够了吧!会有三架飞机同时空投。大家把

分号 减切复制到下两行开头就行啦!不能有重复规则设置出现,切记!

_____________________________________________________________________

下面教大家自添加新兵种,以飞行磁暴兵为例:

···

例1:飞行磁暴兵修改

第一步:先在红警2[rules.ini]文件中步兵类型列表添加‘46=PAPAYA’登录。

第二步:在‘个体统计学’后的<步兵类型>资料中加入以下内容~

_____________________________________________________________________

;飞行磁暴兵

[PAPAYA] 【被登录名字】(可以自己取)

UIName=PAPAYA 【游戏中实际显示名字】

Name=Shock Trooper 【自定义名字】

Category=Soldier 【分类=军人】

Image=SHK 【图象=磁暴步兵】

Primary=ElectricBolt 【第一武器】

Secondary=AssaultBolt 【第二武器】~(充电)

Assaulter=no 【攻击者=不?】

Prerequisite=NAHAND,RADAR 【必须在此基础上制造】

Crushable=no 【不能被碾压】

Strength=130 【实际生命值大小为130】

Armor=Plate 【装甲厚度】

TechLevel=8 【制造必须科技等级=8】

Pip=white 【装入运兵机车时为白色】

Sight=12 【视野范围=12】

Speed=4 【移动速度=4】~(已被取代)

Owner=Russians,Confederation,Africans,Arabs 【能够被制造的国家】

RequiredHouses=Arabs 【唯一能够拥有的国家=伊拉克】

Cost=1000 【制造成本=1000】

Soylent=600 【???????】

Points=15 【被杀后对方得到的经验值加15】

IsSelectableCombatant=yes 【能选择到战斗】

VoiceSelect=TeslaTroopSelect 【被单点选择时声音】

VoiceMove=TeslaTroopMove 【点选移动答复声音】

VoiceAttack=TeslaTroopAttackCommand 【点选攻击答复声音】

VoiceFeedback=TeslaTroopFear 【害怕的惊叫声音】

MoveSound=RocketeerMoveLoop 【移动时的声音】

DieSound=TeslaTroopDie 【牺牲时的叫声】

CrashingSound=RocketeerDie

ImpactLandSound=RocketeerCrash 【坠地时的声音】

Locomotor={92612C46-F71F-11d1-AC9F-006008055BB5} 【运动模式】

PhysicalSize=1 【物理尺寸=1】

SpeedType=Hover 【盘旋模式】

MovementZone=fly 【运动限制=飞行】

JumpjetSpeed=30 【飞行速度】

JumpjetClimb=20 【攀升速度】

JumpjetCrash=25 【下降速度】

JumpJetAccel=10

JumpJetTurnRate=10 【转身速度】

JumpjetHeight=500 【飞行高度】

JumpjetWobbles=.01

JumpjetDeviation=1

JumpjetNoWobbles=yes 【飞行中摇晃】

ThreatPosed=20 【威胁等级】

VeteranAbilities=STRONGER,FIREPOWER,ROF,SIGHT,FASTER 【能力升二级】

EliteAbilities=SELF_HEAL,STRONGER,FIREPOWER,ROF 【能力升三级】

ImmuneToVeins=yes 【免疫??=是】

BalloonHover=yes 【决不降落到陆地】

HoverAttack=yes 【盘旋进攻】

Size=1 【运兵体积=1】

AllowedToStartInMultiplayer=no

ElitePrimary=ElectricBoltE 【升到三级后的武器】

IFVMode=6 【进入步兵战车炮塔攻击模式】

____________________________________________________________________

是不是很长呀?其实就是把磁暴步兵和飞行兵组合一下,复制加粘贴就可。

很简单吧! 以此类推,我们可以改变航母运动模式 :

用~

Locomotor={4A582742-9839-11d1-B709-00A024DDAFD1}

MovementZone=AmphibiousCrusher

SpeedType=Amphibious

覆盖~

Locomotor={2BEA74E1-7CCA-11d3-BE14-00104B62A16C}

SpeedType=Float

MovementZone=Water

这样,可以在陆地上行驶的两栖航空母舰就诞生啦!在“极速2003版”中,

我把Nimitz航母改成了这样,替换了美国航母,很厉害哟!

在新航母资料[CARRIERB]中加入~

BuildLimit=5 (限造五艘)

SpawnsNumber=4 (一次出动四架舰载机)——【覆盖】

CanPassiveAquire=no (自动防御)——【此行也可删除】

RequiredHouses=Americans (只能由美国制造)

在原航母资料[CARRIER]中加入~

ForbiddenHouses=Americans (美国不能制造)

另外,建议每修改一个物种就存档,不要贪心。要多备份,勤测试。因为 修改涉及面较宽,每一条规则都不能马虎,初学者要慢慢来,任何BUG都可能导 致游戏无法运行,务必小心!一旦出现死机,必须要恢复原文件,所以备份是

极其重要的。

额, 好长。。。希望楼主能采纳


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11438627.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存