質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

654閲覧

Python(Pyxel)でゲームを作っています

cooking

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/11 11:32

編集2023/01/11 14:12

前提

Python(Pyxel)でゲームを作っています。

実現したいこと

スペースキーを押すとロケットから発射される弾が画面左側に表示されるモンスターに触れた際にモンスターのHPが減るようにしたいのですが、HPが減ってくれません。
HPが減る変数はMonster class内のdef update内に書いています。Bullet class内で生成した弾丸がモンスターの座標内に入ると、hp が1ずつ減っていくように書いています。

該当のソースコード

import pyxel class App: def __init__(self): pyxel.init(200, 200) pyxel.load("mygame.pyxres") self.rocket = Rocket(50,100) self.bullet = [] self.monster = Monster() pyxel.run(self.update, self.draw) def update(self): self.rocket.move() self.rocket.update(self.bullet) for i in reversed(range(len(self.bullet))): if not self.bullet[i].move(): del self.bullet[i] self.monster.move() def draw(self): pyxel.cls(0) pyxel.blt(0, 0,0,0,0,200,200,0) self.rocket.draw() self.monster.draw() for b in self.bullet: b.draw() #カーソルで動かすロケットのアイコンを示すオブジェクト class Rocket: def __init__(self,x,y): #最初の位置は、インスタンス作成のときの引数x,yで決まる self.x = x self.y = y self.h = 6 self.w = 6 self.s = 1 #車の動く方向を示す変数。カーソルキーの値をそのまま使う #最初は右向き self.dir = pyxel.KEY_RIGHT #ロケットのHPを表示 def draw(self): if self.dir == pyxel.KEY_UP: pyxel.blt(self.x, self.y,2,0,0,7,9,7) elif self.dir == pyxel.KEY_LEFT: pyxel.blt(self.x, self.y,2,0,9,9,7,7) elif self.dir == pyxel.KEY_DOWN: pyxel.blt(self.x, self.y,2,0,16,7,8,7) elif self.dir == pyxel.KEY_RIGHT: pyxel.blt(self.x, self.y,2,0,24,9,7,7) pyxel.rect(self.x - 5, self.y + 10, 20, 4, 7) pyxel.rect(self.x - 4, self.y + 11, 18, 2, 8) def update(self,b): # self.x = x # self.y = y if pyxel.btnp(pyxel.KEY_SPACE): b.append(Bullet(self.x,self.y)) def move(self): #移動 if self.dir == pyxel.KEY_RIGHT: self.x += 2 elif self.dir == pyxel.KEY_LEFT: self.x -= 2 elif self.dir == pyxel.KEY_UP: self.y -= 2 elif self.dir == pyxel.KEY_DOWN: self.y += 2 #壁判定 if self.x > 200 - self.w: self.x = 200 - self.w elif self.x < 0: self.x = 0 if self.y > 200 - self.h: self.y = 200 - self.h elif self.y < 0: self.y = 0 #押されたキーの判定 if pyxel.btnp(pyxel.KEY_RIGHT): self.dir = pyxel.KEY_RIGHT elif pyxel.btnp(pyxel.KEY_LEFT): self.dir = pyxel.KEY_LEFT elif pyxel.btnp(pyxel.KEY_UP): self.dir = pyxel.KEY_UP elif pyxel.btnp(pyxel.KEY_DOWN): self.dir = pyxel.KEY_DOWN # 弾丸のクラス class Bullet: def __init__(self,x,y): self.x = x self.y = y self.s = 4 self.c = pyxel.COLOR_RED def draw(self): pyxel.rect(self.x, self.y + 3, 2, 1, self.c) def move(self): self.x += self.s #途中で消えたことがわかるように上のほうに到達したらFalseを返す #一番上まで到達させるなら、self.y < 0 と条件を変更する if self.x > 190: return False else: return True class Monster: # coordinatey = Bullet() def __init__(self): self.x = 180 self.ya = 50 self.yb = 150 self.d = pyxel.rndi(1, 50) self.hpa = 18 self.hpb = 36 def move(self): #移動 if self.ya > 200: self.ya = 0 if self.yb < 0: self.yb = 200 self.d = pyxel.rndi(1, 20) self.e = pyxel.rndi(1, 20) if 1 < self.d <= 9: self.ya += 1 if 1 < self.e <= 9: self.yb -= 1 def update(self): if (180 >= Bullet().self.x >= 170) and (self.ya + 7 > Bullet().self.y > self.ya): self.hpa -= 1 if (180 >= Bullet().self.x >= 170) and (self.yb + 8 > Bullet().self.y > self.yb): self.hpb -= 1 #モンスターのHPを表示 def draw(self): # pyxel.rect(self.x, self.y + 3, 2, 1, self.c) # pyxel.text(5, 5, "Stage : 1" , 3) pyxel.blt(self.x, self.ya,1,0,0,8,6,7) pyxel.blt(self.x, self.yb,1,0,7,11,8,7) pyxel.rect(self.x - 5, self.ya + 10, 20, 4, 7) pyxel.rect(self.x - 5, self.yb + 10, 20, 4, 7) pyxel.rect(self.x - 4, self.ya + 11, self.hpa , 2, 8) pyxel.rect(self.x - 4, self.yb + 11, self.hpb/2 , 2, 8) #アプリケーションの起動 App()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

odataiki

2023/01/11 14:06

質問文読みましたが具体的な課題を記述出来れば具体的な回答が得られると思います。 ゲーム内容がわからないので、もう少しプログラム的に表現する方が このサイトからよりたくさん回答がもらえるようになると思いました。 例えば、 ・「モンスターのHPが減るように」というのは該当のソースコードの中のどの変数の値を指しているのか ・「どうしても実現できません」→減少してほしいのに、HPの値が減少しないのか、増加してしまうのか、意図したよりも減少幅が大きいのか。。。等
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問