スネークゲームを作るための Pygame コード

スネークゲームを作るための Pygame コード

使用されるPygame関数

スネークゲームで使用される関数

関数説明する
初期化() pygame の初期化
ディスプレイモードの設定()タプルまたはリストを引数としてウィンドウを作成する
アップデート()更新画面
やめる()初期化解除のための pygame
キャプションの設定()画面上部にテキストを設定する
イベント.get()すべてのイベントのリストを返します
表面.fill()画面を単色で塗りつぶす
時間.時計()追跡時間
フォント.Font()フォントの設定

スクリーンの作成

pygameウィンドウを作成するには、関数display.set_mode()を使用します。同時に、プログラムが正しく開始および終了できるように、プログラムの最初と最後にinit()quit()関数を実行する必要もあります。

pygameをインポートする
pygame.init()
dis = pygame.display.set_mode((400,300))
pygame.display.update()
pygame.quit()
やめる()


これにはプログラムを実行する必要があり、次の結果が得られます。

しかし、このコードでは、プログラムの作成は一瞬で終わってしまいます。プログラムウィンドウを維持するコードを追加しましょう。

pygameをインポートする
pygame.init()
dis = pygame.display.set_mode((400,300))
pygame.display.update()
pygame.display.set_caption('Edureka によるスネークゲーム')
ゲームオーバー=偽
ゲームオーバーではない場合:
    pygame.event.get() のイベントの場合:
        print(event) # すべてのイベントを出力します pygame.quit()
やめる()


ゲーム ウィンドウの名前を追加し、 pygameウィンドウで操作するときにPythonコンソールですべてのイベントを確認することもできます。

次にクローズ応答イベントを追加します

pygame.init()
dis = pygame.display.set_mode((400, 300))
pygame.display.update()
pygame.display.set_caption('ヘビ')
ゲームオーバー = False
ゲームオーバーではない場合:
    pygame.event.get() のイベントの場合:
        event.type == pygame.QUITの場合:
            ゲームオーバー=真

pygame.quit()
やめる()


ゲーム ウィンドウが設定されたので、 snakeを描画できます。

ヘビの作成

まず、 snakefoodscreenなどを表すいくつかの色変数を作成します。

pygame.init()
dis = pygame.display.set_mode((400, 300))
pygame.display.update()
pygame.display.set_caption('ヘビ')

青=(0,0,255)
赤=(255,0,0)

ゲームオーバー = False
ゲームオーバーではない場合:
    pygame.event.get() のイベントの場合:
        event.type == pygame.QUITの場合:
            ゲームオーバー=真

    pygame.draw.rect(dis, 青, [200, 150, 10, 10]) を描画します。
    pygame.display.update()

pygame.quit()
やめる()


このようにして、小さな青い点であるヘビが作成されます。

ヘビを動かす

snakeの動きを実現するために、使用する必要があるキー イベントは KEYDOWN です。これには、それぞれ上、下、左、右を表す 4 つのキー値 K_UP、K_DOWN、K_LEFT、K_RIGHT が含まれます。

pygame.init()
pygame.display.set_caption('ヘビ')
白 = (255, 255, 255)
黒 = (0, 0, 0)
赤 = (255, 0, 0)

dis = pygame.display.set_mode((800, 600))

ゲームオーバー = False

1 = 300 倍
y1 = 300

x1_変更 = 0
y1_変化 = 0

クロック = pygame.time.Clock()

ゲームオーバーではない場合:
    pygame.event.get() のイベントの場合:
        event.type == pygame.QUITの場合:
            ゲームオーバー = 真
        event.type == pygame.KEYDOWNの場合:
            event.key == pygame.K_LEFTの場合:
                x1_変化 = -10
                y1_変化 = 0
            elif event.key == pygame.K_RIGHT:
                x1_変更 = 10
                y1_変化 = 0
            elif event.key == pygame.K_UP:
                y1_変化 = -10
                x1_変更 = 0
            elif event.key == pygame.K_DOWN:
                y1_変化 = 10
                x1_変更 = 0

    x1 += x1_変化
    y1 += y1_変化
    塗りつぶし(白)
    pygame.draw.rect(dis, 黒, [x1, y1, 10, 10]) を描画します。

    pygame.display.update()

    時計.ティック(30)

pygame.quit()
やめる()

ヘビが移動できるように x 座標と y 座標を更新するx1_changey1_change変数を作成しました。

ゲームオーバーの処理

スネークゲームでは、 snakeがゲーム画面から外れるとゲームは失敗します。この部分のロジックについては以下で説明します。

pygameをインポートする
インポート時間

pygame.init()
pygame.display.set_caption('ヘビ')
白 = (255, 255, 255)
黒 = (0, 0, 0)
赤 = (255, 0, 0)

ディス幅 = 600
高さ = 400
dis = pygame.display.set_mode((dis_width, dis_width))

ゲームオーバー = False

x1 = ディス幅 / 2
y1 = ディス高さ / 2

スネークブロック = 10

x1_変更 = 0
y1_変化 = 0

クロック = pygame.time.Clock()
ヘビのスピード = 30

font_style = pygame.font.Font("C:/Windows/Fonts/STFANGSO.TTF", 20)


defメッセージ(メッセージ、色):
    メッセージ = font_style.render(メッセージ、True、色)
    dis.blit(メッセージ、[dis_width / 2, dis_height / 2])


ゲームオーバーではない場合:
    pygame.event.get() のイベントの場合:
        event.type == pygame.QUITの場合:
            ゲームオーバー = 真
        event.type == pygame.KEYDOWNの場合:
            event.key == pygame.K_LEFTの場合:
                x1_change = -snake_block
                y1_変化 = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = スネークブロック
                y1_変化 = 0
            elif event.key == pygame.K_UP:
                y1_change = -snake_block
                x1_変更 = 0
            elif event.key == pygame.K_DOWN:
                y1_change = スネークブロック
                x1_変更 = 0

    x1 >= dis_width または x1 < 0 または y1 >= dis_height または y1 < 0 の場合:
        ゲームオーバー = 真

    x1 += x1_変化
    y1 += y1_変化
    塗りつぶし(白)
    pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block])

    pygame.display.update()

    クロック.ティック(snake_speed)

メッセージ("失敗しました。ゲームを再起動してください!"、赤)
pygame.display.update()
時間.スリープ(2)

pygame.quit()
やめる()

食事を増やす

貪欲なヘビなので、当然餌を与える必要があります。では、餌の話をしましょう。

pygameをインポートする
インポート時間
ランダムにインポート

pygame.init()
pygame.display.set_caption('ヘビ')

白 = (255, 255, 255)
黒 = (0, 0, 0)
赤 = (255, 0, 0)
青 = (0, 0, 255)

ディス幅 = 800
高さ = 600

dis = pygame.display.set_mode((dis_width, dis_height))

クロック = pygame.time.Clock()

スネークブロック = 10
ヘビのスピード = 30

font_style = pygame.font.Font("C:/Windows/Fonts/STFANGSO.TTF", 20)


defメッセージ(メッセージ、色):
    メッセージ = font_style.render(メッセージ、True、色)
    dis.blit(メッセージ、[dis_width / 3, dis_height / 3])


def gameLoop(): # 関数の作成
    game_over = False
    game_close = False

    x1 = ディス幅 / 2
    y1 = ディス高さ / 2

    x1_変更 = 0
    y1_変化 = 0

    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0

    ゲームオーバーではない場合:

        game_close == True の場合:
            塗りつぶし(白)
            メッセージ("失敗しました。ゲームを再起動してください!"、赤)
            pygame.display.update()

            pygame.event.get() のイベントの場合:
                event.type == pygame.KEYDOWNの場合:
                    event.key == pygame.K_qの場合:
                        ゲームオーバー = 真
                        game_close = False
                    event.key == pygame.K_c の場合:
                        ゲームループ()

        pygame.event.get() のイベントの場合:
            event.type == pygame.QUITの場合:
                ゲームオーバー = 真
            event.type == pygame.KEYDOWNの場合:
                event.key == pygame.K_LEFTの場合:
                    x1_change = -snake_block
                    y1_変化 = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = スネークブロック
                    y1_変化 = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_変更 = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = スネークブロック
                    x1_変更 = 0

        x1 >= dis_width または x1 < 0 または y1 >= dis_height または y1 < 0 の場合:
            game_close = 真

        x1 += x1_変化
        y1 += y1_変化
        塗りつぶし(白)
        pygame.draw.rect(dis, blue, [foodx, foody, snake_block, snake_block])
        pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block])
        pygame.display.update()

        x1 == foodx かつ y1 == foody の場合:
            print("良いですね!")
        クロック.ティック(snake_speed)

    pygame.quit()
    やめる()

ゲームループ()

メイン関数として関数gameLoopを作成し、ヘビの餌を初期化し、ゲームを再開および終了するためのキーボードの c および q キーワードを追加しました。

ヘビの成長

次に、 snakeを食べた後、ヘビの長さを伸ばしていきます。これもゲームの基本ルールです。

pygameをインポートする
インポート時間
ランダムにインポート

pygame.init()
pygame.display.set_caption('ヘビ')
font_style = pygame.font.Font("C:/Windows/Fonts/STFANGSO.TTF", 20)
score_font = pygame.font.Font("C:/Windows/Fonts/STCAIYUN.TTF", 30)

白 = (255, 255, 255)
黄色 = (255, 255, 102)
黒 = (0, 0, 0)
赤 = (213, 50, 80)
緑 = (0, 255, 0)
青 = (50, 153, 213)

ディス幅 = 600
高さ = 400

dis = pygame.display.set_mode((dis_width, dis_height))

クロック = pygame.time.Clock()

スネークブロック = 10
ヘビのスピード = 15


定義 our_snake(snake_block, snake_list):
    snake_list 内の x について:
        pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])


defメッセージ(メッセージ、色):
    メッセージ = font_style.render(メッセージ、True、色)
    dis.blit(メッセージ、[dis_width / 6, dis_height / 3])


ゲームループ()を定義します:
    ゲームオーバー = False
    game_close = False

    x1 = ディス幅 / 2
    y1 = ディス高さ / 2

    x1_変更 = 0
    y1_変化 = 0

    スネークリスト = []
    ヘビの長さ = 1

    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0

    ゲームオーバーではない場合:

        game_close == True の場合:
            塗りつぶし(青)
            メッセージ("失敗しました。ゲームを再起動してください!"、赤)

            pygame.display.update()

            pygame.event.get() のイベントの場合:
                event.type == pygame.KEYDOWNの場合:
                    event.key == pygame.K_qの場合:
                        ゲームオーバー = 真
                        game_close = False
                    event.key == pygame.K_c の場合:
                        ゲームループ()

        pygame.event.get() のイベントの場合:
            event.type == pygame.QUITの場合:
                ゲームオーバー = 真
            event.type == pygame.KEYDOWNの場合:
                event.key == pygame.K_LEFTの場合:
                    x1_change = -snake_block
                    y1_変化 = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = スネークブロック
                    y1_変化 = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_変更 = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = スネークブロック
                    x1_変更 = 0

        x1 >= dis_width または x1 < 0 または y1 >= dis_height または y1 < 0 の場合:
            ゲーム終了 = 真
        x1 += x1_変化
        y1 += y1_変化
        塗りつぶし(青)
        pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
        ヘビの頭 = []
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        len(snake_List) > 長さ_of_snakeの場合:
            snake_List[0]より

        snake_List[:-1]内のxの場合:
            x == snake_Headの場合:
                ゲーム終了 = 真

        our_snake(snake_block、snake_List) は、

        pygame.display.update()

        x1 == foodx かつ y1 == foody の場合:
            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
            ヘビの長さ += 1

        クロック.ティック(snake_speed)

    pygame.quit()
    やめる()
    ゲームループ()

スコアを表示

最後にスコアを表示しましょう。結局のところ、プレイヤーのスコアはゲームにとって非常に重要です。

pygameをインポートする
インポート時間
ランダムにインポート

pygame.init()
pygame.display.set_caption('ヘビ')
font_style = pygame.font.Font("C:/Windows/Fonts/STFANGSO.TTF", 20)
score_font = pygame.font.Font("C:/Windows/Fonts/STCAIYUN.TTF", 30)

白 = (255, 255, 255)
黄色 = (255, 255, 102)
黒 = (0, 0, 0)
赤 = (213, 50, 80)
緑 = (0, 255, 0)
青 = (50, 153, 213)

ディス幅 = 600
高さ = 400

dis = pygame.display.set_mode((dis_width, dis_height))

クロック = pygame.time.Clock()

スネークブロック = 10
ヘビのスピード = 15


def Your_score(スコア):
    value = score_font.render("あなたのスコア: " + str(score), True, yellow)
    dis.blit(値、[0, 0])


定義 our_snake(snake_block, snake_list):
    snake_list 内の x について:
        pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])


defメッセージ(メッセージ、色):
    メッセージ = font_style.render(メッセージ、True、色)
    dis.blit(メッセージ、[dis_width / 6, dis_height / 3])


ゲームループ()を定義します:
    game_over = False
    game_close = False

    x1 = ディス幅 / 2
    y1 = ディス高さ / 2

    x1_変更 = 0
    y1_変化 = 0

    スネークリスト = []
    ヘビの長さ = 1

    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0

    ゲームオーバーではない場合:

        game_close == True の場合:
            塗りつぶし(青)
            メッセージ("失敗しました。ゲームを再起動してください!"、赤)
            あなたのスコア(ヘビの長さ - 1)
            pygame.display.update()

            pygame.event.get() のイベントの場合:
                event.type == pygame.KEYDOWNの場合:
                    event.key == pygame.K_qの場合:
                        ゲームオーバー = 真
                        game_close = False
                    event.key == pygame.K_c の場合:
                        ゲームループ()

        pygame.event.get() のイベントの場合:
            event.type == pygame.QUITの場合:
                ゲームオーバー = 真
            event.type == pygame.KEYDOWNの場合:
                event.key == pygame.K_LEFTの場合:
                    x1_change = -snake_block
                    y1_変化 = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = スネークブロック
                    y1_変化 = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_変更 = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = スネークブロック
                    x1_変更 = 0

        x1 >= dis_width または x1 < 0 または y1 >= dis_height または y1 < 0 の場合:
            game_close = 真
        x1 += x1_変化
        y1 += y1_変化
        塗りつぶし(青)
        pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
        ヘビの頭 = []
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        len(snake_List) > 長さ_of_snakeの場合:
            snake_List[0]より

        snake_List[:-1]内のxの場合:
            x == snake_Headの場合:
                game_close = 真

        our_snake(snake_block、snake_List) は、
        あなたのスコア(ヘビの長さ - 1)

        pygame.display.update()

        x1 == foodx かつ y1 == foody の場合:
            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
            ヘビの長さ += 1

        クロック.ティック(snake_speed)

    pygame.quit()
    やめる()


ゲームループ()

ここでは、プレイヤーのスコアを記録するためのYour_score関数を作成します。

このようにして、簡単なスネークゲームが完成しました。

最後に、ゲーム時間をより快適にするために、ゲームにバックグラウンドミュージックを追加しましょう。

# 音楽を再生する pygame.init()
pygame.mixer.music.load(r"Game.mp3")
pygame.mixer.music.play()


100 行の Pygame コードでスネーク ゲームを作成する方法についての記事はこれで終わりです。Pygame でスネーク ゲームを作成する方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Pygame をベースにしたスネークゲームの実装例
  • Pygame をベースにしたシンプルなスネーク ゲームの実装
  • Python 実践: Pygame を使用して Snake ゲームを実装する (パート 2)
  • Python pygame の活用でスネークゲームを実現(I)
  • Pythonのサードパーティライブラリpygameを使用してスネークゲームを書く
  • Python は pygame ツールキットを使用してスネーク ゲーム (カラフル バージョン) を実装します。
  • Pygame でスネーク ゲームを実装する (パート 2)
  • Pygame でスネーク ゲームを実装する (パート 1)

<<:  MacOS で Docker を使用して MySQL マスター スレーブ データベースを作成する方法

>>:  HTML シンボルからエンティティへのアルゴリズムのチャレンジ

推薦する

CSS の複雑なセレクターと CSS のフォントスタイルと色属性の詳細な説明

これまでに CSS の基本的なセレクターをいくつか学習しましたが、今日は CSS の複雑なセレクター...

MySQL公式エクスポートツールmysqlpumpの使用

目次導入説明書実際の経験長所と短所総括する導入mysqlpump は mysqldump の派生です...

CSS3 マウスホバー遷移ズーム効果

以下は、純粋な CSS で記述された画像マウスホバーズーム効果です。実際、基本原理は非常に単純です。...

HTMLファイルで外部CSSファイルを導入する場合のパスの書き方について簡単にまとめます

1. 外部CSSファイルの基本スタイルをインポートする<link> タグを使用して外部ス...

HTML にネストされた div の無効なマージンに対する解決策

div がネストされているときに margin が機能しない問題の解決策を次に示します。さて、マージ...

ウェブページ経由で jar パッケージを Nexus にアップロードする方法

Maven を使用してプロジェクトを管理する場合、jar パッケージをプライベート ウェアハウスにア...

JavaScript で 2 次元配列を作成するためのヒント

Js での 2 次元配列の作成:まず、JavaScript は 1 次元配列のみをサポートしています...

Linux で特定の時間にコマンドを実行する方法

先日、rsync を使用して LAN 上の別のシステムに大きなファイルを転送していました。非常に大き...

Hadoop 2.Xの新機能、ごみ箱機能の説明

ごみ箱機能をオンにすると、削除されたファイルの元のデータをタイムアウトなしで復元できるため、誤って削...

mysql MDLメタデータロックの詳細な分析

序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...

ミニプログラムの基本的な使用方法の知識ポイント(非常に包括的で、お勧めです!)

目次アプリを登録するときに何をすればよいですか?ページを登録するときに通常何をする必要がありますか?...

Vue カスタム箇条書きボックス効果 (確認ボックス、プロンプトボックス)

この記事の例では、参考のためにVueカスタムポップアップ効果の具体的なコードを共有しています。具体的...

MySQLインジェクションバイパスフィルタリング技術の概要

まず、GIF 操作を見てみましょう。ケース1: スペースがフィルタリングされるスペースの代わりに角括...

Web スライスとは何ですか?

IE8 の新機能 Web スライス (Web スライス) Microsoft は 3 月 20 日...

JavaScript ES6 モジュールの詳細な説明

目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...