見出し画像

pyxelでシミュレーションゲームを作る(4-3)

外交イベントの作成も今回で一区切りとなります。今回は相手の要求に対して返答した後の画面表示を作って、イベント後にメイン画面に戻れるようにします。また、ゲームに関する情報が増えたので、それに合わせてセーブ・ロード機能も手直しします。

前回のnoteは以下になります。よろしければご参照ください。

前回のnoteで書いた交渉画面で回答を選択した際のウィンドウを作りました。画面遷移は以下のような流れになります。

無題

▲今川義元がキレてます。「東海一の弓取り」と称された彼にかかればこんな弱小勢力は一蹴されてしまうわけですが、今は何も起こりません。拒否してやりましょう。

無題

▲おや、思ったよりも大人な対応。なんか含みがある感じが嫌ですね。

さてさて、この部分のコードは以下のようになっています。

     #Gaiko3
    elif self.window_ctr == 103:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0
                if self.daimyo_flug == 1:
                    self.daimyo1.event_cnt = 0
                    self.daimyo1.event_flug = False
                elif self.daimyo_flug == 2:
                    self.daimyo2.event_cnt = 0
                    self.daimyo2.event_flug = False
                self.daimyo_flug = 0

▲update関数内の103番ウィンドウに関するコードです。この画面まで来たら特に分岐させることもなくなっているので、「りょうかい」を押したときの動きだけ作っています。「りょうかい」を押すと各大名のevent_cntとevent_flugが初期化されます。

     #Gaiko3
    elif self.window_ctr == 103:
        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.answer_tgt == 116:
                self.Draw_fonts(self.daimyo1.msg["4"], 10, 10)   
            else:
                self.Draw_fonts(self.daimyo1.msg["5"], 10, 10)
                self.Draw_fonts(self.daimyo1.msg["6"], 10, 20)   
                self.Draw_fonts(self.daimyo1.msg["7"], 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.answer_tgt == 116:
                self.Draw_fonts(self.daimyo2.msg["4"], 10, 10)   
            else:
                self.Draw_fonts(self.daimyo2.msg["5"], 10, 10)
                self.Draw_fonts(self.daimyo2.msg["6"], 10, 20)   
                self.Draw_fonts(self.daimyo2.msg["7"], 10, 30)   
            #
                
        self.Draw_fonts(self.text_list["107"], 69, 117)

▲draw関数内の103番ウィンドウに関するコードです。ここも単純で、「しょうだく」「きょひ」の2つの返答に対応するメッセージを表示させる処理になります。返答内容はanswer_tgtに入っているので、これを分岐条件に使います。

大名に関する情報が出てきたので、セーブ・ロード機能を改修して、これも保存できるようにします。友好度とか保存できないと意味ないですからね。

 def Save_data(self):
    #Save data
    data2 = []
    for i in range(16):
        data = []
        for i2 in range(16):
            data.append(pyxel.tilemap(0).data[i][i2])
        data2.append(data)
    try:
        with open('DATA/data.csv', 'w', newline="") as f:
                writer = csv.writer(f)
                for i3 in range(16):
                    writer.writerow(data2[i3])
                data3 = []
                data3.append(self.turn)
                data3.append(self.sikin)
                data3.append(self.roryoku)
                data3.append(self.heisi)
                data3.append(self.kome)
                writer.writerow(data3)
                data4 = []
                data4.append(self.daimyo1.kome)
                data4.append(self.daimyo1.sikin)
                data4.append(self.daimyo1.heisi)
                data4.append(self.daimyo1.yuko)
                data4.append(self.daimyo1.event_cnt)
                writer.writerow(data4)
                data5 = []
                data5.append(self.daimyo2.kome)
                data5.append(self.daimyo2.sikin)
                data5.append(self.daimyo2.heisi)
                data5.append(self.daimyo2.yuko)
                data5.append(self.daimyo2.event_cnt)
                writer.writerow(data5)
                self.inf_ctr = 109
    except:
        self.inf_ctr = 112
                
def Load_data(self):
    #Load data
    data = []
    data2 = []
    data3 = []
    try:
        with open('DATA/data.csv') as f:
            reader = csv.reader(f)
            for row in reader:
                data.append(row)
        for i in range(16):
            data2 = []
            for i2 in range(16):
                a = format(int(data[i][i2]), 'x')
                data2.append(str(format(a, '0>3')))
            data3.append(data2)
        for i2 in range(16):
            d = ""
            d = "".join(data3[i2])
            pyxel.tilemap(0).set(0, 0+i2, [d]) 
        self.turn = int(data[16][0])
        self.sikin = int(data[16][1])
        self.roryoku = int(data[16][2])
        self.heisi = int(data[16][3])
        self.kome = int(data[16][4])
        self.daimyo1.kome = int(data[17][0])
        self.daimyo1.sikin = int(data[17][1])
        self.daimyo1.heisi = int(data[17][2])
        self.daimyo1.yuko = int(data[17][3])
        self.daimyo1.event_cnt = int(data[17][4])
        self.daimyo2.kome = int(data[18][0])
        self.daimyo2.sikin = int(data[18][1])
        self.daimyo2.heisi = int(data[18][2])
        self.daimyo2.yuko = int(data[18][3])
        self.daimyo2.event_cnt = int(data[18][4])
        self.inf_ctr = 110
    except:
       self.inf_ctr = 111

▲daimyo1、daimyo2に関するものをセーブ・ロードに組み込みました。これで、各大名の資源や有効度がきちんと引き継がれます。

メインファイルのソースは以下のようになりました。

#main.py

import pyxel
import csv
from random import randint
from module import Fontlist, Text_list, Game_status

class App:
def __init__(self):
    #Font set
    self.font_list = Fontlist.text_j()
    #Text list set
    self.text_list = Text_list.text_get()
    #Costs set
    self.costs = Game_status.costs_get()
    #System status
    self.craft = Craft()
    self.window_ctr = 999
    self.txt_ctr = 0
    self.inf_ctr = 999
    self.update_list = []
    self.update_tgt = 0
    self.turn = 1
    #Player status
    self.kome = 0
    self.sikin = 0
    self.heisi = 0
    self.roryoku = 100
    #Daimyo status
    self.dst1 = Game_status.oda()
    self.daimyo1 = Daimyo(self.dst1["kome"],self.dst1["sikin"],
                               self.dst1["heisi"],self.dst1["sei"],
                               self.dst1["mei"],self.dst1["msg"],0)
    self.dst2 = Game_status.imagawa()
    self.daimyo2 = Daimyo(self.dst2["kome"],self.dst2["sikin"],
                               self.dst2["heisi"],self.dst2["sei"],
                               self.dst2["mei"],self.dst2["msg"],20)
    self.daimyo_flug = 0
    #Gaiko status
    self.answer_list = []
    self.answer_tgt = 0
    self.msg_num = 0
    
    #Base window create
    pyxel.init(128,128, caption="sengoku", scale=5)
    
    #Mouse visivle
    pyxel.mouse(True)

    #Image read
    pyxel.load('assets/assets.pyxres')
    
    pyxel.run(self.update, self.draw)
    
def update(self):
            
    #Main window
    if 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)
            self.craft.get_pos(x2, y2, v)
            if v == 6:
                self.window_ctr = 99
            else:
                self.window_ctr = 1
            self.txt_ctr = v
    #Craft window
    elif self.window_ctr == 1:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((0 < x < 64)  and (114 < y < 128)):
                if ((self.txt_ctr < 3) or (self.txt_ctr == 5) or
                 (32 <= self.txt_ctr <= 34)) :
                   self.update_tgt = 0
                   self.window_ctr = 2
                elif ((self.txt_ctr == 3) or (64 <= self.txt_ctr <= 66)) :
                    self.update_tgt = 5
                    self.window_ctr = 2
                elif self.txt_ctr == 8:
                    self.update_tgt = 17
                    self.window_ctr = 2
                else:
                    self.window_ctr = 3
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0
    #Craft window2
    elif self.window_ctr == 2:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            l = len(self.update_list)
            for i in range(l):
                if ((0 < x < 64)  and (55+i*10 < y < 65+i*10)):
                    self.update_tgt = self.update_list[i]
            if ((0 < x < 64)  and (100 < y < 114)):
                t = str(self.update_tgt)
                c = self.costs[t]
                if self.roryoku >= c:
                    self.craft.update_pos(self.update_tgt, c)
                    self.roryoku = self.roryoku - c
                    self.window_ctr = 0
                else:
                    self.window_ctr = 4
            if ((64 < x < 128)  and (100 < y < 114)):
                self.window_ctr = 0
    #Cannot craft1
    elif self.window_ctr == 3:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0
    #Cannot craft2
    elif self.window_ctr == 4:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0
    #Turn change
    elif self.window_ctr == 98:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                if ((self.daimyo1.event_flug == True) and
                   (self.daimyo2.event_flug == True)):
                    self.daimyo_flug = randint(1, 2)
                    self.window_ctr = 101
                    self.msg_num = randint(1, 3)
                elif self.daimyo1.event_flug == True:
                    self.daimyo_flug = 1
                    self.window_ctr = 101
                    self.msg_num = randint(1, 3)
                elif self.daimyo2.event_flug == True:
                    self.daimyo_flug = 2
                    self.window_ctr = 101
                    self.msg_num = randint(1, 3)
                else:
                    self.window_ctr = 0
    #Siro
    elif self.window_ctr == 99:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0
            if ((0 < x < 64)  and (114 < y < 128)):
                self.Turn_change()
                self.window_ctr = 98
                #self.window_ctr = 0
            if ((0 < x < 64)  and (100 < y < 114)):
                self.Save_data()
                self.window_ctr = 100
            if ((64 < x < 128)  and (100 < y < 114)):
                self.Load_data()
                self.window_ctr = 100
    #Information window
    elif self.window_ctr == 100:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0
                self.inf_ctr = 999
    #Gaiko
    elif self.window_ctr == 101:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 102
                self.answer_tgt = 116
    #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
    #Gaiko3
    elif self.window_ctr == 103:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0
                if self.daimyo_flug == 1:
                    self.daimyo1.event_cnt = 0
                    self.daimyo1.event_flug = False
                elif self.daimyo_flug == 2:
                    self.daimyo2.event_cnt = 0
                    self.daimyo2.event_flug = False
                self.daimyo_flug = 0
    #Title
    elif self.window_ctr == 999:
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            x = pyxel.mouse_x
            y = pyxel.mouse_y
            if ((64 < x < 128)  and (114 < y < 128)):
                self.window_ctr = 0

def draw(self):
    #Draw tilemap
    pyxel.bltm(0,0,0,0,0,16,16)
    #Status window
    if  0 < self.window_ctr < 90 :
        pyxel.rect(25, 0, 103, 60, 0)
        pyxel.rectb(25, 0, 103, 60, 7)
        self.Draw_fonts(self.text_list["96"], 30, 5)
        pyxel.text(75, 5, str(self.sikin), 7)
        self.Draw_fonts(self.text_list["97"], 30, 15)
        pyxel.text(75, 15, str(self.kome), 7)
        self.Draw_fonts(self.text_list["95"], 30, 25)
        pyxel.text(75, 25, str(self.heisi), 7)
        self.Draw_fonts(self.text_list["98"], 30, 35)
        pyxel.text(75, 35, str(self.roryoku), 7)
        
    #Status window2
    if  self.window_ctr == 99 :
        pyxel.rect(25, 0, 103, 70, 0)
        pyxel.rectb(25, 0, 103, 70, 7)
        pyxel.text(30, 5, str(self.turn), 7)
        self.Draw_fonts(self.text_list["106"], 45, 5)
        self.Draw_fonts(self.text_list["96"], 30, 15)
        pyxel.text(75, 15, str(self.sikin), 7)
        self.Draw_fonts(self.text_list["97"], 30, 25)
        pyxel.text(75, 25, str(self.kome), 7)
        self.Draw_fonts(self.text_list["95"], 30, 35)
        pyxel.text(75, 35, str(self.heisi), 7)
        self.Draw_fonts(self.text_list["98"], 30, 45)
        pyxel.text(75, 45, str(self.roryoku), 7)
        
    #Craft window
    if self.window_ctr == 1:
        pyxel.rect(0, 100, 128, 26, 0)
        pyxel.rectb(0, 100, 128, 26, 7)
        key = str(self.txt_ctr)
        self.Draw_fonts(self.text_list[key], 5, 105)
        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)
        self.Draw_fonts(self.text_list["100"], 5, 117)
        self.Draw_fonts(self.text_list["101"], 69, 117)

    #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)
            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 (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]
            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)
        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)
    #Cannot craft1
    elif self.window_ctr == 3:
        pyxel.rect(0, 100, 128, 26, 0)
        pyxel.rectb(0, 100, 128, 26, 7)
        self.Draw_fonts(self.text_list["99"], 5, 105)
        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)
        self.Draw_fonts(self.text_list["101"], 69, 117)
    #Cannot craft2
    elif self.window_ctr == 4:
        pyxel.rect(0, 100, 128, 26, 0)
        pyxel.rectb(0, 100, 128, 26, 7)
        self.Draw_fonts(self.text_list["108"], 5, 105)
        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)
        self.Draw_fonts(self.text_list["107"], 69, 117)
    #Turn change
    elif self.window_ctr == 98:
        pyxel.rect(0, 100, 128, 26, 0)
        pyxel.rectb(0, 100, 128, 26, 7)
        pyxel.text(10, 105, str(self.turn), 7)
        self.Draw_fonts(self.text_list["106"], 25, 105)
        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)
        self.Draw_fonts(self.text_list["107"], 69, 117)
    #Siro
    elif self.window_ctr == 99:
        pyxel.rect(0, 86, 128, 26, 0)
        pyxel.rectb(0, 86, 128, 26, 7)
        pyxel.rect(0, 100, 128, 26, 0)
        pyxel.rectb(0, 100, 128, 26, 7)
        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)
        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)
        key = str(self.txt_ctr)
        self.Draw_fonts(self.text_list[key], 5, 91)
        self.Draw_fonts(self.text_list["101"], 69, 117)
        self.Draw_fonts(self.text_list["103"], 5, 103)
        self.Draw_fonts(self.text_list["104"], 69, 103)
        self.Draw_fonts(self.text_list["105"], 5, 117)
    #Information window
    elif self.window_ctr == 100:
        pyxel.rect(0, 100, 128, 26, 0)
        pyxel.rectb(0, 100, 128, 26, 7)
        t = str(self.inf_ctr)
        self.Draw_fonts(self.text_list[t], 5, 105)
        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)
        self.Draw_fonts(self.text_list["107"], 69, 117)
    #Gaiko
    elif self.window_ctr == 101:
        pyxel.rect(0, 80, 128, 46, 0)
        pyxel.rectb(0, 80, 128, 46, 7)
        if self.daimyo_flug == 1:
            sei = self.daimyo1.sei
            mei = self.daimyo1.mei
            self.Draw_fonts(sei, 5, 85)
            self.Draw_fonts(mei, 30, 85)
        elif self.daimyo_flug == 2:
            sei = self.daimyo2.sei
            mei = self.daimyo2.mei
            self.Draw_fonts(sei, 5, 85)
            self.Draw_fonts(mei, 45, 85)    
        self.Draw_fonts(self.text_list["114"], 85, 85)
        self.Draw_fonts(self.text_list["115"], 5, 95)
        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)
        self.Draw_fonts(self.text_list["107"], 69, 117)
    #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)
    #Gaiko3
    elif self.window_ctr == 103:
        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.answer_tgt == 116:
                self.Draw_fonts(self.daimyo1.msg["4"], 10, 10)   
            else:
                self.Draw_fonts(self.daimyo1.msg["5"], 10, 10)
                self.Draw_fonts(self.daimyo1.msg["6"], 10, 20)   
                self.Draw_fonts(self.daimyo1.msg["7"], 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.answer_tgt == 116:
                self.Draw_fonts(self.daimyo2.msg["4"], 10, 10)   
            else:
                self.Draw_fonts(self.daimyo2.msg["5"], 10, 10)
                self.Draw_fonts(self.daimyo2.msg["6"], 10, 20)   
                self.Draw_fonts(self.daimyo2.msg["7"], 10, 30)   
            #
                
        self.Draw_fonts(self.text_list["107"], 69, 117)
    #Title
    elif self.window_ctr == 999:
        pyxel.rect(0, 100, 128, 26, 0)
        pyxel.rectb(0, 100, 128, 26, 7)
        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)
        self.Draw_fonts(self.text_list["113"], 69, 117)
        
def Draw_fonts(self,txt,x,y):  
    txt_count = len(txt)      
    for i in range(txt_count):
        #Key check
        font_xy = self.font_list[txt[i]]
       
        fontx = font_xy[0]
        fonty = font_xy[1]
        pyxel.blt(x + 8 * i,y,1,fontx,fonty,8,8,14)
        
def Turn_change(self):
    r = 0
    for i in range(16):
        for i2 in range(16):
            m = pyxel.tilemap(0).data[i][i2]
            if m == 0:
                self.kome = self.kome + 50
                r = r + 1
            elif m == 1:
                self.sikin = self.sikin + 50
                r = r + 1
            elif m == 2:
                self.heisi = self.heisi + 15
                r = r + 1
            elif m == 32:
                self.kome = self.kome + 100
                r = r + 1
            elif m == 33:
                self.sikin = self.sikin + 75
                r = r + 1
            elif m == 34:
                self.heisi = self.heisi + 25
                r = r + 1
            elif m == 64:
                self.kome = self.kome + 200
                r = r + 1
            elif m == 65:
                self.sikin = self.sikin + 100
                r = r + 1
            elif m == 66:
                self.heisi = self.heisi + 50
                r = r + 1
            
                
    #hyoro
    self.kome = self.kome - int(self.heisi*0.5)
    if self.kome < 0:
        self.heisi = self.heisi - abs(self.kome*3)
        self.heisi = self.heisi - 100
        if self.heisi < 0:
            self.heisi = 0
        self.kome = 0
        
    self.roryoku = self.roryoku + int(r*20)
    self.turn = self.turn + 1
    
    #Daimyo
    self.daimyo1.Turn_change(1)
    self.daimyo2.Turn_change(2)
    
def Save_data(self):
    #Save data
    data2 = []
    for i in range(16):
        data = []
        for i2 in range(16):
            data.append(pyxel.tilemap(0).data[i][i2])
        data2.append(data)
    try:
        with open('DATA/data.csv', 'w', newline="") as f:
                writer = csv.writer(f)
                for i3 in range(16):
                    writer.writerow(data2[i3])
                data3 = []
                data3.append(self.turn)
                data3.append(self.sikin)
                data3.append(self.roryoku)
                data3.append(self.heisi)
                data3.append(self.kome)
                writer.writerow(data3)
                data4 = []
                data4.append(self.daimyo1.kome)
                data4.append(self.daimyo1.sikin)
                data4.append(self.daimyo1.heisi)
                data4.append(self.daimyo1.yuko)
                data4.append(self.daimyo1.event_cnt)
                writer.writerow(data4)
                data5 = []
                data5.append(self.daimyo2.kome)
                data5.append(self.daimyo2.sikin)
                data5.append(self.daimyo2.heisi)
                data5.append(self.daimyo2.yuko)
                data5.append(self.daimyo2.event_cnt)
                writer.writerow(data5)
                self.inf_ctr = 109
    except:
        self.inf_ctr = 112
                
def Load_data(self):
    #Load data
    data = []
    data2 = []
    data3 = []
    try:
        with open('DATA/data.csv') as f:
            reader = csv.reader(f)
            for row in reader:
                data.append(row)
        for i in range(16):
            data2 = []
            for i2 in range(16):
                a = format(int(data[i][i2]), 'x')
                data2.append(str(format(a, '0>3')))
            data3.append(data2)
        for i2 in range(16):
            d = ""
            d = "".join(data3[i2])
            pyxel.tilemap(0).set(0, 0+i2, [d]) 
        self.turn = int(data[16][0])
        self.sikin = int(data[16][1])
        self.roryoku = int(data[16][2])
        self.heisi = int(data[16][3])
        self.kome = int(data[16][4])
        self.daimyo1.kome = int(data[17][0])
        self.daimyo1.sikin = int(data[17][1])
        self.daimyo1.heisi = int(data[17][2])
        self.daimyo1.yuko = int(data[17][3])
        self.daimyo1.event_cnt = int(data[17][4])
        self.daimyo2.kome = int(data[18][0])
        self.daimyo2.sikin = int(data[18][1])
        self.daimyo2.heisi = int(data[18][2])
        self.daimyo2.yuko = int(data[18][3])
        self.daimyo2.event_cnt = int(data[18][4])
        self.inf_ctr = 110
    except:
       self.inf_ctr = 111


        
class Craft:
   def __init__(self):
       self.tgt_x = 0
       self.tgt_y = 0
       self.tgt_v = 0
   def get_pos(self, x, y, v):
       self.tgt_x = x
       self.tgt_y = y
       self.tgt_v = v
   def update_pos(self, v, c):
       x = self.tgt_x
       y = self.tgt_y
       #Taget point check
       if v == 80:
           v2 = pyxel.tilemap(0).get(x, y)
           if v2 == 0:
               v = 32
           elif v2 == 32:
               v = 64
           elif v2 == 1:
               v = 33
           elif v2 == 33:
               v = 65
           elif v2 == 2:
               v = 34
           elif v2 == 34:
               v = 66
               
       tile = format(v, 'x')
       tile2 = str(format(tile, '0>3'))
       #Update tilemap
       pyxel.tilemap(0).set(x, y, [tile2]) 
       
class Daimyo:
   def __init__(self,a,b,c,d,e,m,v):
       self.kome = a
       self.sikin = b
       self.heisi = c
       self.yuko = 50
       self.sei = d
       self.mei = e
       self.msg = m
       self.event_cnt = v
       self.event_flug = False
   def Turn_change(self,d):
       if d == 1:
           self.kome += 300
           self.sikin += 200
           self.heisi += 100
       elif d == 2:
           self.kome += 500
           self.sikin += 500
           self.heisi += 200
       self.event_cnt += randint(5, 10)
       if self.event_cnt >= randint(51, 100):
           self.event_flug = True
           
       
App()

コードはGitHubにも載せていますが、ちょくちょく手を入れているので内容がnoteと異なっているかもしれません。その時はごめんなさい。
また、タイルマップ等が入っているpyxresファイルやモジュールファイルもGitHubに置いてあります。

大体ゲームの基本構造は出来たかな、と思っていたのですが大事なものを忘れていました。戦国時代をテーマにしているのなら「合戦」がないと何とも味気なくなってしまいます。といっても駒を動かす将棋のような形での実装は出来そうにないし、考えどころです。次回は合戦に関する仕組みが形になったら書きたいと思います。

ここまで読んでいただきありがとうございました。

ここまで読んでいただきありがとうございます!