最近作っているものをpythonにもしてみました。
CPU AMD 7860K
ubuntu 16.04
python3.5.2
pygame利用
pip3 install pygameでインストールしたもの
1フレーム2.5秒ぐらいかかります。
world.png
![](https://blogimg.goo.ne.jp/user_image/54/51/f78fbc5072727d4e1ecffe11fb028827.png)
hi.png プログラムに合わせて一部加工しています。
![](https://blogimg.goo.ne.jp/user_image/4d/2c/28f4d57efc1bbbcaddbd5d2a53f4cc7f.png)
画像引用元 国土地理院 地球地図全球版
画像のCopyright. Geospatial Information Authority of Japan. ALL RIGHTS RESERVED.
<参考サイト>
Pygameで遊んでみる
Pygameで背景画像の描画
図形を描画する
Pythonで2次元配列の静的確保と動的確保
for文とrange関数を使った指定回数の繰り返し
9.2. math — 数学関数
ミリ秒・マイクロ秒単位で処理時間を計測するには
なぜ変数に値があるのに UnboundLocalError が出るのですか?
pygame documentation
pygame ドキュメント日本語版
test.py
セミコロン一部取り忘れてる。
実行後
![](https://blogimg.goo.ne.jp/user_image/59/d3/2e41d08e75da203ca432bc474167aa02.png)
CPU AMD 7860K
ubuntu 16.04
python3.5.2
pygame利用
pip3 install pygameでインストールしたもの
1フレーム2.5秒ぐらいかかります。
world.png
![](https://blogimg.goo.ne.jp/user_image/54/51/f78fbc5072727d4e1ecffe11fb028827.png)
hi.png プログラムに合わせて一部加工しています。
![](https://blogimg.goo.ne.jp/user_image/4d/2c/28f4d57efc1bbbcaddbd5d2a53f4cc7f.png)
画像引用元 国土地理院 地球地図全球版
画像のCopyright. Geospatial Information Authority of Japan. ALL RIGHTS RESERVED.
<参考サイト>
Pygameで遊んでみる
Pygameで背景画像の描画
図形を描画する
Pythonで2次元配列の静的確保と動的確保
for文とrange関数を使った指定回数の繰り返し
9.2. math — 数学関数
ミリ秒・マイクロ秒単位で処理時間を計測するには
なぜ変数に値があるのに UnboundLocalError が出るのですか?
pygame documentation
pygame ドキュメント日本語版
test.py
# -*- coding:utf-8 -*- import pygame from pygame.locals import * import math import sys import time px=180 py=150 pt=0#muki ph=2000#height sc=1000 wx=373 wy=186 ty=0 t=0 hland = [[0 for i in range(186)] for j in range(373)] def main(): global px global t #hland = [[0 for i in range(186)] for j in range(373)] cp = [0 for i in range(40)] cr = [0 for i in range(40)] cg = [0 for i in range(40)] cb = [0 for i in range(40)] pygame.init() screen = pygame.display.set_mode((1400, 700)) bg = pygame.image.load("world.png").convert_alpha() bghi = pygame.image.load("hi.png").convert_alpha() hi=[-20,-20,-20,-20,-20,-20,-20,-20,-20,-10,0,20,40,60,80,100,125,150,175,200,225,250,275,300,350,400,450,500,600,700,800,900,1000,1500,2000,3000,4000,5000,6000,7000] for i in range(2,41): c=bghi.get_at((i*10,40)) cp[i-2]=c cr[i-2]=c.r cg[i-2]=c.g cb[i-2]=c.b for x in range(373): for y in range(186): c=bg.get_at((x,y)) r=c.r g=c.g b=c.b bs=10000 bh=0 for j in range(40): s=abs(r-cr[j])+abs(g-cg[j])+abs(b-cb[j]) if s<bs: bs=s hland[x][y]=hi[j]+40 c1 = bg.get_at((100,100)); rect_bg = bg.get_rect() pygame.display.set_caption("Test") while (1): screen.fill((0,255,255)) theworld(screen,bg) pygame.display.update() # 画面を更新 px=px+1 t=t+0.1 # イベント処理 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() def theworld(screen,bg): starttime = time.time() el=1400 eh=10000 ez=0 ex=0 ep=0 hwix=700; hwiy=200; mx=0 my=0 cot=math.cos(t) sit=math.sin(t) for y in range(3,500): ez=el*eh/y for x in range(1400): ex=(x-hwix)*ez/el tx=(ex*cot-ez*sit)/sc ty=(ex*sit+ez*cot)/sc mx=math.floor(px+tx) my=math.floor(py-ty) if mx<0 or my<0 or mx>=wx or my>=wy: continue h=math.floor(hland[mx][my]*5/(math.sqrt(tx*tx+ty*ty))) pygame.draw.line(screen, bg.get_at((mx,my)), (x,y+hwiy-h), (x,y+hwiy)) print(str(time.time()-starttime) + "秒") if __name__ == "__main__": main()
セミコロン一部取り忘れてる。
実行後
![](https://blogimg.goo.ne.jp/user_image/59/d3/2e41d08e75da203ca432bc474167aa02.png)