Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.80 KB | None | 0 0
  1. import xml.etree.ElementTree as ET
  2. import xml.dom.minidom as md
  3. import re
  4. import csv
  5.  
  6. # XMLファイルを解析
  7. tree = ET.parse(r'D:\DATA2\game\Bataille\Bataille_set\VASSAL\Z_base\BaseS_V2R6ext\buildFile')
  8. # ツリーを取得
  9. root = tree.getroot()
  10. #要素を文字列に変換
  11. strxml=ET.tostring(root, 'utf-8').decode()
  12.  
  13. #トレイ共通部セット
  14. Tray_header=['']*4
  15. Tray_header[0]=' <VASSAL.build.module.Map allowMultiple="false" backgroundcolor="255,255,204" buttonName="'
  16. Tray_header[1]='" changeFormat="$message$" color="0,0,0" createFormat="$pieceName$ created in $location$" edgeHeight="0" edgeWidth="0" hotkey="" icon="" launch="true" mapName="'
  17. Tray_header[2]='" markMoved="Never" markUnmovedIcon="/images/unmoved.gif" markUnmovedText="" markUnmovedTooltip="Mark all pieces on this map as not moved" moveKey="" moveToFormat="$pieceName$ moves $previousLocation$ -> $location$ *" moveWithinFormat="$pieceName$ moves $previousLocation$ -> $location$ *" thickness="3">\n <VASSAL.build.module.map.BoardPicker addColumnText="Add column" addRowText="Add row" boardPrompt="Select board" slotHeight="125" slotScale="0.2" slotWidth="450" title="Choose Boards">\n <setup>'
  18. Tray_header[3]='BoardPicker tray 0 0</setup>\n <VASSAL.build.module.map.boardPicker.Board height="600" name="tray" reversible="false" width="1900"/>\n </VASSAL.build.module.map.BoardPicker>\n <VASSAL.build.module.map.StackMetrics bottom="40,0" disabled="false" down="37,0" exSepX="10" exSepY="10" top="38,0" unexSepX="4" unexSepY="4" up="39,0"/>\n <VASSAL.build.module.map.ForwardToKeyBuffer/>\n <VASSAL.build.module.map.Scroller/>\n <VASSAL.build.module.map.ForwardToChatter/>\n <VASSAL.build.module.map.MenuDisplayer/>\n <VASSAL.build.module.map.MapCenterer/>\n <VASSAL.build.module.map.StackExpander/>\n <VASSAL.build.module.map.PieceMover/>\n <VASSAL.build.module.map.KeyBufferer/>\n <VASSAL.build.module.map.ImageSaver buttonText="" hotkey="" icon="/images/camera.gif" tooltip="Save Map as PNG image"/>\n <VASSAL.build.module.map.CounterDetailViewer borderWidth="0" counterReportFormat="" delay="700" display="from top-most layer only" emptyHexReportForma="$LocationName$" fgColor="0,0,0" fontSize="9" graphicsZoom="1.0" hotkey="32,130" layerList="" minDisplayPieces="2" propertyFilter="" showDeck="false" showMoveSelectde="false" showNoStack="false" showNonMovable="false" showgraph="true" showgraphsingle="false" showtext="false" showtextsingle="false" summaryReportFormat="$LocationName$" unrotatePieces="false" version="" zoomlevel="1.0"/>\n <VASSAL.build.module.properties.GlobalProperties/>\n <VASSAL.build.module.map.SelectionHighlighters/>\n <VASSAL.build.module.map.HighlightLastMoved color="255,0,0" enabled="true" thickness="2"/>\n'
  19.  
  20. #デッキ共通部セット
  21. Deck_header=['']*3
  22. Deck_header[0]=' <VASSAL.build.module.map.DrawPile allowMultiple="false" allowSelect="true" canSave="false" color="0,0,0" countExpressions="" draw="false" drawFaceUp="true" emptyHotkey="" expressionCounting="false" faceDown="Never" faceDownFormat="" height="60" hotkeyOnEmpty="false" maxStack="12" name="'
  23. Deck_header[1]='" owningBoard="tray" reshufflable="false" reshuffleCommand="" reshuffleHotkey="" reshuffleMessage="" reshuffleTarget="" restrictExpression="" restrictOption="false" reverseCommand="Reverse" reverseFormat="" reverseHotkey="" reversible="false" selectDisplayProperty="$BasicName$" selectSortProperty="" shuffle="Never" shuffleCommand="Shuffle" shuffleFormat="" shuffleHotkey="" width="120" '
  24.  
  25. #カード共通部セット
  26. Card_header=['']*1
  27. Card_header[0]=' <VASSAL.build.widget.CardSlot entryName="'
  28. #歩兵、騎兵
  29. Card_header_InfCav=['']*8
  30. Card_header_InfCav[0]=Card_header[0]
  31. Card_header_InfCav[1]='" height="0" width="0">+/null/propertysheet;0Fire~0Melee~0Morale~0Range\/Lancer;Class Properties;;0;;;;67,130 propertysheet;0Strength~0Status;Properties;;0;;;;80,130\ markmoved;moved;56;0;Mark Moved;77,130\\\\ rotate;24;93,130;91,130;Rotate CW;Rotate CCW;;;\\\\\\ '
  32. Card_header_InfCav[2]='emb2;Activate;2;;;2;;;2;;;;1;false;0;0;' #裏画像付き
  33. Card_header_InfCav[3]='.jpg;;true;SK;;;false;;1;1;false;70,130;;\\\\\\\\ ' #裏画像付き
  34. Card_header_InfCav[4]='piece;;;'
  35. Card_header_InfCav[5]='\ false\\\\ 0\\\\\\ '
  36. Card_header_InfCav[6]='-1\\\\\\\\ ' #裏画像付き
  37. Card_header_InfCav[7]='null;0;0;'
  38.  
  39. #砲兵
  40. Card_header_Art=['']*4
  41. Card_header_Art[0]=Card_header[0]
  42. Card_header_Art[1]='" height="0" width="0">+/null/propertysheet;0Strength~0Status;Properties;;0;;;;80,130 markmoved;moved;56;0;Mark Moved;77,130\\ rotate;24;93,130;91,130;Rotate CW;Rotate CCW;;;\\\\ emb2;Activate;2;;;2;;;2;;;;1;false;0;0;'
  43. Card_header_Art[2]='.jpg;;true;BI;;;false;;1;1;false;70,130;;\\\\\\ piece;;;'
  44. Card_header_Art[3]=' false\\ 0\\\\ -1\\\\\\ null;0;0;'
  45.  
  46. #指揮官
  47. Card_header_Cmd=['']*3
  48. Card_header_Cmd[0]=Card_header[0]
  49. Card_header_Cmd[1]='" height="0" width="0">+/null/propertysheet;0Inf Bonus A\/D~0Cav Bonus~0Art Bous~0Morale Bonus;Class Properties;;0;;;;67,130 markmoved;moved;56;0;Mark Moved;77,130\ rotate;24;93,130;91,130;Rotate CW;Rotate CCW;;;\\\\ piece;;;'
  50. Card_header_Cmd[2]=' false\\ 0\\\\ null;0;0;'
  51.  
  52. #終了部
  53. Card_footer='</VASSAL.build.widget.CardSlot>\n'
  54. Deck_footer=' </VASSAL.build.module.map.DrawPile>\n'
  55. Tray_footer=' </VASSAL.build.module.Map>\n'
  56. File_footer='</VASSAL.launch.BasicModule>'
  57.  
  58. #ファイルの終了を一旦削除
  59. strxml_first=re.sub(File_footer,"",strxml)
  60.  
  61. #基本情報ファイルを読み込む
  62. read_file=open(r'D:\WORK\temp\BatailleWK\UnitInfo.csv')
  63. reader= csv.reader(read_file)
  64. read_data=list(reader)
  65. #read_num=[len(v) for v in read_data]
  66. read_file.close()
  67.  
  68. #トレイ名称設定
  69. Tray_name='Tray_test'
  70.  
  71. #Tray追加
  72. strxml_new=strxml_first+Tray_header[0]+Tray_name+Tray_header[1]+Tray_name+Tray_header[2]+Tray_name+Tray_header[3]
  73.  
  74. #初期設定
  75. Deck_xmax=2 #左記はテスト用で正式は7
  76. Deck_xdist=140
  77. Deck_ydist=140
  78. Deck_xstart=70
  79. Deck_ystart=100
  80. gpid=2000
  81.  
  82. end_line=int(read_data[0][10])-1
  83. Deck_xnum=0
  84. Deck_ynum=0
  85. Deck_nameold=""
  86. Deck_start='No'
  87.  
  88. for i in range(1,end_line):
  89. Deck_name=read_data[i][8]
  90. if Deck_name !=Deck_nameold :
  91. if Deck_start=='Yes':
  92. strxml_new=strxml_new+Deck_footer #Deck終了
  93. Deck_nameold=Deck_name
  94. Deck_x=Deck_xstart + Deck_xdist*Deck_xnum
  95. Deck_y=Deck_ystart + Deck_ydist*Deck_ynum
  96. Deck_header[2]='x="'+str(Deck_x)+'" y="'+str(Deck_y)+'">\n'
  97. #Deck追加
  98. strxml_new=strxml_new+Deck_header[0]+Deck_name+Deck_header[1]+Deck_header[2]
  99. Deck_start='Yes'
  100.  
  101. Deck_xnum+=1
  102. if Deck_xnum>=Deck_xmax:
  103. Deck_xnum=0
  104. Deck_ynum+=1
  105.  
  106. unit_name=read_data[i][0]
  107. unit_name2=re.sub('/',"\/",unit_name) #部隊名称で1/LRなど"/"の文字が入る場合の対策。これがないとVASSALでエラーになる。
  108. fire_value=read_data[i][1]
  109. melee_value=read_data[i][2]
  110. morale_value=read_data[i][3]
  111. range_value=read_data[i][4]
  112. uinit_strength=read_data[i][5]
  113. unit_imageF=read_data[i][6]
  114. unit_imageB=read_data[i][7]
  115. unit_type=read_data[i][9]
  116.  
  117. #Card編集
  118. Card_val_1=unit_name+'" gpid="'+str(gpid)
  119. gpid+=1
  120.  
  121. if unit_type=='4inf' or unit_type=='3cav': #歩兵、騎兵の場合
  122. Card_unite=Card_header_InfCav[0]+Card_val_1+Card_header_InfCav[1]
  123. if unit_imageB!='': #裏画像あり
  124. Card_unite=Card_unite+Card_header_InfCav[2]+unit_imageB+Card_header_InfCav[3]
  125. Card_unite=Card_unite+Card_header_InfCav[4]+unit_imageF+'.jpg;'+unit_name2
  126. Card_unite=Card_unite+'/'+fire_value+'~'+melee_value+'~'+morale_value+'~'+range_value+' '+uinit_strength+'~'+Card_header_InfCav[5]
  127. if unit_imageB!='': #裏画像あり
  128. Card_unite=Card_unite+Card_header_InfCav[6]
  129. Card_unite=Card_unite+Card_header_InfCav[7]+str(gpid)+Card_footer
  130. elif unit_type=='2art': #砲兵の場合
  131. Card_unite=Card_header_Art[0]+Card_val_1+Card_header_Art[1]+unit_imageB+Card_header_Art[2]+unit_imageF+'.jpg;'+unit_name2
  132. Card_unite=Card_unite+'/'+uinit_strength+'~'+Card_header_Art[3]+str(gpid)+Card_footer
  133. elif unit_type=='1cmd': #指揮官の場合
  134. Card_unite=Card_header_Cmd[0]+Card_val_1+Card_header_Cmd[1]+unit_imageF+'.jpg;'+unit_name2
  135. Card_unite=Card_unite+'/'+fire_value+'~'+melee_value+'~'+morale_value+'~'+range_value+Card_header_Cmd[2]+str(gpid)+Card_footer
  136.  
  137. #Card追加
  138. strxml_new=strxml_new+Card_unite
  139.  
  140. #データ終了
  141. strxml_new=strxml_new+Deck_footer+Tray_footer+File_footer
  142.  
  143. #文字列を要素に戻す
  144. element_new=ET.fromstring(strxml_new)
  145. tree_new = ET.ElementTree(element_new)
  146.  
  147. #ファイル出力
  148. tree_new.write(r'D:\DATA2\game\Bataille\Bataille_set\VASSAL\Z_base\BaseS_V2R6ext\buildFile', encoding="UTF-8", xml_declaration=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement