python初心者です。pygameを使って主人公(ケン)が矢印キーで動くようにしています。また、それと同時に3種類の色のミカンが左から右に移動するようにしたいです。今は、試験的に青色のミカンのみ動かしています。
発生している問題・エラーメッセージ
エラーメッセージは出ません。ですが、青色のミカンが途中で止まってしまいます。止まってしまった後は、キーを押したときだけ動きます。
該当のソースコード
python
1import pygame 2import sys 3import random 4from pygame.constants import K_DOWN, K_LEFT, K_RIGHT, K_UP, KEYDOWN, QUIT 5 6 7pygame.init() # pygameの初期化 8pygame.key.set_repeat(550, 550) 9screen = pygame.display.set_mode((1920, 1030)) # 画面を生成 10pygame.display.set_caption("color_tag") # タイトルバー 11 12 13# 画像ファイルを読み込む_back_top = pygame.image.load("image\ken\ken bs.png") # 後ろ 前 14ken_back_right = pygame.image.load("image\ken\ken brf.png") # 後ろ 右 15ken_back_left = pygame.image.load("image\ken\ken blf.png") # 後ろ 左 16ken_front_top = pygame.image.load("image\ken\ken fs.png") # 正面 前 17ken_front_right = pygame.image.load("image\ken\ken frf.png") # 正面 右 18ken_front_left = pygame.image.load("image\ken\ken flf.png") # 正面 左 19ken_right_top = pygame.image.load("image\ken\ken rs.png") # 右 前 20ken_right_right = pygame.image.load("image\ken\ken rrf.png") # 右 右 21ken_right_left = pygame.image.load("image\ken\ken rlf.png") # 右 左 22ken_left_top = pygame.image.load("image\ken\ken ls.png") # 左 前 23ken_left_right = pygame.image.load("image\ken\ken lrf.png") # 左 右 24ken_left_left = pygame.image.load("image\ken\ken llf.png") # 左 左 25shadow = pygame.image.load("image\ken\shadow.png") # 影 26 27# 鬼の画像ファイルを読み込む 28blue_tag = pygame.image.load("image\demon\Blue_tag.png") # 青色のみかん 29red_tag = pygame.image.load("image\demon\Red_tag.png") # 赤色のみかん 30yellow_tag = pygame.image.load("image\demon\Yellow_tag.png") # 黄色のみかん 31 32 33x = 800 # ケンの画像のx座標 34y = 400 # ケンの画像のy座標 35image = ken_front_top # 表示する画像 36 37blue_x = 10 # 青色の画像のx座標 38blue_y = 400 # 青色の画像のy座標 39 40yellow_x = 600 # 黄色の画像のx座標 41yellow_y = 400 # 黄色の画像のy座標 42 43red_x = 900 # 赤色の画像のx座標 44red_y = 400 # 赤色の画像のy座標 45 46number = random.randint(1, 6) 47 48screen.fill((0, 0, 0)) 49screen.blit(shadow, (x, y)) # 影の画像を表示 50screen.blit(image, (x, y)) # 正面の画像を表示 51screen.blit(blue_tag, (blue_x, blue_y)) # 青色のみかんを表示 52screen.blit(yellow_tag, (yellow_x, yellow_y)) # 黄色のみかんを表示 53screen.blit(red_tag, (red_x, red_y)) # 赤色のみかんを表示 54 55pygame.display.update() # 画面を更新 56 57 58def update(): # 画像を表示する関数 59 60 global blue_x 61 62 screen.fill((0, 0, 0)) 63 64 # 表示する画像 65 screen.blit(shadow, (x, y)) # ケンの影を表示 66 screen.blit(image, (x, y)) # ケンの画像を表示 67 68 blue_x += 10 69 70 screen.blit(blue_tag, (blue_x, blue_y)) # 青色のみかんを表示 71 screen.blit(yellow_tag, (yellow_x, yellow_y)) # 黄色のみかんを表示 72 screen.blit(red_tag, (red_x, red_y)) # 赤色のみかんを表示 73 74 pygame.display.update() 75 pygame.time.wait(120) 76 77 78while True: # ループ処理 79 #pressed_key = pygame.key.get_pressed() 80 81 for event in pygame.event.get(): 82 if event.type == QUIT: # 終了イベント 83 pygame.quit() 84 sys.exit() 85 86 if event.type == KEYDOWN: 87 # 上キーが押された時の処理 88 if event.key == K_UP: 89 image = ken_back_right 90 y -= 30 91 update() 92 93 image = ken_back_top 94 y -= 30 95 update() 96 97 image = ken_back_left 98 y -= 30 99 update() 100 101 image = ken_back_top 102 y -= 30 103 update() 104 105 # 下キーが押された時の処理 106 if event.key == K_DOWN: 107 image = ken_front_right 108 y += 30 109 update() 110 111 image = ken_front_top 112 y += 30 113 update() 114 115 image = ken_front_left 116 y += 30 117 update() 118 119 image = ken_front_top 120 y += 30 121 update() 122 123 # 右キーが押された時の処理 124 if event.key == K_RIGHT: 125 image = ken_right_right 126 x += 30 127 update() 128 129 image = ken_right_top 130 x += 30 131 update() 132 133 image = ken_right_left 134 x += 30 135 update() 136 137 image = ken_right_top 138 x += 30 139 update() 140 141 # 左キーが押された時の処理 142 if event.key == K_LEFT: 143 image = ken_left_right 144 x -= 30 145 update() 146 147 image = ken_left_top 148 x -= 30 149 update() 150 151 image = ken_left_left 152 x -= 30 153 update() 154 155 image = ken_left_top 156 x -= 30 157 update() 158 159 else: 160 update()
試したこと
青色のミカンの位置を変更する変数がうまく動いていないのかと思い、print関数を使って変数の値を表示してみました。みかんが動かなくなると同時に変数も更新されなくなってしまっています。
また、pygame.event.clear()を使って入力内容を削除してみたのですが、処理が重くなってしまいました。
補足情報(FW/ツールのバージョンなど)
pythonのバージョン:python3
あなたの回答
tips
プレビュー