この記事では、Pygameを用いてレーダー画面を作る方法とソースコードを解説します。
レーダー画面
Python + Pygameを用いてレーダー画面を作成しました。
処理手順
プログラムの処理の流れは下記の通りです。
①モジュール「pygame」「sys」「math」をインポートする。
②レーダービームの初期角度を設定する。
③Pygameを初期化する。[pygame.init]
④大きさ400*400の画面(ウィンドウ)を生成する。[pygame.display.set_mode]
⑤レーダー画面の背景を描画する。(円と直線)
⑥レーダービームの軌跡を描画する。
⑦背景色を黒に設定する。
⑧30ms間待機する。(レーダービームの回転速度を調整)
⑨画面を更新する。(黒色で塗りつぶし)
⑩5-9の処理を繰り返す。
⑪閉じるボタンが押されたら終了する。
ソースコード
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*- import sys import pygame import math from pygame.locals import * def main(): (x,y) = (400,400) # 画面サイズ deg = 0 # 初期角度 pygame.init() # pygame初期化 pygame.display.set_mode((x, y), 0, 32) # 画面設定 screen = pygame.display.get_surface() while (1): deg += 2 if deg >= 360: # 角度が360以上になったら初期化(0) deg = 0 # レーダー画面の背景描画 pygame.draw.circle(screen, (0, 200, 0), (int(x/2), int(y/2)), int(x/2), 1) pygame.draw.circle(screen, (0, 200, 0), (int(x/2), int(y/2)), int(x/4), 1) pygame.draw.line(screen, (0, 200, 0), (0, int(y/2)), (x, int(y/2))) pygame.draw.line(screen, (0, 200, 0), (int(x/2), 0), (int(x/2), y)) # レーダービームの軌跡描画 for i in range(1, 30): dx = x/2 + x/2 * math.cos(math.radians(deg-i)) dy = y/2 + x/2 * math.sin(math.radians(deg-i)) pygame.draw.aaline(screen, (0, int(255/i), 0), (int(x/2), int(y/2)), (dx, dy),5) pygame.display.update() # 画面更新 pygame.time.wait(30) # 更新時間間隔 screen.fill((0, 20, 0, 0)) # 画面の背景色 # イベント for event in pygame.event.get(): if event.type == QUIT: # 閉じるボタンが押されたら終了 pygame.quit() # Pygameの終了(画面閉じられる) sys.exit() if __name__ == "__main__": main()
– | 関連記事 |
---|---|
1 | ■【Pygame入門】ゲームプログラミング |
2 | ■【Python入門】サンプル集 |
コメント
pygame.draw.circle(screen, (0, 200, 0), (x/2, y/2), x/2, 1)
のところで、”integer argument expected, got float”が起こります。
intへの型変換が必要です。
pygame.draw.circle(screen, (0, 200, 0), (int(x/2), int(y/2)), int(x/2), 1)
※千田様
コメントありがとうございます。
該当箇所を修正致しました。