見出し画像

続:pyxelでRPG風のものを作る(10)

今回は敵の種類の追加のみです。いったんここまでで新エリアを解放したβ3バージョンとしてitch.coに載せます。

前回までの進行具合は以下のnoteをご参照ください。

無題

▲魔法を使うタイプの敵を追加。今までは遠距離攻撃をしてくる敵は固定砲台のような奴らばかりでしたが、今回追加したタイプは射線を合わせようとしてきます。

             elif self.enemys[e].enemy_v2 == 12:  
                a = randint(0, 2)
                if abs(enemy_pos_y2) <= 8:
                    if enemy_pos_x2 > 0:
                        p = 1
                        q = 9
                        self.enemys[e].enemy_m = 1
                    else:
                        p = 0
                        q = 9
                        self.enemys[e].enemy_m = 0
                    new_enemy = Enemy(self.enemys[e].enemy_x, 
                                       self.enemys[e].enemy_y, 112, q)
                    new_enemy.enemy_m = p
                    new_enemy.enemy_h = 9
                    self.enemys.append(new_enemy)
                else:
                    #Check tilemap
                    if (abs(enemy_pos_x2) < 45 and abs(enemy_pos_y2) < 45):
                        if abs(enemy_pos_y2) > abs(enemy_pos_x2):
                            #Move down
                            if enemy_pos_y2 > 0:
                                if (40> (pyxel.tilemap(0).get(enemy_pos_x, 
                                                      enemy_pos_y+1)) < 32):
                                    self.enemys[e].enemy_y = \
                                        self.enemys[e].enemy_y+8
                            #Move up
                            else:
                                if (40> (pyxel.tilemap(0).get(enemy_pos_x, 
                                                      enemy_pos_y-1)) < 32):
                                    self.enemys[e].enemy_y = \
                                        self.enemys[e].enemy_y-8
                        else:
                            #Move right
                            if enemy_pos_x2 > 0:
                                if (40> (pyxel.tilemap(0).get(enemy_pos_x+1, 
                                                        enemy_pos_y)) < 32):
                                    self.enemys[e].enemy_x = \
                                        self.enemys[e].enemy_x + 8
                                    self.enemys[e].enemy_m = 1
                            #Move left
                            else:
                                if (40> (pyxel.tilemap(0).get(enemy_pos_x-1, 
                                                        enemy_pos_y)) < 32):
                                    self.enemys[e].enemy_x = \
                                        self.enemys[e].enemy_x-8
                                    self.enemys[e].enemy_m = 0          

▲コードはこんな感じ。通常のプレイヤーを追ってくるタイプの敵と、遠距離タイプの合わせ技です。プレイヤーのy座標との比較をして1マス以内なら射撃、そうでなければ移動します。

無題

無題2

▲大型のボスも追加。攻撃方法は触手と目からの魔法攻撃。

             if self.enemys[e].enemy_v2==15 or self.enemys[e].enemy_v2==16:  
                
                if (abs(enemy_pos_x2) < 150 and abs(enemy_pos_y2) < 150):
                    if abs(enemy_pos_x2) > abs(enemy_pos_y2):
                        #Move right
                        if enemy_pos_x2 > 0:
                            a1 = self.enemys[e].enemy_v2
                            a2 = self.enemys[e].enemy_m
                            if a1 == 15 and a2 == 0:
                                nm1 = 128
                                nm2 = 0
                            elif a1 == 15 and a2 == 1:
                                nm1 = 96
                                nm2 = 1
                            else:
                                nm1 = 112
                                nm2 = 1
                            new_enemy = Enemy(self.enemys[e].enemy_x, 
                            self.enemys[e].enemy_y, nm1, 17)
                            new_enemy.enemy_m = nm2
                            new_enemy.enemy_h = 20
                            self.enemys.append(new_enemy)                
                            self.enemys[e].enemy_x = \
                                self.enemys[e].enemy_x + 8
                            self.enemys[e].enemy_v2 = 16
                            self.enemys[e].enemy_m = 1
                        #Move left
                        else:
                            a1 = self.enemys[e].enemy_v2
                            a2 = self.enemys[e].enemy_m
                            if a1 == 15 and a2 == 0:
                                nm1 = 128
                                nm2 = 1
                            elif a1 == 15 and a2 == 1:
                                nm1 = 96
                                nm2 = 0
                            else:
                                nm1 = 112
                                nm2 = 1                             
                            new_enemy = Enemy(self.enemys[e].enemy_x, 
                            self.enemys[e].enemy_y, nm1, 17)
                            new_enemy.enemy_m = nm2
                            new_enemy.enemy_h = 20
                            self.enemys.append(new_enemy)       
                            self.enemys[e].enemy_x = \
                                self.enemys[e].enemy_x-8
                            self.enemys[e].enemy_v2 = 16
                            self.enemys[e].enemy_m = 0           
                    else:
                        #Move down
                        if enemy_pos_y2 > 0:
                            a1 = self.enemys[e].enemy_v2
                            a2 = self.enemys[e].enemy_m
                            if a1 == 16 and a2 == 0:
                                nm1 = 128
                                nm2 = 0
                            elif a1 == 16 and a2 == 1:
                                nm1 = 128
                                nm2 = 1
                            else:
                                nm1 = 112
                                nm2 = 0                             
                            new_enemy = Enemy(self.enemys[e].enemy_x, 
                            self.enemys[e].enemy_y, nm1, 17)
                            new_enemy.enemy_m = nm2
                            new_enemy.enemy_h = 20
                            self.enemys.append(new_enemy)       
                            self.enemys[e].enemy_y = \
                                self.enemys[e].enemy_y+8
                            self.enemys[e].enemy_v2 = 15
                            self.enemys[e].enemy_m = 1
                        #Move up
                        else:
                            a1 = self.enemys[e].enemy_v2
                            a2 = self.enemys[e].enemy_m
                            if a1 == 16 and a2 == 0:
                                nm1 = 96
                                nm2 = 1
                            elif a1 == 16 and a2 == 1:
                                nm1 = 96
                                nm2 = 0
                            else:
                                nm1 = 112
                                nm2 = 0                             
                            new_enemy = Enemy(self.enemys[e].enemy_x, 
                            self.enemys[e].enemy_y, nm1, 17)
                            new_enemy.enemy_m = nm2
                            new_enemy.enemy_h = 20
                            self.enemys.append(new_enemy)       
                            self.enemys[e].enemy_y = \
                                self.enemys[e].enemy_y-8
                            self.enemys[e].enemy_v2 = 15
                            self.enemys[e].enemy_m = 0
                                
            if self.enemys[e].enemy_v2 == 17:
                pass
                    
            if self.enemys[e].enemy_v2 == 18:
                if self.e_atk_flug == False:
                    print(self.e_atk_count)
                    self.e_atk_count = self.e_atk_count + 1
                    if self.enemy_ld == False and self.e_atk_count < 4:
                        new_enemy = Enemy(self.enemys[e].enemy_x, 
                                       self.enemys[e].enemy_y + 8, 
                                       self.enemys[e].enemy_v, 6)
                        new_enemy.enemy_m = 1
                        new_enemy.enemy_h = 6
                        self.enemys.append(new_enemy)
                    elif self.e_atk_count > 3:
                        self.e_atk_flug = True
                        self.enemy_ld = True
                        self.e_atk_count = 0
                
                else:
                    a = randint(1, 3)
                    if a == 1:
                        new_enemy = Enemy(4*8, 4*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)    
                        
                        new_enemy = Enemy(11*8, 2*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)       
                        
                        new_enemy = Enemy(3*8, 6*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)                                

                        new_enemy = Enemy(12*8, 6*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)           
                        
                        self.enemy_ld = True
                        self.e_atk_flug = False
                    elif a == 2:
                        new_enemy = Enemy(3*8, 5*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)    
                        
                        new_enemy = Enemy(10*8, 4*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)       
                        
                        new_enemy = Enemy(5*8, 7*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)                 
                        
                        new_enemy = Enemy(8*8, 7*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)                                    
                        
                        self.enemy_ld = True
                        self.e_atk_flug = False
                    elif a == 3:
                        new_enemy = Enemy(3*8, 2*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)    
                        
                        new_enemy = Enemy(12*8, 5*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)       
                        
                        new_enemy = Enemy(10*8, 4*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)               
                        
                        new_enemy = Enemy(2*8, 7*8, 112, 15)
                        new_enemy.enemy_m = 0
                        new_enemy.enemy_h = 20
                        self.enemys.append(new_enemy)                                    
                        
                        self.enemy_ld = True
                        self.e_atk_flug = False

▲イカのコード。目は触手の先端を生み出し、触手先端が触手胴体を作りながら進む。

ここまでのもので一旦exeを作り、itch.coに上げました。β3バージョンです。まだまだ完成には程遠いですが、だんだんと進んできました。

コードやpyxresファイル、モジュールファイルはGitHubの方に置いてあります。

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

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