pygame は PC 側 WeChat オナニー ゲームを開発します
1. プロジェクトの紹介
1. 概要
このプロジェクトは、かつて人気があった WeChat オナニー ゲームに似ています。ゲームはPython言語を使用し、主にpygame APIを使用して開発されます。ゲームは最終的に Python ソース ファイル game.py の形式で完成します。ゲームに参加するには python game.py を実行するだけです。
ゲームの最終的な効果のスクリーンショットは次のとおりです:
2. 知識ポイント
この実験では、Linux デスクトップ環境で Python と pygame を使用して小さなゲームを迅速に開発する方法を紹介します。このゲームを通じて pygame ゲーム開発を始めることができます。
3. 参考ドキュメント
コードリファレンスは Kill-Console によって作成された PythonShootGame です
ドキュメントリファレンスは pygame ドキュメントです
4. 依存関係パッケージをインストールします
(以下のコンテンツは研究室の建物の公式 Web サイトに実装する必要があります)必要ない場合はスキップできます)
この実験に必要なコードの実行をサポートするには、pygame ライブラリをインストールする必要があります。
実験環境で Xfce ターミナルを開き、次のコマンドを入力して pygame をインストールします。パスワードも shiyanlou の入力を求められます:
$ sudo apt-get update$ sudo apt-get install python-pygame
2. 技術設計
1. ゲームキャラクター
このゲームで必要なキャラクターには、プレイヤー航空機、敵航空機、爆弾が含まれます。ユーザーはキーボードを使用して画面上のプレイヤーの航空機の位置を移動し、さまざまな場所で敵の航空機を攻撃できます。そこで、Player、Enemy、Bullet の 3 つのクラスが 3 人のゲーム キャラクターに対応するように設計されています。
プレイヤーの場合、必要な操作は射撃と移動であり、上下左右の4つの状況に分かれています。
敵の場合は、移動するだけで画面上部から出現し、画面下部に移動するだけなので比較的簡単です。
Bullet の場合、飛行機と同じで、一定の速度で移動する必要があります。
2. ゲーム機能
WeChat オナニーをプレイしたことのある友人はよく知っていると思いますが、ここではゲームが簡略化されています。飛行機の速度は固定で、爆弾の速度も固定で、プレイヤー飛行機を画面上からランダムに出現させて一定の速度で下に落ちていくのが基本操作です。プレイヤーの飛行機から送信され、ターゲットの飛行機に当たると破壊されます。プレイヤーの飛行機に触れるとゲームが終了し、スコアが表示されます。
3. コードの実装
1. インターフェイスの表示
コードの実装に必要なリソース イメージ ファイルは、次のコマンドで取得できます:
$git clone https://github.com/shiyanlou/PythonShootGame.git
詳細な手順
pygameを初期化します
ゲームインターフェイスのサイズ、背景画像、タイトルを設定します
ゲームのメインループは、ゲームインターフェイスの初期化、更新、終了を処理する必要があります
プレイヤーの航空機を表示します(リソース/画像/シュート)コードで使用されている PNG 画像にはさまざまな航空機が含まれています。pygame.image の地下 API を使用して、位置に応じてshoot.png 内の必要な画像をインターセプトするだけです)
サンプルコード
#1. 初始化pygame pygame.init() #2. 设置游戏界面大小、背景图片及标题 # 游戏界面像素大小 screen = pygame.display.set_mode((480, 800)) # 游戏界面标题 pygame.display.set_caption('飞机大战') # 背景图 background = pygame.image.load('resources/image/background.png').convert() # Game Over的背景图 game_over = pygame.image.load('resources/image/gameover.png') # 飞机图片 plane_img = pygame.image.load('resources/image/shoot.png') # 截取玩家飞机图片 player = plane_img.subsurface(pygame.Rect(0, 99, 102, 126)) #3. 游戏主循环内需要处理游戏界面的初始化、更新及退出 while True: # 初始化游戏屏幕 screen.fill(0) screen.blit(background, (0, 0)) # 显示玩家飞机在位置[200,600] screen.blit(player, [200, 600]) # 更新游戏屏幕 pygame.display.update() # 游戏退出事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit()
2.イベント処理
メインループイベント(上下左右のキー操作)でキーボード入力を処理し、ゲーム操作のインタラクション(プレイヤーの機体の上下左右の動き)を増加させます。
詳細な手順
キーボードイベントを取得する(上下左右キー)
キーボードイベントを処理する(航空機の位置を移動する)
上記のステップコードをゲームのメインループに挿入します
サンプルコード
#1. 获取键盘事件(上下左右按键) key_pressed = pygame.key.get_pressed() #2. 处理键盘事件(移动飞机的位置) if key_pressed[K_w] or key_pressed[K_UP]: player.moveUp() if key_pressed[K_s] or key_pressed[K_DOWN]: player.moveDown() if key_pressed[K_a] or key_pressed[K_LEFT]: player.moveLeft() if key_pressed[K_d] or key_pressed[K_RIGHT]: player.moveRight()
3. *** 処理
*** がプレイヤーの機体から発せられ、インターフェース上を一定の速度で移動します。
詳しい手順
***を生成するには、起動頻度を制御する必要があります
一定の速度で移動***
画面外に移動したら***を削除します
効果を処理する***(次のセクション) の攻撃を受ける敵機 処理)
サンプルコード
#1. 生成***,需要控制发射频率 # 首先判断玩家飞机没有被击中 if not player.is_hit: if shoot_frequency % 15 == 0: player.shoot(bullet_img) shoot_frequency += 1 if shoot_frequency >= 15: shoot_frequency = 0 for bullet in player.bullets: #2. 以固定速度移动*** bullet.move() #3. 移动出屏幕后删除*** if bullet.rect.bottom < 0: player.bullets.remove(bullet) # 显示*** player.bullets.draw(screen)
4. 敵機の処理
敵機はインターフェースの上部にランダムに生成され、一定の速度で下に移動する必要があります。
詳しい手順
敵航空機を生成するには、生成頻度を制御する必要があります
敵航空機を移動します
敵航空機とプレイヤー航空機の間の衝突効果を処理します
画面外に移動したら敵航空機を削除します
*** による攻撃を受けた敵航空機の効果の処理
サンプルコード
#1. 生成敌机,需要控制生成频率 if enemy_frequency % 50 == 0: enemy1_pos = [random.randint(0, SCREEN_WIDTH - enemy1_rect.width), 0] enemy1 = Enemy(enemy1_img, enemy1_down_imgs, enemy1_pos) enemies1.add(enemy1) enemy_frequency += 1if enemy_frequency >= 100: enemy_frequency = 0 for enemy in enemies1: #2. 移动敌机 enemy.move() #3. 敌机与玩家飞机碰撞效果处理 if pygame.sprite.collide_circle(enemy, player): enemies_down.add(enemy) enemies1.remove(enemy) player.is_hit = True break #4. 移动出屏幕后删除飞机 if enemy.rect.top < 0: enemies1.remove(enemy) #5. 敌机被***击中效果处理 # 将被击中的敌机对象添加到击毁敌机Group中,用来渲染击毁动画 enemies1_down = pygame.sprite.groupcollide(enemies1, player.bullets, 1, 1) for enemy_down in enemies1_down: enemies_down.add(enemy_down) # 敌机被***击中效果显示 for enemy_down in enemies_down: if enemy_down.down_index == 0: pass if enemy_down.down_index > 7: enemies_down.remove(enemy_down) score += 1000 continue screen.blit(enemy_down.down_imgs[enemy_down.down_index / 2], enemy_down.rect) enemy_down.down_index += 1 # 显示敌机 enemies1.draw(screen)
5. スコア表示
ゲームインターフェイス上の固定位置で破壊された目標の敵航空機の数を表示します。
サンプルコード
# 绘制得分 score_font = pygame.font.Font(None, 36) score_text = score_font.render(str(score), True, (128, 128, 128)) text_rect = score_text.get_rect() text_rect.topleft = [10, 10] screen.blit(score_text, text_rect)
以上がpygameを使ってPC上でWeChatオナニーゲームを開発する例の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。