見出し画像

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の変数に格納します。画面端の場合は取得できない場合があるので(左端のマスは左隣りがない等)エラーにならないようにx2y2の値を見て分岐させます。そして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番目の施設を建築候補に追加します。

無題1

▲上下左右がレベル3の田んぼの場合は…。

無題2

▲米倉が建築できます。

無題3

▲こんな感じ。米倉が建設できました。

無題

▲色々施設を増やしてみました。田んぼ・町・武家屋敷の上位施設として米倉・鍛冶場・道場を作成。また、レベル2の施設に囲まれた平地には神社・寺・教会を建築できます。まだ使いどころはないですが、合戦時に何らかの効果を発揮する「運」のような形にしていこうと思います。

今回はここまで。ソースやモジュールファイル等はGitHubにあります。

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

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