![見出し画像](https://assets.st-note.com/production/uploads/images/133380772/rectangle_large_type_2_902a3bf80ab18f19715cb153567df6e0.png?width=1200)
Lesson22 特殊能力を使おう
割引あり
アイテムの使用、武器の変更まで来ました。
最後に「とくしゅ」コマンドの実装に移ります。
まず今回画像データを追加します。
最初にダウンロードしたものには含まれませんので、必ずダウンロードしてください。
ダウンロードしたら、 >game >image フォルダに入れといてください。
ではプログラムを変更していきましょう。
今回は2つのプログラムを変更します。
enemy.py
class Enemy(pygame.sprite.Sprite):
#### 初期設定 ####
def __init__(self, x, y, image, image_bomb, speed_x ,speed_y,rotation_speed,start_angle,atk,enemy_hp,size_multiplier):
super().__init__() # 追加済み
self.x = x # 追加済み
self.y = y # 追加済み
self.original_image = image # 追加済み
self.image = self.original_image #
self.image_bomb = image_bomb # 追加済み
self.speed_x = speed_x # 追加済み
self.speed_y = speed_y # 追加済み
## 省略 ##
#### 折り返し関数 ####
def turn(self,player,damage_base):
if self.x < 0 or self.x > 960: # 追加済み
self.speed_x = self.speed_x * -1 # 追加済み
if self.y < 0 or self.y > 720: # 追加済み
self.speed_y = self.speed_y * -1 # 追加済み
if pygame.sprite.collide_mask(self, player) and damage_base == 0: #
self.speed_x = self.speed_x * -1 #
self.speed_y = self.speed_y * -1 #
player.py
class Player(pygame.sprite.Sprite):
## 省略 ##
# +字キーで上下左右に移動する関数
def handle_input_carsol(self,speeder): #
player_speed = 5 * speeder #
keys = pygame.key.get_pressed() # 追加済み
if keys[pygame.K_LEFT] or keys[pygame.K_a]: # 追加済み
self.move(-player_speed, 0) # 追加済み
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:# 追加済み
self.move(player_speed, 0) # 追加済み
if keys[pygame.K_UP] or keys[pygame.K_w]: # 追加済み
self.move(0, -player_speed) # 追加済み
if keys[pygame.K_DOWN] or keys[pygame.K_s]: # 追加済み
self.move(0, player_speed) # 追加済み
stage1.py
#### stage1.py ####
############################################################################################
#### ライブラリの読み込み ####
############################################################################################
#### メインプログラム ####
def main(hp,mp,idx,weapons,itemBag,special): # 追加済み
########################################################################################
#### 初期設定 ####
## 省略 ##
speeder = 1 #
special_time = 0 #
########################################################################################
#### プレイヤーのスプライト ####
player_width = 45 # 追加済み
player_height = 40 # 追加済み
image0 = pygame.image.load("image/player1.png") # 追加済み
image_barrier = pygame.image.load("image/player_barrier.png") #
image_player = pygame.transform.scale(image0, (player_width, player_height)) # 追加済み
## 省略 ##
########################################################################################
#### ザコ敵のスプライト ####
## 省略 ##
def single_enemy(hp): # 追加済み
for single_enemy in single_enemies: # 追加済み
single_enemy.turn(player,damage_base) #
single_enemy.update(player_turn) # 追加済み
single_enemy.draw(screen) # 追加済み
#single_enemy.draw_path(screen) # 追加済み
attack_enemy = single_enemy # 追加済み
if not player_turn: # 追加済み
hp =player.take_damage(hp,damage_base,attack_enemy) # 追加済み
return hp # 追加済み
########################################################################################
#### ザコ敵のクローンスプライト ####
## 省略 ##
for clone_enemy in clone_enemies: # 追加済み
clone_enemy.turn(player,damage_base) #
clone_enemy.update(player_turn) # 追加済み
clone_enemy.draw(screen) # 追加済み
attack_enemy = clone_enemy # 追加済み
if not player_turn: # 追加済み
hp =player.take_damage(hp,damage_base,attack_enemy) # 追加済み
if frame_count - clone_enemy.creation_frame >= del_time * 30: # 追加済み
clone_enemies.remove(clone_enemy) # 追加済み
return hp # 追加済み
########################################################################################
#### 同じ敵を複数作る場合 ####
#### エネミーのスプライト ####
## 省略 ##
def white(hp):
for white_enemy in white_enemies: # 追加済み
white_enemy.turn(player,damage_base) #
white_enemy.update(player_turn) # 追加済み
white_enemy.draw(screen) # 追加済み
#white_enemy.draw_path(screen) # 追加済み
attack_enemy = white_enemy # 追加済み
if not player_turn: # 追加済み
hp =player.take_damage(hp,damage_base,attack_enemy) # 追加済み
return hp # 追加済み
########################################################################################
#### 特殊能力関数 ####
def special_effect(player,item_name,speeder,damage_base): #
if item_name == "Bigger": #
player_width = 45 * 2 #
player_height = 40 * 2 #
image_player = pygame.transform.scale(image0, (player_width, player_height)) #
print("Special_NO.1") #
player.original_image = image_player #
elif item_name == "Smaller": #
player_width = 45 * 0.5 #
player_height = 40 * 0.5 #
image_player = pygame.transform.scale(image0, (player_width, player_height)) #
print("Special_NO.2") #
player.original_image = image_player #
elif item_name == "Speeder": #
print("Special_NO.3") #
speeder = 1.8 #
elif item_name == "Barrier": #
player_width = 45 #
player_height = 45 #
image_player = pygame.transform.scale(image_barrier, (player_width, player_height)) #
print("Special_NO.4") #
player.original_image = image_player #
damage_base = 0 #
return speeder,damage_base #
########################################################################################
#### ゲームループ ####
while True:
## 省略 ##
#### キー操作設定 ####
# 単押し
for event in pygame.event.get(): # 追加済み
## 省略 ##
if event.type == pygame.KEYDOWN: # 追加済み
## 省略 ##
if event.key == pygame.K_SPACE: # 追加済み
if player_turn:
if command_mode == False: # 追加済み
## 省略 ##
else:
## 省略 ##
else:
if selected_button == 1: # 追加済み
print("selected_button = 1 , selected_item_name = ",selected_item_name)
weapon_param ,damage = change_weapons(selected_item_name,weapon_param,damage) # 追加済み
elif selected_button == 2: # 追加済み
print("selected_button = 2 , selected_item_name = ",selected_item_name)
hp,mp,selected_item_name,damage = use_item(hp,mp,selected_item_name,damage) # 追加済み
# 削除 selected_item = 1 # 削除
elif selected_button == 3: # 追加済み
print("selected_button = 3 , selected_item_name = ",selected_item_name)
speeder,damage_base = special_effect(player,selected_item_name,speeder,damage_base) #
selected_item = 1 #
special_time = frame_count #
command_mode = False # 追加済み
player_turn = False # 追加済み
else:
selected_button = 1 # 追加済み
player_turn = True # 追加済み
# 長押し
if not player_turn: # 追加済み
player.handle_input_carsol(speeder) #
## 省略 ##
## 特殊能力タイムオーバー ##
if frame_count - special_time == 150: #
special_time = 0 #
image_player = pygame.transform.scale(image0, (player_width, player_height)) #
player.original_image = image_player #
speeder = 1 #
damage_base = 1 #
## ゲームオーバー ##
## 省略 ##
変更箇所が多いので、注意しながら貼り付けてください。
貼り付けられたら以下を実行してください。
>python main.py
実行したらゲームを開始してください。
コマンド選択から「とくしゅ」を選択しましょう。
![](https://assets.st-note.com/img/1709959076597-FbKT9b0hP6.png?width=1200)
![](https://assets.st-note.com/img/1709959080679-MG23HzvOpU.png?width=1200)
![](https://assets.st-note.com/img/1709959095322-92XbUpBNHj.png?width=1200)
![](https://assets.st-note.com/img/1709959108196-obUA0Q4Jj6.png?width=1200)
![](https://assets.st-note.com/img/1709959113146-71JwVSNTK0.png?width=1200)
![](https://assets.st-note.com/img/1709959120010-IKDIIAbmdu.png?width=1200)
![](https://assets.st-note.com/img/1709959126788-fflNeilv34.png?width=1200)
![](https://assets.st-note.com/img/1709959131818-m9q1XP6Az5.png?width=1200)
バリア―を張ると、敵が跳ね返っていくので試してみてください★
ちなみにどの特殊能力も5秒ほどで効果は消えます。
これで特殊能力の実装が完成です。
それでは解説に移ります。Ⅹ(旧Twitter)で拡散してお進みください。
ここから先は
22,155字
この記事が気に入ったらサポートをしてみませんか?