【Pygame】レーダー画面

この記事では、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入門】サンプル集

コメント

  1. 千田真喜 より:

    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)