![見出し画像](https://assets.st-note.com/production/uploads/images/147690833/rectangle_large_type_2_1b2d96c4f942ee1955f4111ffdc805ce.png?width=1200)
JavaScriptからPythonへの移植方法
移植というか、それぞれの違いを知ることで移植しやすくするための自分メモ。間違ってたら随時直そうかと。
JavaScriptはjs、Pythonはpyで記述
・jsはかっこ{}で括るのに対してpythonはタブインデントで対応
(注)タブインデントとスペースインデントは混在不可
・pyでは小数range指定は不可なので整数化して使用する
・jsは行末にセミコロン必要(無くても動く場合ある)
・jsでは型混在してても動く、pyは混在するとエラーになる
(注)pyは明示的な型宣言がないのでそれっぽい名前つけたほうが良い
(注)
ここではjsに対する基本的なものをまとめてます。
主に移植するときに参考にしたものをまとめてます。
pyにおけるリスト、タプル、辞書に関することは記述しません。
■配列
<js>
var o_dottbl0 = new Array(0x4a);
o_dottbl0 = [
0x09,0x01,0x0a,0x01,0x0b,0x01,0x0c,0x01,0x0d,0x01,0x09,0x02,0x09,0x03,0x09,0x04,
0x0a,0x04,0x0b,0x04,0x0c,0x04,0x0d,0x05,0x0d,0x06,0x0c,0x07,0x0b,0x07,0x0a,0x07,
0x09,0x06,0x12,0x01,0x13,0x01,0x14,0x01,0x11,0x02,0x11,0x03,0x11,0x04,0x11,0x05,
0x11,0x06,0x12,0x07,0x13,0x07,0x14,0x07,0x15,0x02,0x15,0x03,0x15,0x04,0x15,0x05,
0x15,0x06,0x12,0x05,0x13,0x04,0x14,0x03,0xff,0xff];
<py>
o_dottbl0 = [0 for dot in range(0x4a)]
o_dottbl0 = [
0x09,0x01,0x0a,0x01,0x0b,0x01,0x0c,0x01,0x0d,0x01,0x09,0x02,0x09,0x03,0x09,0x04,
0x0a,0x04,0x0b,0x04,0x0c,0x04,0x0d,0x05,0x0d,0x06,0x0c,0x07,0x0b,0x07,0x0a,0x07,
0x09,0x06,0x12,0x01,0x13,0x01,0x14,0x01,0x11,0x02,0x11,0x03,0x11,0x04,0x11,0x05,
0x11,0x06,0x12,0x07,0x13,0x07,0x14,0x07,0x15,0x02,0x15,0x03,0x15,0x04,0x15,0x05,
0x15,0x06,0x12,0x05,0x13,0x04,0x14,0x03,0xff,0xff]
data = [1,2,3,4]
としてもいいようです。
■二次元配列
<js>
// スプライトワーク
const O_SPR_WORK_MAX = 0x42;
const WORKPARAM = 5;
var O_SPR_WORK = new Array(O_SPR_WORK_MAX);
for( var i = 0; i < O_SPR_WORK_MAX; i++) {
O_SPR_WORK[i] = new Array( WORKPARAM );
}
<py>
#スプライトワーク
O_SPR_WORK_MAX = 0x42
WORKPARAM = 5
O_SPR_WORK = [[0 for i in range(WORKPARAM)] for j in range(O_SPR_WORK_MAX)]
■変数/コメント
<js>
var high_score = 0; // ハイスコア
<py>
high_score = 0 #ハイスコア
■for
<js>
// 初期座標セット
for (var y = 0; y < YSIZE; y++) {
for (var x = 0; x < XSIZE; x++) {
pos[y * XSIZE + x] = new Array(2); // x,y
pos[y * XSIZE + x][0] = x * DDOT; // xpos
pos[y * XSIZE + x][1] = y * DDOT; // ypos
}
}
<py>
rangeの使い方
range( start, end, step)
jsで言うところの、for( i = start; i < end; i++ )
range( end )
の場合は、range( 0, end, 1 )の略記
# 初期座標セット
for yp in range(YSIZE):
for xp in range(XSIZE):
pos[yp * XSIZE + xp][0] = xp * (RADIUS+DDOT) #xpos
pos[yp * XSIZE + xp][1] = yp * (RADIUS+DDOT) #ypos
js
for( _cnt = 0; _cnt < 0x1000; _cnt++ )
↓
py
for _cnt in range( 0, 0x1000, 1 )
または
for _cnt in range(0x1000)
■if
<js>
if( color_mode == 2 ) { //タイトル
<処理>
} else if( color_mode == 1 ) {
<処理>
} else {
<処理>
}
<py>
if color_mode == 2: #タイトル
<処理>
elif color_mode == 1:
<処理>
else:
<処理>
■switch
<js>
switch( pattern ) {
case 1:
<処理>
break;
case 2:
<処理>
break;
default:
<処理>
break;
}
<py>
無し?ifで代用
■関数
<js>
function dot_put( xp, yp, color_mode ) {
<処理>
}
<py>
def dot_put( xp, yp, color_mode ):
#グローバル変数使う場合はここに記述する必要がある
global XSIZE,XSIZE2
global YSIZE,YSIZE2
global RADIUS,RADIUS2
global DDOT,DDOT2
global title_xoff,title_yoff
global TT_KANKAKU
<処理>
■条件式
<js>
|| //OR
&& //AND
<py>
or #OR
and #AND
■無限ループ
<js>
for(;;){}
while(1){}
<py>
while True:
■クラス(使ったことはないのでそのうち・・・
<js>
<py>
■ソース分割
<js>
<py>
pythonのソース分割はいろいろとめんどくさい
クラスにしてれば問題ないのかも?
この記事が気に入ったらサポートをしてみませんか?