PythonのGUI開発のゲーム

GUIベースのTkinterモジュールの
GUIは、コンピュータを使用する人々のためのグラフィカル・ユーザー・インターフェースが不慣れではない、この必要性はここでは繰り返されてはならない、グラフィカル・ユーザー・インタフェースの頭文字です。デフォルトのPython GUI開発モジュールは、(Tkinterの中のPython 3の以前のバージョンで命名)Tkinterのある、名前からあなたはそれがTkのとTkに基づいていることがわかりますTclのためのツールキットが最初に設計されたで、後に移植しました他の多くのスクリプト言語には、クロスプラットフォームのGUIコントロールを提供します。あなたが本当になどのPython、wxPythonを、PyQtは、PyGTKのを、使用したGUIアプリケーションを開発する必要がある場合Tkのは確かに最新かつ最良の選択、また特に強力なGUIコントロールではない、実際には、GUIアプリケーションの開発は、Pythonでない、最善を尽くすモジュールは良い選択です。

基本的にGUIアプリケーションを開発するために使用されるのTkinterは、以下の5つのステップが必要です。

私たちが必要なものをインポートTkinterのモジュール。
トップレベルのウィンドウオブジェクトを作成し、全体のGUIアプリケーションを運ぶためにそれを使用。
トップレベルウィンドウオブジェクトにGUIコンポーネントを追加します。
編成これらの機能のGUI部品のコードによって。
メインイベントループ(メインループ)を入力します。
次のコードは、簡単なGUIアプリケーションを作るのTkinter使用する方法を示します。

import tkinter
import tkinter.messagebox


def main():
    flag = True

    # 修改标签上的文字
    def change_label_text():
        nonlocal flag
        flag = not flag
        color, msg = ('red', 'Hello, world!')\
            if flag else ('blue', 'Goodbye, world!')
        label.config(text=msg, fg=color)

    # 确认退出
    def confirm_to_quit():
        if tkinter.messagebox.askokcancel('温馨提示', '确定要退出吗?'):
            top.quit()

    # 创建顶层窗口
    top = tkinter.Tk()
    # 设置窗口大小
    top.geometry('240x160')
    # 设置窗口标题
    top.title('小游戏')
    # 创建标签对象并添加到顶层窗口
    label = tkinter.Label(top, text='Hello, world!', font='Arial -32', fg='red')
    label.pack(expand=1)
    # 创建一个装按钮的容器
    panel = tkinter.Frame(top)
    # 创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数
    button1 = tkinter.Button(panel, text='修改', command=change_label_text)
    button1.pack(side='left')
    button2 = tkinter.Button(panel, text='退出', command=confirm_to_quit)
    button2.pack(side='right')
    panel.pack(side='bottom')
    # 开启主事件循环
    tkinter.mainloop()


if __name__ == '__main__':
    main()
Python学习交流圈:906407826 欢迎加入学习交流海量资料免费拿
入门、进阶、项目等资料自取

イベントが発生し続けるので、GUIアプリケーションは、典型的には、イベント駆動型、メインイベントループを入力する理由は、マウスの様々なイベントの発生を監視することで、キーボードであり、イベントを処理するために対応するコードを実行し、注意すべきですしたがって、このようなサイクルの必要性が起こるのを待っているイベントで実行されています。一方、Tkの三のレイアウトマネージャは、コントロールがレイアウトマネージャによって位置決めすることができる配置コントロールを提供する、3レイアウトマネージャは、次のとおり依頼者(開発者がコントロールのサイズおよび配置を提供します) 、パッカー(コントロールは自動的に適切な位置に充填)及びグリッド(表示格子に基づいてコントロールを調整する)、ここでは繰り返しません。

使用してpygameのゲーム開発
pygameのは、画像、音声、動画、イベント、衝突などのサポートが含まれます(例えば、ビデオゲームなど)のマルチメディアアプリケーションの開発用に設計されたオープンソースのPythonモジュールであり、pygameのは、SDLに基づいており、SDLは、C言語を使用して、クロスプラットフォームのマルチメディア開発ライブラリ、である、広く開発ゲームで使用され、シミュレータ、選手、など。そして、ゲームの機能とロジックについてもっと心配することができ、pygameのゲーム開発者がもはや基本となる言語に縛られてみましょうありません。

我々は以前のプロセスで使用する方法を理解しなければならない最も重要な、焦点ではない、pygameのは焦点ではありません使用することを学ぶこのゲームを完了するには、当然のことながら、「小さなボールを食べるビッグボール」ゲームが呼ばれ、のは、単純な小さなゲームを完了してみましょうオブジェクト指向プログラミングを説明し、実世界の問題を解決するために、このプログラミングのアイデアを使用する方法を学びます。

ゲームウィンドウを作ります

import pygame


def main():
    # 初始化导入的pygame中的模块
    pygame.init()
    # 初始化用于显示的窗口并设置窗口尺寸
    screen = pygame.display.set_mode((800, 600))
    # 设置当前窗口的标题
    pygame.display.set_caption('大球吃小球')
    running = True
    # 开启一个事件循环处理发生的事件
    while running:
        # 从消息队列中获取事件并对事件进行处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False


if __name__ == '__main__':
    main()
Python学习交流圈:906407826 欢迎加入学习交流海量资料免费拿
入门、进阶、项目等资料自取

描画ウィンドウで
直線、矩形、多角形、円、楕円、円弧など:ドローでpygameの機能モジュール描画ウィンドウによって、あなたは、以下を含むグラフィックスを描画することができます。なお、スクリーン座標系を座標原点は左上隅(0、0)に設定されているY軸が設定時間の位置や大きさを表すx軸であるダウン、右は、前方に前方にあります私たちのデフォルトの単位はピクセルです。いわゆるピクセルは、画面上のドットで、あなたはこれらの点を見ることができ、画像を数回すると拡大画像を閲覧するソフトウェアを試すことができます。三原色光表記で表されるpygameの色は、すなわち、タプルまたはリストで指定されたRGB値、0と255の間の各値を、各原色は、8ビット(ビット)のために使用され示される値は、三色からなることがしばしばを言われている24の合計に相当する「24ビットカラー表現」

import pygame


def main():
    # 初始化导入的pygame中的模块
    pygame.init()
    # 初始化用于显示的窗口并设置窗口尺寸
    screen = pygame.display.set_mode((800, 600))
    # 设置当前窗口的标题
    pygame.display.set_caption('大球吃小球')
    # 设置窗口的背景色(颜色是由红绿蓝三原色构成的元组)
    screen.fill((242, 242, 242))
    # 绘制一个圆(参数分别是: 屏幕, 颜色, 圆心位置, 半径, 0表示填充圆)
    pygame.draw.circle(screen, (255, 0, 0,), (100, 100), 30, 0)
    # 刷新当前窗口(渲染窗口将绘制的图像呈现出来)
    pygame.display.flip()
    running = True
    # 开启一个事件循环处理发生的事件
    while running:
        # 从消息队列中获取事件并对事件进行处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False


if __name__ == '__main__':
    main()
Python学习交流圈:906407826 欢迎加入学习交流海量资料免费拿
入门、进阶、项目等资料自取

画像をロードする
画像が画像をロードするために、画像pygameのモジュールで使用することができる窓関数に直接ロードする必要がある場合、ブリットウィンドウオブジェクトのメソッドが以前に画像を再レンダリングすることによって得られた、コードを以下に示します。

import pygame


def main():
    # 初始化导入的pygame中的模块
    pygame.init()
    # 初始化用于显示的窗口并设置窗口尺寸
    screen = pygame.display.set_mode((800, 600))
    # 设置当前窗口的标题
    pygame.display.set_caption('大球吃小球')
    # 设置窗口的背景色(颜色是由红绿蓝三原色构成的元组)
    screen.fill((255, 255, 255))
    # 通过指定的文件名加载图像
    ball_image = pygame.image.load('./res/ball.png')
    # 在窗口上渲染图像
    screen.blit(ball_image, (50, 50))
    # 刷新当前窗口(渲染窗口将绘制的图像呈现出来)
    pygame.display.flip()
    running = True
    # 开启一个事件循环处理发生的事件
    while running:
        # 从消息队列中获取事件并对事件进行处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False


if __name__ == '__main__':
    main()
Python学习交流圈:906407826 欢迎加入学习交流海量资料免费拿
入门、进阶、项目等资料自取

アニメーション効果を達成し
、それは私たちがアニメーション効果を達成するために、実際には、不慣れではない言葉のアニメーションに来るとき、原則自体は非常に簡単です、そして、限り達成秒あたりのフレームの一定数として、連続再生の連続画像ではありませんあなたは、比較的滑らかなアニメーションを作ることができます。あなたがボールを移動するために上記のコードをしたい場合は、ボールの位置は、変数で表され、ウィンドウ全体をリフレッシュするサイクルでボール位置を変更することができます。

import pygame


def main():
    # 初始化导入的pygame中的模块
    pygame.init()
    # 初始化用于显示的窗口并设置窗口尺寸
    screen = pygame.display.set_mode((800, 600))
    # 设置当前窗口的标题
    pygame.display.set_caption('大球吃小球')
    # 定义变量来表示小球在屏幕上的位置
    x, y = 50, 50
    running = True
    # 开启一个事件循环处理发生的事件
    while running:
        # 从消息队列中获取事件并对事件进行处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
        screen.fill((255, 255, 255))
        pygame.draw.circle(screen, (255, 0, 0,), (x, y), 30, 0)
        pygame.display.flip()
        # 每隔50毫秒就改变小球的位置再刷新窗口
        pygame.time.delay(50)
        x, y = x + 5, y + 5


if __name__ == '__main__':
    main()
Python学习交流圈:906407826 欢迎加入学习交流海量资料免费拿
入门、进阶、项目等资料自取

衝突検出は、
多くのオブジェクトが表示され、その上の砲弾は、航空機を打つ箱が地面にヒットして、これらのオブジェクト間の「衝突」は、避けられないようになっているがあるでしょう、通常のゲームです。衝突検出は、ゲームの大半における重要な問題は、スプライトのpygameの(アニメーションスプライト)モジュールは、衝突検出のためのサポートを提供し、ここで我々は、機能スプライトモジュールを導入していない提供を取り扱っている必要がありますされています2つのボールの衝突がないので、検出することはちょうど球の中心からチェックすることはありません2以上の半径とボールを持って、非常に簡単です。より小さなボールを作成するために、我々はこれを行うために、私たちは前に学ぶことができ、もちろん、マウス位置の両方のランダム回のクリックで、色、大きさやボールの動きの速さを作成するために、マウスイベントを処理することができますオブジェクト指向の知識は、それを適用します。

from enum import Enum, unique
from math import sqrt
from random import randint

import pygame


@unique
class Color(Enum):
    """颜色"""

    RED = (255, 0, 0)
    GREEN = (0, 255, 0)
    BLUE = (0, 0, 255)
    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255)
    GRAY = (242, 242, 242)

    @staticmethod
    def random_color():
        """获得随机颜色"""
        r = randint(0, 255)
        g = randint(0, 255)
        b = randint(0, 255)
        return (r, g, b)


class Ball(object):
    """球"""

    def __init__(self, x, y, radius, sx, sy, color=Color.RED):
        """初始化方法"""
        self.x = x
        self.y = y
        self.radius = radius
        self.sx = sx
        self.sy = sy
        self.color = color
        self.alive = True

    def move(self, screen):
        """移动"""
        self.x += self.sx
        self.y += self.sy
        if self.x - self.radius <= 0 or \
                self.x + self.radius >= screen.get_width():
            self.sx = -self.sx
        if self.y - self.radius <= 0 or \
                self.y + self.radius >= screen.get_height():
            self.sy = -self.sy

    def eat(self, other):
        """吃其他球"""
        if self.alive and other.alive and self != other:
            dx, dy = self.x - other.x, self.y - other.y
            distance = sqrt(dx ** 2 + dy ** 2)
            if distance < self.radius + other.radius \
                    and self.radius > other.radius:
                other.alive = False
                self.radius = self.radius + int(other.radius * 0.146)

    def draw(self, screen):
        """在窗口上绘制球"""
        pygame.draw.circle(screen, self.color,
                           (self.x, self.y), self.radius, 0)
Python学习交流圈:906407826 欢迎加入学习交流海量资料免费拿
入门、进阶、项目等资料自取

イベント処理は、
イベントオブジェクトのイベントタイププロパティのタイプによって決定することができるイベントループでマウスイベントを処理することができ、その後、プロパティは、マウスクリックのPOS位置によって得ることができます。あなたがキーボードイベントに対処したい場合には、この場所にあり、マウスイベント同様のアプローチを扱います。

def main():
    # 定义用来装所有球的容器
    balls = []
    # 初始化导入的pygame中的模块
    pygame.init()
    # 初始化用于显示的窗口并设置窗口尺寸
    screen = pygame.display.set_mode((800, 600))
    # 设置当前窗口的标题
    pygame.display.set_caption('大球吃小球')
    running = True
    # 开启一个事件循环处理发生的事件
    while running:
        # 从消息队列中获取事件并对事件进行处理
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            # 处理鼠标事件的代码
            if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
                # 获得点击鼠标的位置
                x, y = event.pos
                radius = randint(10, 100)
                sx, sy = randint(-10, 10), randint(-10, 10)
                color = Color.random_color()
                # 在点击鼠标的位置创建一个球(大小、速度和颜色随机)
                ball = Ball(x, y, radius, sx, sy, color)
                # 将球添加到列表容器中
                balls.append(ball)
        screen.fill((255, 255, 255))
        # 取出容器中的球 如果没被吃掉就绘制 被吃掉了就移除
        for ball in balls:
            if ball.alive:
                ball.draw(screen)
            else:
                balls.remove(ball)
        pygame.display.flip()
        # 每隔50毫秒就改变球的位置再刷新窗口
        pygame.time.delay(50)
        for ball in balls:
            ball.move(screen)
            # 检查球有没有吃到其他的球
            for other in balls:
                ball.eat(other)


if __name__ == '__main__':
    main()
Python学习交流圈:906407826 欢迎加入学习交流海量资料免费拿
入门、进阶、项目等资料自取

上記のコード2枚が一緒に、我々は、それが正確に実際にゲームではありません、ゲーム「大きなボールは小さなボールを食べる」だったが、我々はこの例をあなたに伝えるために持っているゲームの少しの基本的な知識をやってきましたこの知識を使用すると、すでに小さなゲーム開発のあなたのツアーを開始することができます。実際には、上記のコードの後に​​、そのような可能なこれらの事を処理するバックグラウンドスレッドで、ウィンドウを更新し、イベントループに配置されるべきではないボールがコードを上に移動させ、およびその他の学習マルチスレッドの知識など、多くの価値のある改善が、ありますこれは、より良い選択です。あなたがより良いユーザーエクスペリエンスを取得したい場合は、我々はまた、ゲーム中にBGMを追加することができますし、ボールがpygameのダウンロードのミキサーと音楽モジュールを使用して、ボールと衝突したときに音を鳴らし、私たちは簡単にそれを行うことができ、我々は所有することができますこの地域の知識。あなたはすぐにKanlaに行くことができれば実際には、最高のチュートリアルでは、pygameの公式サイトで、pygameの詳細を知りたい、英語は何も悪いことではありません。あなたは、3Dゲームを開発したい場合は、3Dゲーム開発者のために関心のある読者はPanda3Dを見たい可能性がある場合、pygameのは、不十分となります。

おすすめ

転載: blog.csdn.net/PyhtonChen/article/details/96149214