Skip to content

Commit 038ed24

Browse files
committed
WIP: Major revision for the game
1 parent a51d43c commit 038ed24

27 files changed

+3123
-196
lines changed

convert.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import os
2+
import re
3+
4+
def replace_paths_in_file(file_path):
5+
# Regular expression to match the file paths in the format r'xxx\yyy'
6+
path_pattern = re.compile(r"r'([^']+)'")
7+
8+
with open(file_path, 'r', encoding='utf-8') as file:
9+
content = file.read()
10+
11+
# Find all matches of the pattern
12+
paths = path_pattern.findall(content)
13+
14+
if not paths:
15+
return
16+
17+
# Add import os if not already present
18+
if 'import os' not in content:
19+
content = 'import os\n' + content
20+
21+
# Replace each found path with os.path.join format
22+
for path in paths:
23+
# Replace backslashes and slashes with commas and double quotes
24+
path_parts = re.split(r'[\\/]', path)
25+
joined_path = 'os.path.join({})'.format(', '.join(['"{}"'.format(part) for part in path_parts]))
26+
# Replace the original raw string path with the new joined path
27+
content = content.replace(f"r'{path}'", joined_path)
28+
29+
# Write the updated content back to the file
30+
with open(file_path, 'w', encoding='utf-8') as file:
31+
file.write(content)
32+
33+
def process_directory(directory):
34+
for root, _, files in os.walk(directory):
35+
for file in files:
36+
if file.endswith('.py'):
37+
file_path = os.path.join(root, file)
38+
replace_paths_in_file(file_path)
39+
40+
# Specify the directory to process
41+
directory_to_process = './loop_module/'
42+
43+
process_directory(directory_to_process)

data/keyshortcuts.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"up": 273, "down": 274, "lf": 276, "rt": 275, "topl": 113, "topr": 119, "btl": 97, "btr": 115, "etr": 13, "esc": 27, "map": 109, "cursor": 99, "bag": 9, "me": 98, "wand": 49, "bow": 50, "save": 48}
1+
{"up": 119, "down": 115, "lf": 97, "rt": 100, "topl": 105, "topr": 107, "btl": 106, "btr": 108, "etr": 32, "esc": 27, "map": 109, "cursor": 99, "bag": 9, "me": 98, "wand": 49, "bow": 50, "save": 48}

equipment/equip.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
#!/usr/bin/env python3
23
#-*-coding:utf-8-*-
34

@@ -11,7 +12,7 @@
1112
class FloorEquipManage:
1213
def __init__(self, surface):
1314
self.All = MySprite()
14-
self.All.load(r'asset\process1.png', 0, 0, 32, 32, 16)
15+
self.All.load(os.path.join("asset", "process1.png"), 0, 0, 32, 32, 16)
1516
self.level=[[-1 for i in range(42)] for j in range(64)]
1617
self.pool={}
1718
self.ptr=None #传入ptr,需要和人物的背包联系
@@ -27,7 +28,7 @@ def __init__(self, surface):
2728
self.eq.getInfo()
2829
self.ect=EnchantItem()
2930

30-
with open(r'equipment\equipment.json', 'r') as read: #创建测试时可以生成的武器列表
31+
with open(os.path.join("equipment", "equipment.json")) as read: #创建测试时可以生成的武器列表
3132
tem=json.load(read)
3233
self.create=[int(k) for k in tem.keys()]
3334
self.gnrt_dct={int(k):v[8] for k,v in tem.items()} #生成一个字典,内容是key为物品ID, value为物品生成等级
@@ -306,7 +307,7 @@ def __init__(self, ID=0, x=0, y=0):
306307
12: 'This will blind your eyes, makes it more vulnerable to the dark.'}
307308

308309
def getInfo(self):
309-
with open(r'equipment\equipment.json', 'r') as read:
310+
with open(os.path.join("equipment", "equipment.json")) as read:
310311
self.items=json.load(read)
311312

312313
def loadAttri(self, item, prefix=[]): #从文档中获取对应装备的信息
@@ -401,11 +402,11 @@ def getDesc(self): #生成对应的描述
401402
def formName(self): #生成带词缀的名字
402403
if not self.name_set and self.lvl<=5:
403404
self.name_set=True
404-
with open(r'data\attributes.json', 'r') as read:
405+
with open(os.path.join("data", "attributes.json")) as read:
405406
tem=json.load(read)
406407
self.name=self.basic_name
407408
for i in self.prefix:
408-
self.name=tem[str(i)][0]+' '+self.name
409+
self.name=f'{tem[str(i)][0]} {self.name}'
409410
self.priceMultiplier(tem)
410411
else:
411412
self.price=int(self.price*1.5)
@@ -460,7 +461,7 @@ def __init__(self, ID, x=0, y=0):
460461
self.attr=[]
461462

462463
def setUpAttri(self): #附魔时,所有属性对应加上
463-
with open(r'data\attributes.json', 'r') as read:
464+
with open(os.path.join("data", "attributes.json"), 'r') as read:
464465
tem=json.load(read)
465466
for i in self.prefix:
466467
self.atk+=tem[str(i)][1]
@@ -471,7 +472,7 @@ def setUpAttri(self): #附魔时,所有属性对应加上
471472
self.weight*=2
472473

473474
def deSetAttri(self): #退魔时,所有属性对照减去
474-
with open(r'data\attributes.json', 'r') as read:
475+
with open(os.path.join("data", "attributes.json"), 'r') as read:
475476
tem=json.load(read)
476477
for i in self.prefix:
477478
self.atk-=tem[str(i)][1]

equipment/equipment-old.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

equipment/equipment.json

Lines changed: 2918 additions & 1 deletion
Large diffs are not rendered by default.

loop_module/Startup.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
#!/usr/bin/env python3
23
#-*-coding:utf-8-*-
34

@@ -10,9 +11,9 @@
1011
class Face:
1112
def __init__(self, screen):
1213
path=random.choice([0, 1])
13-
if path: self.bk1 = pygame.image.load(r'asset\ethians1.jpg').convert()
14-
else: self.bk1=pygame.image.load(r'asset\ethians2.jpg').convert()
15-
self.author=pygame.image.load(r'asset\author.png').convert()
14+
if path: self.bk1 = pygame.image.load(os.path.join("asset", "ethians1.jpg")).convert()
15+
else: self.bk1=pygame.image.load(os.path.join("asset", "ethians2.jpg")).convert()
16+
self.author=pygame.image.load(os.path.join("asset", "author.png")).convert()
1617
self.screen=screen
1718
self.surface = pygame.Surface((1200, 650))
1819
self.surface.fill((0, 0, 0))

loop_module/loop10.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
#!/usr/bin/env python3
23
#-*-coding:utf-8-*-
34

@@ -8,37 +9,37 @@
89
class PlayerGui:
910
def __init__(self, surface, ptr):
1011
self.screen=surface
11-
self.font1=pygame.font.Font(r'asset\fonts\verdana.ttf', 20)
12-
self.font2=pygame.font.Font(r'asset\fonts\verdana.ttf', 15)
12+
self.font1=pygame.font.Font(os.path.join("asset", "fonts", "verdana.ttf"), 20)
13+
self.font2=pygame.font.Font(os.path.join("asset", "fonts", "verdana.ttf"), 15)
1314
self.mob=MySprite()
14-
self.mob.load(r'asset\mobs.png', 0, 0, 32, 32, 10)
15+
self.mob.load(os.path.join("asset", "mobs.png"), 0, 0, 32, 32, 10)
1516
self.mob_name={}
1617
"""============按钮有关属性============="""
1718
self.btn=MySprite()
18-
self.btn.load(r'asset\buttons_2.png', 0, 0, 96, 50, 1)
19+
self.btn.load(os.path.join("asset", "buttons_2.png"), 0, 0, 96, 50, 1)
1920
self.btn.X, self.btn.Y=1000, 80
2021
self.button_word=[self.font1.render('Kills', True, (0,0,0)), self.font1.render('Back', True, (0,0,0))]
2122
self.rect=pygame.Rect((1000, 80, 96, 50))
2223
#====================================
2324
self.header=self.font1.render("Statistics for monsters killed", True, (0,0,0))
2425
self.player=MySprite()
25-
self.player.load(r'asset\player.png', 0, 0, 104, 104, 3)
26+
self.player.load(os.path.join("asset", "player.png"), 0, 0, 104, 104, 3)
2627
self.item=MySprite()
27-
self.item.load(r'asset\items.png', 0, 0, 64, 64, 6)
28+
self.item.load(os.path.join("asset", "items.png"), 0, 0, 64, 64, 6)
2829
self.bg_slot=[]
2930
self.equips=MySprite()
30-
self.equips.load(r'asset\process.png', 0, 0, 64, 64, 16)
31-
d=pygame.image.load(r'asset\warrior.png').convert()
31+
self.equips.load(os.path.join("asset", "process.png"), 0, 0, 64, 64, 16)
32+
d=pygame.image.load(os.path.join("asset", "warrior.png")).convert()
3233
self.bg_slot.append(d)
33-
d=pygame.image.load(r'asset\ranger.png').convert()
34+
d=pygame.image.load(os.path.join("asset", "ranger.png")).convert()
3435
self.bg_slot.append(d)
35-
d=pygame.image.load(r'asset\wizard.png').convert()
36+
d=pygame.image.load(os.path.join("asset", "wizard.png")).convert()
3637
self.bg_slot.append(d)
3738
self.ptr=ptr
3839
self.player_num=self.ptr.career_getter()
39-
with open(r'data/eng_person_des.txt', 'r') as read:
40+
with open(os.path.join("data", "eng_person_des.txt")) as read:
4041
total=json.load(read)
41-
with open(r'data/mob_dir.json','r') as read:
42+
with open(os.path.join("data", "mob_dir.json")) as read:
4243
dct=json.load(read)
4344
for v in dct.values():
4445
self.mob_name[v[7]]=v[8]
@@ -50,7 +51,7 @@ def __init__(self, surface, ptr):
5051
self.texts=[]
5152
self.mode=0 #绘制界面模式标值(0是玩家信息,1是统计信息)
5253
self.killDict={} #杀死怪物统计
53-
self.str_dict={'Left':(708, 320), 'Right':(456, 320), 'Head':(540, 236), 'Armor':(540, 320), 'Leg':(540, 404), 'Necklace':(456, 236),
54+
self.str_dict={'Left':(708, 320), 'Right':(456, 320), 'Head':(540, 236), 'Armoos.path.join(":(540, 320), ")Leg':(540, 404), 'Necklace':(456, 236),
5455
'Ring':(456, 404), 'Feet':(624, 404), 'Wand':(708, 404), 'Cape':(624, 320), 'Amulet':(624, 236), 'Dual':0, 'Book':(708, 236)}
5556

5657
def getInfo(self): #获取信息

loop_module/loop11.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
#-*-coding:utf-8-*-
23
import pygame
34
from src.ezplot import MySprite
@@ -6,15 +7,15 @@ class Monument:
67
def __init__(self, surface):
78
self.screen=surface
89
self.stone=MySprite()
9-
self.stone.load(r'asset\stones.png', 0, 0, 600, 650, 2)
10+
self.stone.load(os.path.join("asset", "stones.png"), 0, 0, 600, 650, 2)
1011
self.inf, self.svt, self.hq=None, None, None
1112
self.mode=0 #0表示墓碑,1表示黄金纪念碑
1213
self.stone.X, self.stone.Y = 300, 0
1314
self.deaths=None
1415
self.heroes=None
1516
self.loopRecord=1
16-
self.font=pygame.font.Font(r'asset\fonts\verdana.ttf', 13)
17-
self.font2=pygame.font.Font(r'asset\fonts\verdana.ttf', 18)
17+
self.font=pygame.font.Font(os.path.join("asset", "fonts", "verdana.ttf"), 13)
18+
self.font2=pygame.font.Font(os.path.join("asset", "fonts", "verdana.ttf"), 18)
1819
self.text=[]
1920
self.text_len=0 #text surface列表的长度
2021
self.deathMap={(4, 7+3*i):i for i in range(11)} #死亡信息保存点

main.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
pygame.display.set_caption('Ethians Alpha 1.0.0')
4646
path=os.path.join('asset', 'fonts', 'verdana.ttf')
4747
font=pygame.font.Font(path, 24)
48-
back=pygame.image.load(r'asset\back.png').convert_alpha() #这是图形遮盖框
49-
map_back=pygame.image.load(r'asset\map_back.png').convert_alpha() #地图编辑器特有图形覆盖框
48+
back=pygame.image.load(os.path.join('asset', 'back.png')).convert_alpha() #这是图形遮盖框
49+
map_back=pygame.image.load(os.path.join('asset', 'map_back.png')).convert_alpha() #地图编辑器特有图形覆盖框
5050
framerate = pygame.time.Clock() #游戏内时钟
5151
ks=keySets(screen, hq.set_loop) #按键设置模块
5252
ks.loadPreference() #载入用户按键偏好设置
@@ -295,10 +295,10 @@ def loop8_quit():
295295
cps.judge=False
296296
qt.loopNum=1
297297
hq.set_loop(6)
298-
elif event.key==K_SPACE: #开发者选项:SPACE键以重新绘制地图
299-
dg.create_map()
300-
pl.reset_pos()
301-
ms.reset_mist()
298+
# elif event.key==K_SPACE: #开发者选项:SPACE键以重新绘制地图
299+
# dg.create_map()
300+
# pl.reset_pos()
301+
# ms.reset_mist()
302302
elif event.key==ks.keyPads['up']:
303303
#pl.key_up([dg, dg.sur, npc, po])
304304
pl.move(0, -1)

src/blittools.py

Lines changed: 36 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,19 @@ def player_hit(self, hits=0, tag=1): #tag是个辅助参数,以免
5757
class Infoimage:
5858
def __init__(self, surface): #绘制怪物信息概览的小玩意
5959
self.screen=surface
60-
self.mob_rect=pygame.image.load(r'asset\mob_back.png').convert()
60+
self.mob_rect=pygame.image.load(os.path.join("asset", "mob_back.png")).convert()
6161
self.hp_rect=None
6262
self.hp_slot=MySprite()
63-
self.hp_slot.load(r'asset\hp_slot.png', 0, 0, 72, 500, 3)
64-
self.exp_slot=pygame.image.load(r'asset\exp_slot.png').convert_alpha()
63+
self.hp_slot.load(os.path.join("asset", "hp_slot.png"), 0, 0, 72, 500, 3)
64+
self.exp_slot=pygame.image.load(os.path.join("asset", "exp_slot.png")).convert_alpha()
6565
self.item=MySprite()
66-
self.item.load(r'asset\process1.png', 0, 0, 32, 32, 16)
66+
self.item.load(os.path.join("asset", "process1.png"), 0, 0, 32, 32, 16)
6767
self.item_detail=MySprite()
68-
self.item_detail.load(r'equipment\process.png', 0, 0, 128, 128, 16)
68+
self.item_detail.load(os.path.join("equipment", "process.png"), 0, 0, 128, 128, 16)
6969
self.mob_detail=MySprite()
70-
self.mob_detail.load(r'asset\mob_demo.png', 0, 0, 128, 128, 10)
70+
self.mob_detail.load(os.path.join("asset", "mob_demo.png"), 0, 0, 128, 128, 10)
7171
self.stats=MySprite() #状态显示
72-
self.stats.load(r'asset\stat.png', 0, 0, 48, 48, 6)
72+
self.stats.load(os.path.join("asset", "stat.png"), 0, 0, 48, 48, 6)
7373
self.ptr=None
7474
self.po, self.inf=None, None
7575
self.origin_hp=0
@@ -218,85 +218,49 @@ def getDetail(self, item):
218218
if item.enchant_lvl==6: text=self.bigf.render(t, True, (148,0,211)) #relic需要紫色的名字
219219
else: text=self.bigf.render(t, True, (0,0,0))
220220
else: text=self.bigf.render(t, True, (0,0,0))
221-
self.texts.append(text)
222-
t=item.describe
223-
text=self.font3.render(t, True, (0,0,0))
224-
self.texts.append(text)
225-
t='Attack: '+str(item.atk)
226-
text=self.font3.render(t, True, (0,0,0))
227-
self.texts.append(text)
228-
t='Defence: '+str(item.defc)
229-
text=self.font3.render(t, True, (0,0,0))
230-
self.texts.append(text)
231-
t='Magic: '+str(item.magic)
232-
text=self.font3.render(t, True, (0,0,0))
233-
self.texts.append(text)
234-
t='Speed: '+str(item.speed)
235-
text=self.font3.render(t, True, (0,0,0))
236-
self.texts.append(text)
237-
t='Weight: '+str(item.weight)+' Price: '+str(item.price)+' g'
238-
text=self.font3.render(t, True, (0,0,0))
239-
self.texts.append(text)
240-
lvl=item.lvl
241-
if lvl != -1:
242-
t='Level: '+str(lvl)
243-
else:
244-
t='Level: NaN'
245-
text=self.font3.render(t, True, (0,0,0))
246-
self.texts.append(text)
247-
t='Generating Level: '+str(item.gnrt_lvl)
248-
text=self.font3.render(t, True, (0,0,0))
249-
self.texts.append(text)
221+
self.texts.extend([
222+
text,
223+
self.font3.render(item.describe, True, (0,0,0)),
224+
self.font3.render(f'Attack: {item.atk}', True, (0,0,0)),
225+
self.font3.render(f'Defence: {item.defc}', True, (0,0,0)),
226+
self.font3.render(f'Magic: {item.magic}', True, (0,0,0)),
227+
self.font3.render(f'Speed: {item.speed}', True, (0,0,0)),
228+
self.font3.render(f'Weight: {item.weight} Price: {item.price} g', True, (0,0,0)),
229+
self.font3.render(f'Level: {item.lvl if item.lvl != -1 else "NaN"}', True, (0,0,0)),
230+
self.font3.render(f'Generating Level: {item.gnrt_lvl}', True, (0,0,0))
231+
])
250232
if item.energy:
251-
t='Energy: '+str(item.energy)+' Number of amount: '+str(item.count)
233+
t=f'Energy: {item.energy} Number of amount: {item.count}'
252234
else:
253-
t='Item has no Energy /Number of amount: '+str(item.count)
254-
text=self.font3.render(t, True, (0,0,0))
255-
self.texts.append(text)
235+
t=f'Item has no Energy /Number of amount: {item.count}'
236+
self.texts.append(self.font3.render(t, True, (0,0,0)))
256237
for i in item.form_desc[:-1-item.form_desc[-1]]: #准备普通装备描述
257-
text=self.font3.render(i, True, (0,0,0))
258-
self.texts.append(text)
238+
self.texts.append(self.font3.render(i, True, (0,0,0)))
259239
for i in item.form_desc[-item.form_desc[-1] - 1:-1]: # 准备lv6装备的攻击属性描述
260-
text = self.font2.render(i, True, (148, 0, 211))
261-
self.texts.append(text)
240+
self.texts.append(self.font2.render(i, True, (148, 0, 211)))
262241
self.texts.append(item.form_desc[-1])
263242
else:
264243
ID=item.ID
265244
img=self.mob_detail.getImage(ID)
266245
self.texts.append(img)
267-
t=item.name
268-
text=self.bigf.render(t, True, (0,0,0))
269-
self.texts.append(text)
270-
with open(r'data\mob_desc.json', 'r') as read:
246+
self.texts.append(self.bigf.render(item.name, True, (0,0,0)))
247+
with open(os.path.join("data", "mob_desc.json"), 'r') as read:
271248
desc=json.load(read)[str(ID)]
272249
for i in desc:
273-
text=self.font3.render(i, True, (0,0,0))
274-
self.texts.append(text)
275-
t='HP: %2d/%2d'%(item.hp, item.origin_hp)
276-
text=self.font3.render(t, True, (0,0,0))
277-
self.texts.append(text)
278-
t='Attack: '+str(item.attack)
279-
text=self.font3.render(t, True, (0,0,0))
280-
self.texts.append(text)
281-
t='Defence: '+str(item.defence)
282-
text=self.font3.render(t, True, (0,0,0))
283-
self.texts.append(text)
284-
t='Magic: '+str(item.magic)
285-
text=self.font3.render(t, True, (0,0,0))
286-
self.texts.append(text)
287-
t='Speed: '+str(item.speed)
288-
text=self.font3.render(t, True, (0,0,0))
289-
self.texts.append(text)
290-
self.texts+=self.mobDetail(item)
250+
self.texts.append(self.font3.render(i, True, (0,0,0)))
251+
self.texts.extend([
252+
self.font3.render(f'HP: {item.hp:2d}/{item.origin_hp:2d}', True, (0,0,0)),
253+
self.font3.render(f'Attack: {item.attack}', True, (0,0,0)),
254+
self.font3.render(f'Defence: {item.defence}', True, (0,0,0)),
255+
self.font3.render(f'Magic: {item.magic}', True, (0,0,0)),
256+
self.font3.render(f'Speed: {item.speed}', True, (0,0,0))
257+
])
258+
self.texts.extend(self.mobDetail(item))
291259

292260
def mobDetail(self, mob):
293261
extra=[]
294-
if mob.servant:
295-
t = "Friendly"
296-
text = self.bigf.render(t, True, (0, 100, 0))
297-
else:
298-
t="Hostile"
299-
text = self.bigf.render(t, True, (100, 0, 0))
262+
text = self.bigf.render("Friendly", True, (0, 100, 0)) if mob.servant else \
263+
self.bigf.render("Hostile", True, (100, 0, 0))
300264
extra.append(text)
301265
text = self.font3.render(self.mobIntel[mob.intelligent], True, (0, 0, 0)) #获取怪物能力信息
302266
extra.append(text)

0 commit comments

Comments
 (0)