<自用>经济战争模型

import random
import time
class guo():

    def __init__(self, ID,FTR, POP,GOLD,FOOD,INDUS,ENE):
        self.ID=ID
        self.FTR = FTR
        self.POP = POP
        self.GOLD = GOLD
        self.FOOD = FOOD        
        self.INDUS = INDUS      
        self.ENE = ENE      
        self.ALIVE=1 
        self.ATK=1
    def ENE_judge(self):
        if self in self.ENE[:] :
            self.ENE.remove(self)
        for ctry in self.ENE[:]:
            if ctry.ALIVE==0:
                self.ENE.remove(ctry)                

    def alive_judge(self):
        if self.ALIVE==1 and  self.POP<=0 :
            self.POP=0
            self.ALIVE=0
            print (self.FTR+'defeat')
            

    def nor_ATK(self):
        if self.ATK<=0 :
            self.ATK=0
relation={
    0:[0,0,0,0,0,0],
    1:[0,0,0,0,0,0],
    2:[0,0,0,0,0,0],
    3:[0,0,0,0,0,0],
    4:[0,0,0,0,0,0],
    5:[0,0,0,0,0,0]
}


#初始化
guo1=guo(0,'CN',5000,200,0,1.0,[])
guo2=guo(1,'US',5000,200,0,1.0,[])
guo3=guo(2,'JA',5000,200,0,1.0,[])
guo4=guo(3,'EN',5000,200,0,1.0,[])
guo5=guo(4,'DE',5000,200,0,1.0,[])
guo6=guo(5,'IN',5000,200,0,1.0,[])



# ene 初始化
for x in [guo1,guo2,guo3,guo4,guo5,guo6]:
    aaa=random.choice([guo1,guo2,guo3,guo4,guo5,guo6])
    if aaa !=x and aaa.ALIVE==1:
        x.ENE.append(aaa)
        x.ENE_judge()
    

            
            
for x in [guo1,guo2,guo3,guo4,guo5,guo6]:

    if x.ENE !=[]:
        for y in x.ENE:
            if x not in y.ENE:
                y.ENE.append(x)
                
                
for x in [guo1,guo2,guo3,guo4,guo5,guo6]:
    print  (x)
    print  (x.ENE)
    if x.ENE !=[]:
        for j in range(len(x.ENE)):
            relation[x.ID][x.ENE[j].ID]=relation[x.ID][x.ENE[j].ID]-50

#执行这个,核心
turn=0
while turn <=9:
    #turn start
    #grow pop gold 
    turn+=1
    listguo=[guo1,guo2,guo3,guo4,guo5,guo6]
    #增长人口
    for x in [guo1,guo2,guo3,guo4,guo5,guo6]:
        if x.ALIVE==1:
            x.GOLD=x.GOLD+int(x.POP*x.INDUS)
            x.POP=x.POP+random.randint(1,5)*100

        #发展ECO或者ATK
        if x.GOLD>1000 and x.ALIVE==1:
            xishu=x.GOLD//1000

            x.GOLD=x.GOLD-1000*xishu
            while xishu>0:
                xishu=xishu-1
                if random.randint(1,10)>=5:
                    if random.randint(1,10)>=5:
                        x.INDUS=x.INDUS+0.01

                else:
                    if random.randint(1,10)>=5:
                        x.ATK=x.ATK+100               


    #与非负关系通商
    for i in relation.keys():

        for j in range(6):
            if listguo[i].ALIVE==0 or  listguo[j].ALIVE==0:
                pass
            elif i!=j:
                if relation[i][j]>=0:
                    relation[i][j]=relation[i][j]+5
                    if listguo[i].INDUS>=listguo[j].INDUS:
                        listguo[i].GOLD=listguo[i].GOLD+500
                    else:
                        listguo[i].GOLD=listguo[i].GOLD+200
                elif relation[i][j]<0:
                    #war
                    if listguo[j].ALIVE !=0 and listguo[i].ATK>0:
                        gjl=listguo[i].ATK-listguo[j].ATK
                        if gjl>0:
                            listguo[i].ATK=listguo[i].ATK-listguo[j].ATK
                            listguo[j].ATK=0
                            listguo[j].POP=listguo[j].POP-gjl                               
                        else:
                            listguo[i].ATK=0
                            listguo[i].POP=listguo[i].POP+gjl
                            listguo[j].ATK=listguo[j].ATK-listguo[i].ATK

            listguo[i].alive_judge()
            listguo[j].alive_judge()
    print ('turn'+str(turn))
    for x in [guo1,guo2,guo3,guo4,guo5,guo6]:
        print (x.FTR,x.POP,round(x.INDUS,2),x.GOLD,x.ATK)
    time.sleep(1)
# 包围网

list_ATK=[]
max_num=0

for x in [guo1,guo2,guo3,guo4,guo5,guo6]:
    
    list_ATK.append(x.ATK)
    
for i in range(len(list_ATK)):
    if list_ATK[i]>max_num:
        max_num = list_ATK[i]
        max_index = i
    else:
        min_num = list_ATK[i]
        min_index = i

        
for x in [guo1,guo2,guo3,guo4,guo5,guo6]:
    
    aaa=listguo[max_index]
    if aaa !=x and aaa.ALIVE==1:
        x.ENE.append(aaa)
        x.ENE_judge()
    
            
            
for x in [guo1,guo2,guo3,guo4,guo5,guo6]:

    if x.ENE !=[]:
        for y in x.ENE:
            if x not in y.ENE:
                y.ENE.append(x)
                
                
for x in [guo1,guo2,guo3,guo4,guo5,guo6]:
    print  (x)
    print  (x.ENE)
    if x.ENE !=[]:
        for j in range(len(x.ENE)):
            relation[x.ID][x.ENE[j].ID]=relation[x.ID][x.ENE[j].ID]-100

然后再重复执行倒数第二段代码,直到一个胜利者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值