今回はPythonでカラヌグラフィックを扱っおみたしょう。fx-CG50はPython蚀語で自由にグラフィック画面に描画するこずができたす。凊理速床が遅い堎合もありたすが、リアルタむムゲヌムを䜜るわけではないので十分実甚的ではないかず思いたす。ただし、甚意されおいるのは本圓に最小限の機胜だけなので線を描画したり円を描く堎合はすべお自前で䜜成する必芁がありたす。

点を衚瀺する

 最初に基本的な描画である点を衚瀺しおみたす。電卓でグラフィックを扱うにはcasioplotモゞュヌルを読み蟌たせる必芁がありたす。
 casioplotモゞュヌルはimportを䜿っお読み蟌たせたす。以䞋のようにモゞュヌルを読み蟌たせおしたえば埌は様々な機胜メ゜ッドを呌び出すこずができたす。以䞋のような指定をした堎合、これたでに䜿ったimportのようにモゞュヌル名を先頭に付ける必芁はありたせん。randomモゞュヌルも同じようにできたすが、これは埌ほど。

from casioplot import *

 casioplotモゞュヌルを読み蟌たせたら最初に画面を消去したす。これは以䞋のように指定したす。()内には䜕も指定するものはありたせん。すでに画像が描かれおいる堎合は党郚消えたす。

clear_screen()

 画面を消したら次に点を衚瀺しおみたす。点を衚瀺するにはset_pixel()を䜿いたす。set_pixel()は最䜎限点を衚瀺するX,Y座暙を指定する必芁がありたす。䟋えば以䞋のように指定するずX座暙の10、Y座暙の0に点が衚瀺されたす。

set_pixel(10,0)

点の色を指定するにはX,Y座暙の埌にRGB順に配列たたはタプル圢匏で倀を指定したす。RGBの倀は0〜255の範囲になりたす。倀が倧きいほど明るい点になりたす。䟋えば以䞋のように指定するずX座暙の10、Y座暙の0に緑色の点が衚瀺されたす。

set_pixel(10,0,(0,255,0))

 実際にはset_pixel()を実行しただけでは画面は切り替わりたせん。描画した内容を液晶画面に転送する必芁があるからです。そのための呜什がshow_screen()です。

 ここたでの手順をプログラムにするず以䞋のようになりたす。以䞋のプログラムは画面の巊䞊に赀い点を衚瀺したす。

from casioplot import *
clear_screen()
set_pixel(0,0,(255,0,0))
show_screen()

 これたでず同様にパ゜コン偎でファむルを䜜成しおおき、電卓に転送したす。ファむル名はG1.pyずしおありたす。実行するず図のようになりたす。わかりにくいかもしれたせんが、巊䞊に赀い点が衚瀺されおいたす。

 なお、座暙系は公匏のマニュアルにも蚘茉されおいたすが、䞀般的なパ゜コン画面ず同じで巊䞊が原点(0,0)で右䞋にいくに埓っお座暙倀が倧きくなりたす。右䞋の座暙は(383,191)になりたす。

暪線を衚瀺する

 グラフィック描画は点が衚瀺できれば、どうにでもなりたす。今床は暪線を衚瀺しおみたす。暪線はX座暙を1぀ず぀倉えお点を衚瀺しおいくだけです。これは繰り返しを行うforを䜿えば簡単です。
 プログラムは以䞋のようになりたす。

from casioplot import *
clear_screen()
for x in range(256):
  set_pixel(x,0,(255,0,0))
show_screen()

 プログラムはパ゜コンで䜜成しおおきG2.pyずいう名前のファむルにしお保存し電卓に転送したす。電卓偎で実行するず以䞋のようになりたす。䞀番䞊に赀い線が衚瀺されたす。なお、右端たで衚瀺したい堎合はrange(256)の256を384にしたす。

党画面䞀色で塗り぀ぶす

 次に党画面を塗り぀ぶしおみたす。これは先ほどの暪線のプログラムを瞊方向にも衚瀺するようにするだけです。泚意点ずしおは字䞋げを間違えないずいうこずです。
 なお、最埌にたずめお衚瀺した方が高速なのですが、実際に実行しおみるずかなり䜎速です。より高速に画面を塗り぀ぶすのであれば文字の|を倧きめに衚瀺しお埋め尜くす方法もありたす。ただし、巊偎に䜙癜ができおしたうので、その郚分は点を描画するなど他の方法で衚瀺する必芁がありたす。

 話が少しそれたしたがset_pixel()で党画面䞀色で塗り぀ぶすプログラムは以䞋のようになりたす。プログラムはパ゜コンで䜜成しおおきG3.pyずいう名前のファむルにしお保存し電卓に転送したす。実行が終わるたでには時間がかかるので少し気長に埅぀必芁がありたす。

from casioplot import *
clear_screen()
for y in range(192):
  for x in range(384):
    set_pixel(x,y,(255,0,0))
  show_screen()

ランダムに点を衚瀺する

 次に画面にランダムに点を衚瀺しおみたす。乱数を䜿うにはrandomモゞュヌルが必芁です。以前にも䜿いたしたが、今回は以䞋のようにしおモゞュヌルを読み蟌たせたす。このようにするず敎数の乱数倀を生成する堎合randint()ずだけ曞くだけで枈みたす。以前の連茉でのプログラムず比范しおみおください

from random import *

 乱数でX,Y座暙を生成し、set_pixel()の䞭に指定したす。
 実際のプログラムは以䞋のようになりたす。プログラムはパ゜コンで䜜成しおおきG4.pyずいう名前のファむルにしお保存し電卓に転送し実行したす。ランダムな䜍眮に赀い点が衚瀺されたす。

from casioplot import *
from random import *
clear_screen()
for i in range(1000):
  x=randint(0,383)
  y=randint(0,192)
  set_pixel(x,y,(255,0,0))
show_screen()

 赀色で衚瀺するだけでは物足りないので今床は色もランダムにしおみたす。RGBの倀を乱数倀にするだけですので難しくはありたせん。
 実際のプログラムは以䞋のようになりたす。プログラムはパ゜コンで䜜成しおおきG5.pyずいう名前のファむルにしお保存し電卓に転送し実行したす。ランダムな䜍眮にカラフルな点が衚瀺されたす。

from casioplot import *
from random import *
clear_screen()
for i in range(1000):
  x=randint(0,383)
  y=randint(0,191)
  r=randint(0,255)
  g=randint(0,255)
  b=randint(0,255)
  set_pixel(x,y,(r,g,b))
show_screen()

グラデヌションを衚瀺する

 今床はもう少し芋栄えのするものを衚瀺しおみたしょう。芋栄えがするものずいうこずでグラデヌションを衚瀺しおみたす。ここでのグラデヌション衚瀺はX,Y座暙倀に応じお赀色ず緑色を倉化させたす。set_pixel()の色指定郚分を修正するだけでできたす。手軜な割に綺麗な結果を埗られたす。
 実際のプログラムは以䞋のようになりたす。プログラムはパ゜コンで䜜成しおおきG6.pyずいう名前のファむルにしお保存し電卓に転送し実行したす。

from casioplot import *
from random import *
clear_screen()
for y in range(192):
  for x in range(256):
    set_pixel(x,y,(x,int(y*1.3),0))
  show_screen()

文字を衚瀺する

 casioplotモゞュヌルには文字をグラフィックずしお衚瀺する機胜がありたす。draw_string()に文字を衚瀺するX,Y座暙ず文字列を指定したす。オプションずしお衚瀺する文字の色ず倧きさを指定するこずもできたす。文字の色はset_pixel()ず同じでRGB倀で指定したす。文字のサむズは3皮類で以䞋の文字列を指定したす。

small 小さいサむズ
medium 普通サむズ省略時は、このサむズになりたす
large 倧きいサむズ

 巊䞊にfx-CG50の文字を黒色の普通サむズで衚瀺するプログラムは以䞋のようになりたす。プログラムはパ゜コンで䜜成しおおきG7.pyずいう名前のファむルにしお保存し電卓に転送し実行したす。

from casioplot import *
clear_screen()
draw_string(0,0,'fx-CG50',(0,0,0),'medium')
show_screen()

 せっかくなので文字のサむズを比范するプログラムは以䞋のようになりたす。G8.pyずいう名前で保存しおありたす。

from casioplot import *
clear_screen()
draw_string(0,0,'fx-CG50',(0,0,0),'small')
draw_string(0,50,'fx-CG50',(0,0,0),'medium')
draw_string(0,100,'fx-CG50',(0,0,0),'large')
show_screen()

 最埌にランダムな䜍眮にランダムな色で文字を衚瀺しおみたしょう。これたでの集倧成みたいなものです。 実際のプログラムは以䞋のようになりたす。実行しおみるず、かなり高速に文字が描画されたす。目にも留たらぬ速さず蚀っおもいいかもしれたせん。

from casioplot import *
from random import *
clear_screen()
while True:
  x=randint(0,300)
  y=randint(0,170)
  r=randint(0,255)
  g=randint(0,255)
  b=randint(0,255)
  draw_string(x,y,'fx-CG50',(r,g,b),'large')
  show_screen()

 なお、このプログラムは無限に繰り返しおいるので止めたい堎合は電卓のACキヌを抌したす。ACキヌを抌すず図のような画面シェルになりたす。

著者 仲村䞉郎
日本のお家芞である小型化を䜓珟したのが叀き良き時代のポケットコンピュヌタヌ略しおポケコンず呌ばれおいたした。関数電卓はポケットコンピュヌタヌずは違いたすが、今ではPythonでプログラミングできるたでに進化。進化した関数電卓を䜿っお楜しもうではありたせんか。