パックマン風ゲームにおける当たり判定について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

パックマン風ゲームにおける当たり判定について

#1

投稿記事 by keito94 » 7年前

どうもkeito94です。
只今スプライトクラスのバグ事件を乗り越え、迷路を作っているところなのですが、
少しわからないことがあったので質問させていただきます。
パックマンには、緊急回避のために左右がつながっているワープトンネルがあります。
ワープ通路であることを表すチップをマップデータに入れるというのはわかっているのですが、

コード:

    def create(self, screen,blocks):
        transColor = self.image.get_at((0, 0))
        self.image.set_colorkey(transColor, RLEACCEL)
        for y in range(MAP_HEIGHT):
            for x in range(MAP_WIDTH):
                if MAP[y][x] == BLOCK:
                    cell = Block(self.imageList[1], (x * CHIPSIZE, y * CHIPSIZE), screen)
                    blocks.add(cell)
                elif MAP[y][x] == FOOD:
                    screen.blit(self.imageList[2], (x * CHIPSIZE, y * CHIPSIZE))
                elif MAP[y][x] == WARP:
                    # ここにワープの処理を入れる
                    pass
                else:
                    pass

パックマンをワープさせる方法がわかりません。
あと、迷路を表示したときの処理落ちの原因が、メインループでMap.create(元Map.draw)を直接実行していたということがわかったので、
プレイヤーの部分も含め、少し手を加えました。(そりゃあ、マップチップが増えれば増えるほど処理落ちするもんね…。)

コード:

def Main():
    pygame.init()
    screen = pygame.display.set_mode((640, 480))
    player = pygame.sprite.Group()
    blocks = pygame.sprite.OrderedUpdates()
    pacman = Player()
    maze = Map()
    player.add(pacman)
    clock = pygame.time.Clock()
    # 迷路を生成する。
    maze.create(screen,blocks)
    # メインループ
    while True:
        clock.tick(60)

        screen.fill((0, 0, 0))

        blocks.draw(screen)

        player.update(blocks)

        pacman.draw(screen)

        pygame.display.update()  # 画面を更新


        # イベント処理
        for event in pygame.event.get():
            if event.type == QUIT:  # 閉じるボタンが押されたら終了
                pygame.quit()  # Pygameの終了(画面閉じられる)
                sys.exit()

追記:本来の主題とはかけ離れていったので、タイトルを変えました。
最後に編集したユーザー keito94 on 2017年7月28日(金) 18:23 [ 編集 1 回目 ]
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
usao
記事: 1889
登録日時: 11年前

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#2

投稿記事 by usao » 7年前

> パックマンをワープさせる方法がわかりません。

そのワープトンネルとは無関係な場所をパックマンが移動する場合において,
いかなる処理によりパックマンを「移動」させているのでしょうか?

当該「移動」とは,おそらく
「パックマンの位置」なる座標値を,ある値から別のある値へと更新することにより成されるものと思いますが,
そのようである場合,「移動」と「ワープ」との間の違いとは何になるのでしょうか?

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#3

投稿記事 by keito94 » 7年前

>>usaoさん
教えますね。

ワープトンネルとは無関係なところを移動させる処理を簡単に説明すると、
①プレイヤーのキー入力を確認する
②パックマンの移動する方向を入力した方向に変更する
③パックマンが壁に衝突するのなら、そこで停止
(今のだと操作感がめちゃくちゃ悪いかも…。なにか改善案出してくれますか?)

ワープトンネルを移動するときの処理を簡単に説明すると、
①パックマンがワープトンネルを移動している時に画面外に消えたら
②パックマンの座標を右の通路なら左の通路、左の通路なら右の通路を通っているように更新する。
(左右がつながっているように見せる。)
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
usao
記事: 1889
登録日時: 11年前

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#4

投稿記事 by usao » 7年前

> パックマンをワープさせる方法

に関して

> ワープトンネルを移動するときの処理を簡単に説明すると、
> ①パックマンがワープトンネルを移動している時に画面外に消えたら
> ②パックマンの座標を右の通路なら左の通路、左の通路なら右の通路を通っているように更新する。
> (左右がつながっているように見せる。)

のように処理内容を順序立てて説明できるのであれば,
このトピックにおける質問内容は一体何なのでしょう?

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#5

投稿記事 by keito94 » 7年前

>>usaoさん

主語がなかったですね…。
どうやってパックマンが画面外に出たかどうかを判定するか?
ということです。
オフトピック
説明不足がまたたたった…。
拙い文章だけどわかってくれるかな…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#6

投稿記事 by purin52002 » 7年前

こんにちは

ワープトンネルのチップの座標とプレイヤーの座標が一致したらワープさせるのでしょうか?
それとも、プレイヤーの座標がマップの右端の座標以上(もしくは左端以下)になったらワープさせるのでしょうか?

パックマンで遊んだことがないので詳しい仕様がわからないのですが、おそらくは座標を判定に使えばいいと思います^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#7

投稿記事 by ISLe » 7年前

オフトピック
keito94 さんが書きました:パックマンには、緊急回避のために左右がつながっているワープトンネルがあります。
ワープ通路であることを表すチップをマップデータに入れるというのはわかっているのですが、
まるでパックマンにワープ通路を表すチップがあるかのような書き方ですね。
パックマン『風』とパックマンはきちんと区別して欲しいと思います。

パックマンにこだわらないなら、以下は気にしなくてもかまいません。

パックマンには、「ワープ通路であることを表すチップ」というものはありません。
モンスターの速度が遅くなる部位設定というものはあります。

パックマンは、上下・左右がそれぞれ円筒状に繋がったマップです。
迷路の見えている部分は224x256(パックマンは16x16)で、マップ自体は256x256の広さがあります。
つまり、ワープトンネル内(見えない範囲)は32ピクセルあります。
座標が256以上になる部分は反対側に表示されます。

ワープトンネルが複数あったり上下にあったりする海賊版のパックマンだと確認しやすいです。

原作のパックマンでも256面でバグって迷路が崩れる際、上下に行き来できます。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#8

投稿記事 by ISLe » 7年前

keito94 さんが書きました:ワープトンネルとは無関係なところを移動させる処理を簡単に説明すると、
①プレイヤーのキー入力を確認する
②パックマンの移動する方向を入力した方向に変更する
③パックマンが壁に衝突するのなら、そこで停止
(今のだと操作感がめちゃくちゃ悪いかも…。なにか改善案出してくれますか?)
改善案とは?
それこそパックマンを真似れば良いのではないでしょうか。

パックマンは…
進行中に逆方向に入力があるとその場で反転しますが、進行方向と垂直の方向の入力があってもそのまま直進し、曲がり角に達すると入力方向に曲がります。

さらに、曲がり角に達する前から曲がりたい方向に入力していた場合、正面の壁に突き当たることなくわずかにショートカットします。
曲がり角が連続する地形を利用することでモンスターの追跡を躱しやすくなります。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#9

投稿記事 by keito94 » 7年前

purin52002 さんが書きました: プレイヤーの座標がマップの右端の座標以上(もしくは左端以下)になったらワープさせる
僕の頭の中では、そう考えてます。
でも、ワープトンネルのチップの座標をどうやって教えるのかがわかりません。

コード:

                elif MAP[y][x] == WARP:
                    # ワープトンネルのチップの座標を教える。
                    pass
ここからはPygameの初歩的な質問になるのですが、マップチップなどの画像を使うのがスプライトなのは知っています。
ワープトンネルのように画像を使わないが、ゲーム上重要な情報を教えるチップの処理にはどんな機能を使えばいいのでしょうか?
オフトピック
ISLe さんが書きました: 進行中に逆方向に入力があるとその場で反転しますが、進行方向と垂直の方向の入力があってもそのまま直進し、曲がり角に達すると入力方向に曲がります。
そのアルゴリズムの組み方がよくわからないので、その手がかりとなるものを教えて下さい。
あと、これは現在のパックマンの操作のルーチンです。
具体的な変更点を教えて下さい。

コード:

        if pressed_key[K_RIGHT]:
            self.freamnum = RIGHT
            self.change_speed(2, 0)
        if pressed_key[K_LEFT]:
            self.freamnum = LEFT
            self.change_speed(-2, 0)
        if pressed_key[K_UP]:
            self.freamnum = UP
            self.change_speed(0, -2)
        if pressed_key[K_DOWN]:
            self.freamnum = DOWN
            self.change_speed(0, 2)
ISLeさんのご指摘を受けてオフトピにしました。
最後に編集したユーザー keito94 on 2017年7月25日(火) 17:53 [ 編集 1 回目 ]
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#10

投稿記事 by ISLe » 7年前

keito94 さんが書きました:
ISLe さんが書きました: 進行中に逆方向に入力があるとその場で反転しますが、進行方向と垂直の方向の入力があってもそのまま直進し、曲がり角に達すると入力方向に曲がります。
そのアルゴリズムの組み方がよくわからないので、その手がかりとなるものを教えて下さい。
手がかりは書いたとおりのことですよ。
書いてあることをコードに落とし込めばよいだけです。

#keito94さんが何を期待しているのかが分からない。

あと、これはワープ問題とは別の事案なので新規にトピをたてたほうが良いと思います。
#No.8もオフトピであるべきでした。

アバター
usao
記事: 1889
登録日時: 11年前

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#11

投稿記事 by usao » 7年前

オフトピック
一体何が問題点になっているのか? が本当に理解できない私でございます.

「ワープ」を行うべきタイミングを如何にして確定するのか,について
(その手段がマップチップだろうが座標値だろうが何だろうが構わないと思うが)
マップチップでどうこうするという手段を選んだのであれば
もうその時点で,「ワープ」を行うべきタイミング(≒パックマンが画面外に出た)の判定方法は確定的に明らかではないのか?

だって,そのために
> ワープ通路であることを表すチップ
とかいう概念を導入したのでしょう?
あえて用いているそのチップという概念は何のためのもの?

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#12

投稿記事 by keito94 » 7年前

ISLe さんが書きました: あと、これはワープ問題とは別の事案なので新規にトピをたてたほうが良いと思います。
#No.8もオフトピであるべきでした。
ワープ問題が一段落したら、質問したいと思います。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#13

投稿記事 by keito94 » 7年前

>>usaoさん
問題点は一つあります。
ワープのアルゴリズムは一通り完成しているのですが、
Pygameで、画像を使わないマップチップをどうするのかがわからないということです。
オフトピック
そのやり方が分かっていたら、そもそもこんな質問していないし…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
usao
記事: 1889
登録日時: 11年前

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#14

投稿記事 by usao » 7年前

オフトピック
「マップチップ」というデータ形式の概念に,
> 画像
なんてものは無関係だと思うが…

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#15

投稿記事 by keito94 » 7年前

usao さんが書きました:
usao さんが書きました:
オフトピック
「マップチップ」というデータ形式の概念に,
> 画像
なんてものは無関係だと思うが…
まあ、たしかにそうですよね…。

僕が言いたいことを順におって説明すると、
①ワープトンネルを表すマップチップを作った。(ここまではOK)
②でも、マップチップがあるところに画像を表示させる方法しか知らない。(screen.blitやRectやらで大苦戦している。)
③だからここで質問している。
…となります。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#16

投稿記事 by purin52002 » 7年前

例えばプレイヤーにマップ上の座標を持たせるというのはどうですか?

自分の座標がワープトンネルの座標と一致していたらワープみたいな感じで、、、
オフトピック
②と③の間がだいぶ飛んでいると思うのは私だけなのかな...
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
usao
記事: 1889
登録日時: 11年前

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#17

投稿記事 by usao » 7年前

ふぅむ,「マップチップ」という言葉の定義が,私と質問者様とで異なっているように見受けるので,
私側の定義を別名で「マップチップU」と記します.


「マップチップU」とは:

(1)ゲームフィールドをマス目の集合として考える
(2)各マス目は,その場所に関する{通路,壁,このマスに侵入したら別の地点にワープすべき,…}というような属性値を持つ
(3)あるキャラクタの座標から,そのキャラクタの存在位置に対応するマス目を特定してそのマス目の属性値を調べることにより,
 そのキャラクタに対して必要な処理を判断し得る.

というような データの持ち方(1)(2),および使い方(3) のことです.

例えば,
(2)において,あるマス目に ”このマスに侵入したら別の地点にワープすべき” という属性値を持たせておいた場合,
(3)の処理にて,「そのマス内に侵入したキャラクタはワープすべきだ」ということを判定し得る.


以上の内容の中には,「画像」は一切出てきません.
ゲームシーンの描画に際して,(2)のデータを参照することはあるかもしれませんが,それは本件とは全く別の無関係な話です.

#あなたの貼ったコードを見るに,既に(1)(2)が存在しているのだと思った.
#そして,そのようにしてあるのは(3)を行う目的であろうと推測したので,No.11のようになる.
オフトピック
個人的には,このような「マップチップU」的方法はパックマンに向かないように思える.

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#18

投稿記事 by ISLe » 7年前

オフトピック
keito94さんの念頭には、[pygame]画像が分割して表示されない…。に添付されているソースファイルにあるブロック関連のコードと同じ方法でワープ通路を実装したいというのがあるのでしょうかね。

マップデータ配列から、位置とチップ画像をセットにしたブロックの情報を個々に生成したものをグループ化、当たり判定はグループで行い、その際、チップ画像のサイズを利用している、というもの。

でもリンク先のトピックでもこのトピックでも、そのへん一切話題になってない。
過去に一度も触れていないことを前提にされてもなあ、って思います。

そもそも、どこかのサイトを参考にしたらしいコードですが、パックマン風の当たり判定にはまったく不向きですし。
何より、この方法、以前keito94さんがC++&DXライブラリで挑戦した上で投げ出したのと瓜二つなんですよね。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#19

投稿記事 by keito94 » 7年前

usao さんが書きました: 以上の内容の中には,「画像」は一切出てきません.
画像は一切関係なかったんですね…。
てっきり、マップというのは画像に依存するものかと…。
usao さんが書きました:個人的には,このような「マップチップU」的方法はパックマンに向かないように思える.
では、パックマンに向いたマップデータの考えを教えてくれますか?
ISLe さんが書きました:
オフトピック
keito94さんの念頭には、[pygame]画像が分割して表示されない…。に添付されているソースファイルにあるブロック関連のコードと同じ方法でワープ通路を実装マップデータ配列から、位置とチップ画像をセットにしたブロックの情報を個々に生成したものをグループ化、当たり判定はグループで行い、その際、チップ画像のサイズを利用している、というもの。したいというのがあるのでしょうかね。
それは言えてます…。でも、あなたの発言からするに、それは無理だとわかりました…。
改善案を教えてくれませんか…。
そもそも、どこかのサイトを参考にしたらしいコードですが、パックマン風の当たり判定にはまったく不向きですし。
何より、この方法、以前keito94さんがC++&DXライブラリで挑戦した上で投げ出したのと瓜二つなんですよね。
あの方法は全体的に不向きでしたか…。(初心者向けコードの延長線でかないということですか…。初めて知りました…。)
あなたが考えるパックマン風の当たり判定の考え方と、
将来的にはアクションゲームを作りたいから、あなたが考えているアクションゲームの当たり判定の考え方を教えて下さい。
(同じなら同じと言ってくださいね)
purin52002 さんが書きました:例えばプレイヤーにマップ上の座標を持たせるというのはどうですか?

自分の座標がワープトンネルの座標と一致していたらワープみたいな感じで、、、
分かりました!検討してみます!
オフトピック
移動量を使う当たり判定をどうやって卒業するのかが脱プログラミング初心者の鍵となる…かも。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#20

投稿記事 by ISLe » 7年前

keito94 さんが書きました:改善案を教えてくれませんか…。
改善案とは?
それこそパックマンを真似れば良いのではないでしょうか。

パックマンを真似るというのは、どこかにあるそれっぽいコードをコピペすることではないですよ。
パックマンの動作を見て、自分でデータ構造やアルゴリズムを考えることが「真似る」ということです。
keito94 さんが書きました:あの方法は全体的に不向きでしたか…。(初心者向けコードの延長線でかないということですか…。初めて知りました…。)
あなたが考えるパックマン風の当たり判定の考え方と、
将来的にはアクションゲームを作りたいから、あなたが考えているアクションゲームの当たり判定の考え方を教えて下さい。
(同じなら同じと言ってくださいね)
不向きとは書きましたが、初心者向けとは?

いわゆるパックマンもどきでは見逃されがちな部分も含めて、既に客観的に仕様をいくつか記述しましたが?
具体的なコードを求めているのなら、この件に関しては申し訳ないですが、このような公の場所に書くことはできません。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#21

投稿記事 by keito94 » 7年前

ISLe さんが書きました: パックマンを真似るというのは、どこかにあるそれっぽいコードをコピペすることではないですよ。
パックマンの動作を見て、自分でデータ構造やアルゴリズムを考えることが「真似る」ということです。
実はそのヒントの一つにたどり着いたところで…。
► スポイラーを表示
不向きとは書きましたが、初心者向けとは?
ゲーム制作入門系のサイトには壁にぶつかったときに移動量を使って、めり込み防止の確認を行う方法が載っています。
でも、実際のゲーム制作で使うとあなた達がおっしゃるように、移動量を0にする都合上効率が悪くなってしまいます。
初心者にはありがたいめり込み判定だが、上級者にはかえって不便。だから、初心者向けなのです。
オフトピック
ゲームやプログラムではあいいう場面のために一時変数は多用されていることに(今頃)気づいた。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
usao
記事: 1889
登録日時: 11年前

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#22

投稿記事 by usao » 7年前

オフトピック
> では、パックマンに向いたマップデータの考えを教えてくれますか?

例えば,【絶対に壁にぶつからない】ならば,
どこかの入門サイトに書いてあるという【壁にぶつかったときに,どうのこうのする】なんて話は全く不要であると考えることができます.

このトピックの内容とは全く異なる話になってしまうのでここには書きませんけど,
そういう方法に関する話(私がパックマンを「真似る」なら,こういう感じに考えるかなぁ,という話)をあなたの日記に書いた覚えがありますよ.
役に立つかどうかは知りませんけども.


>初心者にはありがたい

うーん……
あなたは以前に,めり込みを解消する系の話でだいぶ苦労しておられたように見受けましたが…
苦労したわりには実際に使ってみると色々と良くないことが起きる とおっしゃるのであれば,むしろ全然ありがたくない話なのでは…?

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#23

投稿記事 by keito94 » 7年前

usao さんが書きました: うーん……
あなたは以前に,めり込みを解消する系の話でだいぶ苦労しておられたように見受けましたが…
苦労したわりには実際に使ってみると色々と良くないことが起きる とおっしゃるのであれば,むしろ全然ありがたくない話なのでは…?
アクションゲームを初めて作る人にはありがたいという意味で言ったのですが…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#24

投稿記事 by keito94 » 7年前

まあ、とにかく、一時変数の概念を学んで、パックマンの移動のアルゴリズムのヒントの一端に近づけたことですし、
(この一件が解決したら質問しますね)
今のマップチップはパックマンに向いてないということがわかったみたいですし、パックマンに向いたマップチップや壁の処理の方法のヒントを教えてくれませんか?
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#25

投稿記事 by ISLe » 7年前

否定的なことはすべて全否定と捉えるのは、コードの中身を理解していない(しようとしない)からでしょうかね。


C++&DXライブラリのときに、移動先判定は…
『等間隔に並ぶ固定されたブロック、とプレイヤーキャラのみの当たり判定』
が前提になってるから、のちのち苦労することになりますよってなことを何回も書いたの覚えてませんか?

パックマンて
『等間隔に並ぶ固定されたブロック、とプレイヤーキャラのみの当たり判定』(※モンスター等は障害物ではない)
なんですよ。
先読みが有効な場面なんですよね。
そもそも曲がり角をショートカットって先を見ないと不可能だと思いませんか?

ところがですね、パックマンは現在座標から先読みしてるんですよ。
どうしてそんなことができるのかは、パックマンの画面をよーく観察したら分かるかもしれませんね。


ちゃんと説明しておくと、「パックマン風の当たり判定にはまったく不向き」というのは、“存在するブロックだけをコンテナに入れてコンテナに入っているブロックだけで当たり判定している”ところ。

等間隔に固定されたブロック『でないならば』コンテナで管理するのは有効だろうけれど、せっかく等間隔に固定されているのにそれを有効活用しないのはまったくの無駄。
コンテナに入ったブロックから曲がり角を判定するのは難しく、ショートカットの実装に苦労するのが容易に予測できます。


サンプルコードというのは、機能を説明するのが目的。
簡単な題材で目的を達するために、わざわざ回りくどいことをするのはよくあること。
それをまるごと取り込もうとする(そして振り回される)のが初心者なのであって、コード自体の問題ではないですよ。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#26

投稿記事 by keito94 » 7年前

ISLe さんが書きました:否定的なことはすべて全否定と捉えるのは、コードの中身を理解していない(しようとしない)からでしょうかね。


C++&DXライブラリのときに、移動先判定は…
『等間隔に並ぶ固定されたブロック、とプレイヤーキャラのみの当たり判定』
が前提になってるから、のちのち苦労することになりますよってなことを何回も書いたの覚えてませんか?
すいません。
あの時は聞き流していたのですが、改めてその言葉の意味を知りました…。
ごめんなさい。
そして、C++&DXライブラリのときに、
移動先に依存しない当たり判定の実装に大失敗した苦い思い出が蘇ったので、(もう一度)そのアルゴリズムをわかりやすく教えてください。

パックマンて
『等間隔に並ぶ固定されたブロック、とプレイヤーキャラのみの当たり判定』(※モンスター等は障害物ではない)
なんですよ。
先読みが有効な場面なんですよね。
そもそも曲がり角をショートカットって先を見ないと不可能だと思いませんか?

ところがですね、パックマンは現在座標から先読みしてるんですよ。
どうしてそんなことができるのかは、パックマンの画面をよーく観察したら分かるかもしれませんね。
先読み…ていうか直前のフレームの使いみちすらわからなかったのでその例を上げてくれてまで説明してくれたので分かりやすかったです!!
ちゃんと説明しておくと、「パックマン風の当たり判定にはまったく不向き」というのは、“存在するブロックだけをコンテナに入れてコンテナに入っているブロックだけで当たり判定している”ところ。

等間隔に固定されたブロック『でないならば』コンテナで管理するのは有効だろうけれど、せっかく等間隔に固定されているのにそれを有効活用しないのはまったくの無駄。
コンテナに入ったブロックから曲がり角を判定するのは難しく、ショートカットの実装に苦労するのが容易に予測できます。
あの方法も今思えば効率が悪かったと思っています…。
サンプルコードというのは、機能を説明するのが目的。
簡単な題材で目的を達するために、わざわざ回りくどいことをするのはよくあること。
それをまるごと取り込もうとする(そして振り回される)のが初心者なのであって、コード自体の問題ではないですよ。
たしかにそうでした…。
僕がプログラム初心者であることも認めておきます。(サインにも書いてますヨ。)
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#27

投稿記事 by purin52002 » 7年前

マップチップってマップを構築する小さな画像の一つだと思うんです。
マリオのレンガブロックだったり、ドラクエの地面だったり、
小さな画像を組み合わせて大きな画像を作るための方法だと思うんです。
(ってhttps://dic.pixiv.net/a/%E3%83%9E%E3%83 ... 3%E3%83%97に書いてました^p^)

なんで、パックマンに向いたマップチップ、、、というのはブロックの画像組み合わせればいいんじゃないかな、って思います。
► スポイラーを表示
usaoさんの「マップチップU」のようなマップチップがご所望だとしたら、
私なら一マスごとに
  • 壁(ブロック)
  • 通路
  • ワープ
の属性を持たせます。
パックマンは毎tick
「自分のいるマスの属性」、「進行方向のマスの属性」
を観測し、処理を行うというのはどうでしょう。
► スポイラーを表示
壁の処理の方法は
こちらのページなど参考になるのではないでしょうか?
http://dixq.net/g/26.html
[07月28日 訂正]
パックマンはブロック単位の移動を行っているわけではないみたいです。
私の知識・理解不足でした<(_ _)>

オフトピック
アクションゲームを作りたい
->衝突判定をどうにかしなければ!
というのは、まあ、わかりますが、
前回、衝突判定ができずに不完全燃焼してしまいましたよね?

今回は衝突判定を抜きにゲームを作ることができるか試してみるといいんじゃないでしょうか?
オフトピック
初心者であることを認められたようですが、
ぶっちゃけどうでもいいです^^;

質問者さんが初心者様でも達人様でも回答者さんと一緒になって問題解決ができれば
それでいいとおもいます^^

目に見える形で示すことも大事ですが、態度、行動で示す方が説得力があると思います。
目指せ!脱☆プログラミング初心者!^p^
最後に編集したユーザー purin52002 on 2017年7月28日(金) 17:21 [ 編集 1 回目 ]
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#28

投稿記事 by ISLe » 7年前

オフトピック
パックマンの迷路は、8x8のチップ画像で構成されています。
直線と角が数パターンあり、それらの組み合わせです。

パックマンの迷路のチップ画像は、壁がチップの中央を通るように描かれています。
パックマンは(モンスターも)迷路の壁の描かれたチップの半分といつも重なっています。
曲がり角に達するより先に、重なっているチップの種類で曲がり角かどうか容易に判定できるというわけです。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#29

投稿記事 by keito94 » 7年前

purin52002 さんが書きました: 壁の処理の方法は
こちらのページなど参考になるのではないでしょうか?
http://dixq.net/g/26.html
そのページを参考に、コードを書いてみました。
► スポイラーを表示
purin52002 さんが書きました: 今回は衝突判定を抜きにゲームを作ることができるか試してみるといいんじゃないでしょうか?
衝突判定は僕にはまだ早いということですね…。
この一件が一段落したらまたその件について質問しますね。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#30

投稿記事 by keito94 » 7年前

少し、No.29のコードを修正。
► スポイラーを表示
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#31

投稿記事 by purin52002 » 7年前

コードを載せるのはいいんですけど、「お疲れ様です^^」としかコメントが返せません^^;
コードを載せるだけなら日記とかに進捗報告として載せるというのはどうですか?
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#32

投稿記事 by keito94 » 7年前

purin52002 さんが書きました:コードを載せるのはいいんですけど、「お疲れ様です^^」としかコメントが返せません^^;
コードを載せるだけなら日記とかに進捗報告として載せるというのはどうですか?
今、当サイトに書かれてあるコードを参考に、衝突判定を使わない当たり判定を書いたのですが、
なかなか当たり判定が認識されず、どうすればいいのかわからないという質問をしようと思っていたんです…。
日記に載せるべき内容ならすでに乗せてますよ…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#33

投稿記事 by ISLe » 7年前

ゲームプログラミングの館の移動サンプルプログラムは方向転換がブロック単位です。
ちなみにわたしがNo.8に書いたパックマンの動きとは合致しません。

仕切り直しが発生しているのでしょうか。
現状どういう状況なのでしょう。

「パックマン」とはパックマンではなく、とにかく目に付いたコードを切り貼りしてそれっぽく動くことを目指すところのものなのでしょうか。
そもそもkeito94さんが何をもって「それっぽい」と判断されるのか分かりません。

なにがなんだか。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#34

投稿記事 by keito94 » 7年前

ISLe さんが書きました: 現状どういう状況なのでしょう。
No.28で書いたとおり、壁ですり抜けて困っています。
どうしたらサンプルコードみたいにパックマンが壁で止まってくれるか?
それを考えていたところです。
ISLe さんが書きました: そもそもkeito94さんが何をもって「それっぽい」と判断されるのか分かりません。
パックマンが本家パックマンみたいな動きをすることです。
でも、なかなか大変ですね…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#35

投稿記事 by purin52002 » 7年前

失礼しました。
余計なことを言って質問者さんも回答者さんも混乱させてしまいました^^;
本家パックマンみたいな動きですと、私が投稿した方法とは合致しないかもしれません。
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#36

投稿記事 by ISLe » 7年前

keito94 さんが書きました:でも、なかなか大変ですね…。
それは、最初にどうするか・どうしたいか決めずに、目に付いたコードを適当に切り貼りしているからですよ。

きちんと最初に決めたことに必要な部分だけを参考にしたり、最初に決めたことに必要な改変をしたり、中身を理解して軸がブレないようにやればもっと楽にできるはずです。

混ぜたらダメなコードを混ぜて使って絶対にうまくいくわけがない。

あと、ブロックの当たり判定部分について、keito94さんは過去のトピでソースファイルをzipで添付したことがあるだけでまだいちども説明してない。
わたしが「パックマン風にはまったくの不向き」と書いた部分のこと。
そこは現在どうなっているのか。
いまもそのままなのであればうまくいかないのが当然だと思うのですが。

まぜるなきけん。
最後に編集したユーザー ISLe on 2017年7月28日(金) 17:49 [ 編集 1 回目 ]

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#37

投稿記事 by keito94 » 7年前

ISLeさん、あなたがそう言うなら、ソースコードを公開しますね。
purinさんが出した方法では、本人も言っているとおり不向きかもしれませんが…。
当たり判定がバグバグであることも了承していただければと…。
本家パックマンに近い当たり判定への鍵もあったら教えてください。
添付ファイル
Question.zip
(3.45 KiB) ダウンロード数: 659 回
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#38

投稿記事 by ISLe » 7年前

コンテナを使った当たり判定は削除されていますね。
#コンテナ自体は残ってるけど。

どうしてブロックをすり抜けてしまうのか、については基本すぎるので、ちゃんとデバッグしてください、としか言えません。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおけるワープ通路の実装の仕方がわからない。

#39

投稿記事 by ISLe » 7年前

keito94 さんが書きました:本家パックマンに近い当たり判定への鍵もあったら教えてください。
これまでの投稿に書いたことでは足りませんか?

ちゃんと読めば、パックマンには、いわゆる壁との当たり判定も、このトピの主題であるワープ判定も、もともと必要ないことが分かると思うんですが。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#40

投稿記事 by keito94 » 7年前

ISLeさんの親切な言葉で、ワープトンネルは画面端を接続させることで実装させるということはわかりました。

コード:

 # ワープ判定。
        if self.fpx == 0.0:
            self.fpx = 640.0
        if self.fpx == 640.0:
            self.fpx = 0.0
        if self.fpy == 0.0:
            self.fpy = 480.0
        if self.fpy == 480.0:
            self.fpy = 0.0

ですが今のままでは問題がありそうです…。
改善案はありませんか?
ISLe さんが書きました: パックマンの迷路は、8x8のチップ画像で構成されています。
直線と角が数パターンあり、それらの組み合わせです。

パックマンの迷路のチップ画像は、壁がチップの中央を通るように描かれています。
パックマンは(モンスターも)迷路の壁の描かれたチップの半分といつも重なっています。
曲がり角に達するより先に、重なっているチップの種類で曲がり角かどうか容易に判定できるというわけです。
でも、画像を何個作ればいいのかわからないので、マップチップのサンプルを自作でください。
ということは、と思い、今問題となっている部分を修正しています。
そのマップを処理するためにマップエディターを作ろうと思ってますので頑張ります!!
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#41

投稿記事 by ISLe » 7年前

keito94 さんが書きました:でも、画像を何個作ればいいのかわからないので、マップチップのサンプルを自作でください。
何でそんなに上から目線なんですか。
あなたの指示で動く義務はないのでお断りします。

ネットで検索すればパックマンのスクリーンショットくらい簡単に見付かるでしょうに。


他所で、パックマンはパックマンとは異なる、というのを肯定されてますよね。

本家パックマンと異なる本家パックマンみたいなもの、というのは難解で理解が追い付きません。

本家パックマンのことなら分かるんですけどね。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#42

投稿記事 by keito94 » 7年前

ISLe さんが書きました: 他所で、パックマンはパックマンとは異なる、というのを肯定されてますよね。

本家パックマンと異なる本家パックマンみたいなもの、というのは難解で理解が追い付きません。

本家パックマンのことなら分かるんですけどね。
ごめんなさいパックマン風というのはパックマンクローンという意味でした…。
訂正させてください…。
オフトピック
keito94 さんが書きました: でも、画像を何個作ればいいのかわからないので、マップチップのサンプルを自作でください。
ああ、怠惰だ~、怠惰怠惰怠惰怠惰~!!
自分で作っておきながら製作依頼をしてしまった私の怠惰をお許しくださいませぇ~!
最後に編集したユーザー keito94 on 2017年7月29日(土) 17:21 [ 編集 1 回目 ]
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#43

投稿記事 by ISLe » 7年前

クローンの意味分かってます?
パックマンを目指していると言ったり目指していないと言ったりあげくにクローン。
支離滅裂。

クローン作るのを手伝って欲しいならオリジナルがどうなっているか観察して分かることをすべて具体的に発表してください。
いまのところそれはkeito94さんでなくわたしがやっている。
keito94さんが自分からは何もしないから支離滅裂なのですよ。

オフトピック
keito94さんは回答者をどんなふうに見ているのだろうか。
自分と同じ下手の横好き(!)が集まっているとでも思っているのだろうか。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#44

投稿記事 by keito94 » 7年前

ISLe さんが書きました:クローンの意味分かってます?
パックマンを目指していると言ったり目指していないと言ったりあげくにクローン。
支離滅裂。
クローンの意味すらわからなかった…。ごめんなさい。さっきのクローン発言やパックマンを目指していない発言は取り消しとさせてください。
とにかくパックマンっぽいゲームを目指しているんですけど、ボクの頭の中が右往左往してしまって…。
ボクが今考えていることを順序立てて説明しますね…。
①テトリスがおもったよりも難しそうだったからパックマンっぽいゲームを作ろうと考えた。
②マップ表示と、当たり判定は一通りできた。
③ワープトンネルの実装をしようとしたが…
④ワープ判定をするマップチップや、コンテナは使わないと指摘された。
⑤曲道がちゃんと実装されてないと事に気づき、色々聞いてみたところ衝突判定は関係ないよと言われた。
⑥今はパックマンの仕様に合うよう様々な方面で悪戦苦闘中…。(←今ここ)
オフトピック
回答者さんはちゃんと知識などがある方だと思ってますよ…。
下手の横好きだなんてとんでもない。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#45

投稿記事 by ISLe » 7年前

オフトピック
keito94 さんが書きました:回答者さんはちゃんと知識などがある方だと思ってますよ…。
下手の横好きだなんてとんでもない。
そういうことでなくて…
keito94さんは回答者を、問題解決する方法を教えてくれる先生じゃなくて、作りたいものを一緒に作る仲間みたいに見てるんじゃないだろうかってことなんですけどね。

あと、下手の横好きってのは知識や技術のありなしでなくて、本物かどうかってことですよ。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#46

投稿記事 by keito94 » 7年前

ISLe さんが書きました: keito94さんは回答者を、問題解決する方法を教えてくれる先生じゃなくて、作りたいものを一緒に作る仲間みたいに見てる
いいえ、そう考えてないですよ!!
回答者は、解決方法を教えてくれてると思います!!

ところで、質問ですが、今までの書き込みをよく読んで、パックマンの仕様に合うように変更しているのですが…。
座標が256以上になる部分は反対側に表示されます。
どうやって、32x32のキャラを反対側に表示するのかがわかりません。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#47

投稿記事 by ISLe » 7年前

オフトピック
keito94 さんが書きました:
ISLe さんが書きました: keito94さんは回答者を、問題解決する方法を教えてくれる先生じゃなくて、作りたいものを一緒に作る仲間みたいに見てる
いいえ、そう考えてないですよ!!
回答者は、解決方法を教えてくれてると思います!!
例えばの話ですが、回答者の中にバンダイナムコから公式にリリースされているパックマンの開発に関係したひととかがいて、そういうひとに向かって「あなたの考え方のコードください」とか「あなたがマップチップ自作してください」とか平然と言うのは、とてつもなくあつかましいことだと思うんですよ。

回答者を下に見てる意識があってもなくても、あつかましいことには違いはないですけどね。
keito94 さんが書きました:どうやって、32x32のキャラを反対側に表示するのかがわかりません。
反対側に表示すればいいだけですよ。

でも原作と同じ形の迷路なら反対側に同時に表示される状況にはならないですが。
けっきょくどこまでパックマンに寄せることになってるのでしょうか。
そこらへん、はっきりしてください。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#48

投稿記事 by keito94 » 7年前

どうすればいいのか、
実は頭のなかで考えてました。
画面端に来たら、反対に表示させる…。
こうでしょうか?

コード:

        # パックマンを反対側へ表示させる。
        if self.rect.x == 640:
            self.rect.x = 0
        if self.rect.x == 0:
            self.rect.x = 640
        if self.rect.y == 480:
            self.rect.y = 0
        if self.rect.y == 0:
            self.rect.y = 480
…でも、パックマンが反対側へ移動しません。
どうしたらいいのでしょうか?
でも原作と同じ形の迷路なら反対側に同時に表示される状況にはならないですが。
そうですよね…。
けっきょくどこまでパックマンに寄せることになってるのでしょうか。
そこらへん、はっきりしてください。
端部は違えど、なるべく本家に近づけたい…。
そう思っています。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#49

投稿記事 by keito94 » 7年前

自分でデバッグをして、なんか足りないなと思い、もうひと押ししたところ、ワープトンネルの実装ができました。
これで、当初の目標は達成できたのですが、ファイルの読み込みで今悪戦苦闘を強いられているんだ!!

コード:

    def update(self):
        pressed_key = pygame.key.get_pressed()

        if pressed_key[K_RIGHT]:
            self.walk_flag = True
            self.temp_key = Bit_RIGHT
        if pressed_key[K_LEFT]:
            self.walk_flag = True
            self.temp_key = Bit_LEFT
        if pressed_key[K_UP]:
            self.walk_flag = True
            self.temp_key = Bit_UP
        if pressed_key[K_DOWN]:
            self.walk_flag = True
            self.temp_key = Bit_DOWN

        # パックマンを反対側へ表示させる。
        if self.rect.x >= 608:
            self.fpx = 0.0
        elif self.rect.x <= 0:
            self.fpx = 608.0
        elif self.rect.y >= 448:
            self.fpy = 0.0
        elif self.rect.y <= 0:
            self.fpy = 448.0
        else:
            pass

        self.Move()

        self.dir_change()

        # self.rectを更新するついでに整数座標に戻します。
        self.rect.x = int(self.fpx)
        self.rect.y = int(self.fpy)
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

アバター
keito94
記事: 264
登録日時: 7年前
連絡を取る:

Re: パックマン風ゲームにおける当たり判定について

#50

投稿記事 by keito94 » 7年前

ふうん、マップデータファイル読み込みの件は一時はどうなるかと思ったけど、
なんとか頑張って読み込めるようにできた…。
一応解決とさせてください。
オフトピック
ここまで質問に手間取ったのは自分の傲慢さが、あると思う…。
今から傲慢な態度を改めないとな…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

返信

“C言語何でも質問掲示板” へ戻る