« Not Enough Itemsは使えない | トップページ | おお、Wizardry! »

2018/11/18

Pythonでグラフィックやるには?

最近、仕事でPythonばかり使う羽目になっていて、ふと、

「Pythonで、ゲーム作ってる人いるのかな?」

と思ったので調べてみた。(ちなみに、"Python"? "python"? どっちだろう? HP見るとロゴが小文字で記述は大文字???)

まず、Pythonに、デフォで入っているグラフィックライブラリは、TkinterというGUIライブラリになる。
TkinterはPythonのTcl/Tkインターフェースにあたるものなので、あくまでGUIライブラリであり、ウインドウに対する基本的な描画機能しか持っていない。

とりあえず、WebにあったSampleを見ながら使ってみる。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from tkinter import *

class Application(object):
 def __init__(self):
  self.__tk = Tk()
  self.__cv = Canvas(self.__tk, width=640, height=400)
  self.__cv.pack()
  return

 def run(self):
  # 矩形描画
  self.__cv.create_rectangle(0, 0, 100, 100, fill="red")
  self.__cv.create_rectangle(100, 100, 200, 200, fill="green")
  # 線描画
  self.__cv.create_line(0, 0, 100, 100, fill="blue", width=5)
  self.__cv.create_line(0, 0, 400, 0, fill="yellow", width=5)

  self.__tk.mainloop()
  return

if __name__ == "__main__":
 app = Application()
 app.run()


って、ココログって、ソースコードがうまく入らないのね。preタグ使うと無茶苦茶になるし・・・。
Gitのマークアップでも、これより数段はマシなんですが・・・。
流石は、Niftyクオリティ。相変わらず地を這ってます。
あっ、インデントするために、空白は全角になってます。ソースを、そのままコピペするとえらーになるので注意して下さい。

で、結果はこんな感じ。
Sample1

さて、PythonのGameライブラリですが、

■ PyGame
■ PySDL2
■ PyOpenGL

あたりがあるらしい。
元々は、PyGameがデファクトみたいだったが、更新が止まっているようで、その後継がPySDL2なのだそう。
で、こいつらは、インストールしてやる必要があるのだが、dnfで探してみると、PyGameとPyOpenGLはPython3版があるらしので、とりあえずインストールした。

# dnf install python3-pygame

# dnf install python3-pyopengl*

でこちらも、WebにあったPyOpenGLのSampleを見ながら使ってみる。こちらも、インデントするために空白が全角になってますのでコピペは注意です。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from OpenGL.GL import *
from OpenGL.GLUT import *

class Application(object):
 def __init__(self):
  glutInit(sys.argv)
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) # 表示設定
  glutInitWindowSize(400, 400) # 画面サイズ
  glutInitWindowPosition(100, 100) # 画面の表示位置
  glutCreateWindow("TEST") # ウィンドウの名前

  glClearColor(0.0, 0.0, 0.0, 0.0)
  glMatrixMode(GL_PROJECTION)
  glLoadIdentity()
  glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0)
  return

 def draw(self):
  # 座標(0.25,0.25)から幅0.5,高さ0.5の四角形を描く
  x, y, w, h = 0.25, 0.25, 0.5, 0.5
  glClear(GL_COLOR_BUFFER_BIT)
  # 四角形の色(緑)
  glColor3f(0.2, 0.8, 0.2)

  # 四角形の頂点座標
  glBegin(GL_POLYGON)
  glVertex3f(x, y, 0.0)
  glVertex3f(x + w, y, 0.0)
  glVertex3f(x + w, y + h, 0.0)
  glVertex3f(x, y + h, 0.0)
  glEnd()

  glFlush()
  return

 def run(self):
  glutDisplayFunc(Application.draw) # 描画
  glutMainLoop()
  return

if __name__ == "__main__":
 app = Application()
 app.run()

で結果はこちら。
Sample2


なんとなく、OpenGLは使えそうな感じです。
注意点としては、Python3用なんで、

$ python hoge.py


では動かないことでしょうか。

$ python3 hoge.py


で動かして下さい。

|

« Not Enough Itemsは使えない | トップページ | おお、Wizardry! »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Pythonでグラフィックやるには?:

« Not Enough Itemsは使えない | トップページ | おお、Wizardry! »