![見出し画像](https://assets.st-note.com/production/uploads/images/60333647/rectangle_large_type_2_7040daf197e3ebc62ec48a1fae0f1f0c.png?width=1200)
pyxelでシミュレーションゲームを作る(10)
前回まででひとまずゲームを通しでプレイすることはできるようになりました。今回は建築できる施設を追加して、内政でやれることを増やしてみようと思います。
前回のnoteは以下になります。よろしければご参照ください。
特定の条件で建築できる施設が増える仕組みを取り入れます。具体的には建築対象マスの上下左右に何があるかをトリガーとします。
#Main window
elif self.window_ctr == 0:
if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
x = pyxel.mouse_x
y = pyxel.mouse_y
x2 = int(x/8)
y2 = int(y/8)
v = pyxel.tilemap(0).get(x2, y2)
a = 0
b = 0
c = 0
d = 0
if x2 > 0:
a = pyxel.tilemap(0).get(x2-1, y2)
if x2 < 15:
b = pyxel.tilemap(0).get(x2+1, y2)
if y2 > 0:
c = pyxel.tilemap(0).get(x2, y2-1)
if y2 < 15:
d = pyxel.tilemap(0).get(x2, y2+1)
self.ex_tgt = a + b + c + d
print(self.ex_tgt)
self.craft.get_pos(x2, y2, v)
if v == 6:
self.window_ctr = 99
#elif v == 10:
# self.window_ctr = 95
# elif v == 17:
# self.window_ctr = 97
else:
self.window_ctr = 1
self.txt_ctr = v
▲メインウィンドウのコードです。マス目をクリックした際に、上下左右のマスの種類をa・b・c・dの変数に格納します。画面端の場合は取得できない場合があるので(左端のマスは左隣りがない等)エラーにならないようにx2、y2の値を見て分岐させます。そしてabcdの合計をself.ex_tgtに格納します。
#Craft window2
elif self.window_ctr == 2:
pyxel.rect(0, 50, 128, 64, 0)
pyxel.rectb(0, 50, 128, 64, 7)
#Target = TANBO,MATI,BUKEYASIKI,HEITI
if ((self.txt_ctr < 3) or (self.txt_ctr == 5) or
(32 <= self.txt_ctr <= 34)) :
self.update_list = [0,1,2]
if ((self.txt_ctr < 3) or (32 <= self.txt_ctr <= 34)) :
self.update_list.append(80)
elif self.ex_tgt == 256:
self.update_list.append(35)
elif self.ex_tgt == 260:
self.update_list.append(36)
elif self.ex_tgt == 264:
self.update_list.append(37)
elif self.ex_tgt == 128:
self.update_list.append(38)
elif self.ex_tgt == 132:
self.update_list.append(40)
elif self.ex_tgt == 136:
self.update_list.append(39)
l = len(self.update_list)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])]
pyxel.text(90,56+10*i,str(c),7)
#Target = KI
elif ((self.txt_ctr == 3) or (35 <= self.txt_ctr <= 40)
or (64 <= self.txt_ctr <= 66)) :
self.update_list = [5]
l = len(self.update_list)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])]
pyxel.text(90,56+10*i,str(c),7)
#Target = JIYOUNAI
elif self.txt_ctr == 8 :
self.update_list = [17,18,19,20,]
if self.samurai == 1:
self.update_list.remove(17)
if self.gaiko == 1:
self.update_list.remove(18)
if self.ninjya == 1:
self.update_list.remove(19)
if self.syonin == 1:
self.update_list.remove(20)
l = len(self.update_list)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])]
pyxel.text(105,56+10*i,str(c),7)
#Target = Jyomon
elif self.txt_ctr == 10:
self.update_list = [171,172,173]
l = len(self.update_list)
pyxel.rect(0, 35, 128, 16, 0)
pyxel.rectb(0, 35, 128, 16, 7)
self.Draw_fonts(self.text_list["170"], 10, 40)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])]
pyxel.text(105,56+10*i,str(c),7)
#Target = Samuraidaisyo
elif self.txt_ctr == 17:
self.update_list = [1271, 1272]
l = len(self.update_list)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])] * int((self.rend \
+self.gankyo)/2)
pyxel.text(105,56+10*i,str(c),7)
#Target = GAIKOKAN
elif self.txt_ctr == 18:
self.update_list = [133, 1331]
l = len(self.update_list)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])]
pyxel.text(105,56+10*i,str(c),7)
#Target = Ninja
elif self.txt_ctr == 19:
self.update_list = [150, 151, 152, 153]
l = len(self.update_list)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])]
pyxel.text(105,56+10*i,str(c),7)
#Target = Shounin
elif self.txt_ctr == 20:
self.update_list = [140,141,142,143]
l = len(self.update_list)
for i in range(l):
self.Draw_fonts(self.text_list[str(self.update_list[i])],
12, 56+10*i)
c = self.costs[str(self.update_list[i])]
pyxel.text(105,56+10*i,str(c),7)
self.Draw_fonts(self.text_list["1400"],
82, 56+10*i)
pyxel.rect(0, 100, 64, 14, 0)
pyxel.rectb(0, 100, 64, 14, 7)
pyxel.rect(64, 100, 64, 14, 0)
pyxel.rectb(64, 100, 64, 14, 7)
self.Draw_fonts(self.text_list["102"], 5, 103)
self.Draw_fonts(self.text_list["101"], 69, 103)
s = self.update_list.index(self.update_tgt)
pyxel.circb(5, 59+10*s, 2, 7)
▲建築ウィンドウの描画部分のコードです。self.ex_tgtが特定の値になった場合は建築候補に追加を行います。例えばself.ex_tgtが256の場合はself.update_list.append(35)で35番目の施設を建築候補に追加します。
▲上下左右がレベル3の田んぼの場合は…。
▲米倉が建築できます。
▲こんな感じ。米倉が建設できました。
▲色々施設を増やしてみました。田んぼ・町・武家屋敷の上位施設として米倉・鍛冶場・道場を作成。また、レベル2の施設に囲まれた平地には神社・寺・教会を建築できます。まだ使いどころはないですが、合戦時に何らかの効果を発揮する「運」のような形にしていこうと思います。
今回はここまで。ソースやモジュールファイル等はGitHubにあります。
ここまでご覧いただきありがとうございました。
ここまで読んでいただきありがとうございます!