![見出し画像](https://assets.st-note.com/production/uploads/images/45678728/rectangle_large_type_2_bd97deaec7cd9304e939d1705007feb9.png?width=1200)
pyxelでシミュレーションゲームを作る(4-2)
前回は外交ウィンドウの途中まで書きましたので、今回はその続きになります。
前回のnoteは以下になります。よろしければご参照ください。
さて、今回は実際の交渉の場となる部分を記載していきます。見た目としては以下のようなウィンドウが作られます。
▲断り続けていると口調が強くなります。明らかに信長がイライラしてますが、今のところは特にデメリットはありません。
このウィンドウは102番の番号が振られています。コードを見ていきます。
#Gaiko2
elif self.window_ctr == 102:
if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
x = pyxel.mouse_x
y = pyxel.mouse_y
l = len(self.answer_list)
for i in range(l):
if ((0 < x < 64) and (73+i*10 < y < 83+i*10)):
self.answer_tgt = self.answer_list[i]
if ((64 < x < 128) and (114 < y < 128)):
self.window_ctr = 103
#Daimyo1
if self.daimyo_flug == 1:
if self.msg_num == 1:
if self.answer_tgt == 116:
h = int(self.kome*0.2)
if h > 0:
self.daimyo1.yuko += 10
self.daimyo2.yuko -= 2
self.kome -= h
self.daimyo1.kome += h
if self.kome <= 0:
self.kome = 0
elif self.answer_tgt == 117:
self.daimyo1.yuko -= 5
elif self.msg_num == 2:
if self.answer_tgt == 116:
h = int(self.sikin*0.2)
if h > 0:
self.daimyo1.yuko += 10
self.daimyo2.yuko -= 2
self.sikin -= h
self.daimyo1.sikin += h
if self.sikin <= 0:
self.sikin = 0
elif self.answer_tgt == 117:
self.daimyo1.yuko -= 5
elif self.msg_num == 3:
if self.answer_tgt == 116:
h = int(self.heisi*0.2)
if h > 0:
self.daimyo1.yuko += 10
self.daimyo2.yuko -= 2
self.heisi -= h
self.daimyo1.heisi += h
if self.heisi <= 0:
self.heisi = 0
elif self.answer_tgt == 117:
self.daimyo1.yuko -= 5
#Daimyo2
elif self.daimyo_flug == 2:
if self.msg_num == 1:
if self.answer_tgt == 116:
h = int(self.kome*0.2)
if h > 0:
self.daimyo2.yuko += 10
self.daimyo1.yuko -= 2
self.kome -= h
self.daimyo2.kome += h
if self.kome <= 0:
self.kome = 0
elif self.answer_tgt == 117:
self.daimyo2.yuko -= 5
elif self.msg_num == 2:
if self.answer_tgt == 116:
h = int(self.sikin*0.2)
if h > 0:
self.daimyo2.yuko += 10
self.daimyo1.yuko -= 2
self.sikin -= h
self.daimyo2.sikin += h
if self.sikin <= 0:
self.sikin = 0
elif self.answer_tgt == 117:
self.daimyo2.yuko -= 5
elif self.msg_num == 3:
if self.answer_tgt == 116:
h = int(self.heisi*0.2)
if h > 0:
self.daimyo2.yuko += 10
self.daimyo1.yuko -= 2
self.heisi -= h
self.daimyo2.heisi += h
if self.heisi <= 0:
self.heisi = 0
elif self.answer_tgt == 117:
self.daimyo2.yuko -= 5
▲update関数内の102番ウィンドウに関するコードです。
建築ウィンドウと同じ仕組みで返答を選択できるようにしています。
for i in range(l):
if ((0 < x < 64) and (73+i*10 < y < 83+i*10)):
self.answer_tgt = self.answer_list[i]
▲返答の選択部分です。answer_tgtに選択した返答の番号が入ります。今回は「しょうだく」が116番、「きょひ」が117番になっています。
その後、各大名ごとに分岐して、返答に応じた動きをします。基本的には同じような処理が繰り返されているので、一部を抜粋して記載します。
if self.daimyo_flug == 1:
if self.msg_num == 1:
if self.answer_tgt == 116:
h = int(self.kome*0.2)
if h > 0:
self.daimyo1.yuko += 10
self.daimyo2.yuko -= 2
self.kome -= h
self.daimyo1.kome += h
if self.kome <= 0:
self.kome = 0
elif self.answer_tgt == 117:
self.daimyo1.yuko -= 5
▲daimyo_flugが1、つまり信長の場合の処理です。msg_numが1なので、これは「兵糧の提供依頼」のイベントになります。
answer_tgtに入っている数字によって分岐します。116は「承諾」なので、プレイヤーの米の20%を渡し、友好度を10上げます。
ちなみに、米が0の場合にも「承諾」は選べますが、友好度は上がらないようにしています。
このような処理が、今回は「米・資金・兵士」と3種類の提供依頼イベントがあるので3つ、そして大名は信長と義元の2人いるので×2で6つの分岐に分かれて存在しています。
#Gaiko2
elif self.window_ctr == 102:
pyxel.bltm(0,0,0,240,0,16,16)
pyxel.rect(0, 114, 64, 14, 0)
pyxel.rectb(0, 114, 64, 14, 7)
pyxel.rect(64, 114, 64, 14, 0)
pyxel.rectb(64, 114, 64, 14, 7)
if self.daimyo_flug == 1:
sei = self.daimyo1.sei
mei = self.daimyo1.mei
self.Draw_fonts(mei, 85, 52)
pyxel.blt(81,7,2,0,208,40,32,2)
#Msg
if self.msg_num == 1:
if self.daimyo1.yuko >= 80:
self.Draw_fonts(self.daimyo1.msg["0-1"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-1"], 10, 40)
elif self.daimyo1.yuko <= 20:
self.Draw_fonts(self.daimyo1.msg["0-3"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-3"], 10, 40)
else:
self.Draw_fonts(self.daimyo1.msg["0-2"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-2"], 10, 40)
self.Draw_fonts(self.daimyo1.msg["1-1"], 10, 20)
self.Draw_fonts(self.daimyo1.msg["2"], 10, 30)
elif self.msg_num == 2:
if self.daimyo1.yuko >= 80:
self.Draw_fonts(self.daimyo1.msg["0-1"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-1"], 10, 40)
elif self.daimyo1.yuko <= 20:
self.Draw_fonts(self.daimyo1.msg["0-3"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-3"], 10, 40)
else:
self.Draw_fonts(self.daimyo1.msg["0-2"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-2"], 10, 40)
self.Draw_fonts(self.daimyo1.msg["1-2"], 10, 20)
self.Draw_fonts(self.daimyo1.msg["2"], 10, 30)
elif self.msg_num == 3:
if self.daimyo1.yuko >= 80:
self.Draw_fonts(self.daimyo1.msg["0-1"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-1"], 10, 40)
elif self.daimyo1.yuko <= 20:
self.Draw_fonts(self.daimyo1.msg["0-3"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-3"], 10, 40)
else:
self.Draw_fonts(self.daimyo1.msg["0-2"], 10, 10)
self.Draw_fonts(self.daimyo1.msg["3-2"], 10, 40)
self.Draw_fonts(self.daimyo1.msg["1-3"], 10, 20)
self.Draw_fonts(self.daimyo1.msg["2"], 10, 30)
elif self.daimyo_flug == 2:
sei = self.daimyo2.sei
mei = self.daimyo2.mei
self.Draw_fonts(mei, 85, 52)
pyxel.blt(81,7,2,40,208,40,32,2)
#Msg
if self.msg_num == 1:
if self.daimyo2.yuko >= 80:
self.Draw_fonts(self.daimyo2.msg["0-1"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-1"], 10, 40)
elif self.daimyo2.yuko <= 20:
self.Draw_fonts(self.daimyo2.msg["0-3"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-3"], 10, 40)
else:
self.Draw_fonts(self.daimyo2.msg["0-2"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-2"], 10, 40)
self.Draw_fonts(self.daimyo2.msg["1-1"], 10, 20)
self.Draw_fonts(self.daimyo2.msg["2"], 10, 30)
elif self.msg_num == 2:
if self.daimyo2.yuko >= 80:
self.Draw_fonts(self.daimyo2.msg["0-1"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-1"], 10, 40)
elif self.daimyo2.yuko <= 20:
self.Draw_fonts(self.daimyo2.msg["0-3"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-3"], 10, 40)
else:
self.Draw_fonts(self.daimyo2.msg["0-2"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-2"], 10, 40)
self.Draw_fonts(self.daimyo2.msg["1-2"], 10, 20)
self.Draw_fonts(self.daimyo2.msg["2"], 10, 30)
elif self.msg_num == 3:
if self.daimyo2.yuko >= 80:
self.Draw_fonts(self.daimyo2.msg["0-1"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-1"], 10, 40)
elif self.daimyo2.yuko <= 20:
self.Draw_fonts(self.daimyo2.msg["0-3"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-3"], 10, 40)
else:
self.Draw_fonts(self.daimyo2.msg["0-2"], 10, 10)
self.Draw_fonts(self.daimyo2.msg["3-2"], 10, 40)
self.Draw_fonts(self.daimyo2.msg["1-3"], 10, 20)
self.Draw_fonts(self.daimyo2.msg["2"], 10, 30)
#
#Answer
self.answer_list = [116,117]
r = len(self.answer_list)
for a in range(r):
k = str(self.answer_list[a])
self.Draw_fonts(self.text_list[k], 20, 73+(10*a))
#
s = self.answer_list.index(self.answer_tgt)
pyxel.circb(12, 76+10*s, 2, 7)
self.Draw_fonts(self.text_list["118"], 69, 117)
▲draw関数内の102番ウィンドウに関するコードです。やたら長いですが、どの大名か(daimyo_flug)と、どのイベントか(msg_num)、友好度はどれぐらいか(yuko)、によって分岐させて表示メッセージを変えている位で、そのほかには特殊なことはしていません。今回は友好度によって口調が変わるようにしたいので険悪(<= 20)、友好(>= 80)、その他は普通といった感じにしています。
今選んでいる返答の左に丸をつけるのも建築ウィンドウと同じやり方です。
▲友好度によって口調が変化します。友好度が高いと申し訳なさそうにします。
次回はこの画面で「かいとう」をクリックした際に遷移する大名の反応画面を書いて一区切りとしたいと思います。
ここまで読んでいただき、ありがとうございました。
ここまで読んでいただきありがとうございます!