2013年7月23日火曜日
サンプル:人間対戦チェスプログラム
人間対戦のチェスプログラムです。
間違ってもコンピューターとの対戦など出来ません。
見た目も非常にシンプルです。
結局、中途半端なプログラムに終わっています。
適当に改良してください(^_^;)。
iPadの縦横画面および日英に対応しています。
Zipファイル :XBches.zip
これは珍しく完全自作なので、転載ほか、いかように使っていただいても結構です。
駒のパターンは、実はUnicodeにある文字フォントです。
Unicodeではこんなものまであるのです。
(チェスがあるのですから、トランプなんて当然あります。)
2013年7月18日木曜日
「グラフィックが表示できん」とお嘆きの貴兄に
外人で、「グラフィックが表示されんから金返せ」などと言う奴が居たのですよ。
取説にはグラフィックの表示手順についてちゃんとく書いたし、サンプルも多数出している。
その上ここでも何も聞かずにこんな馬鹿なこという奴は、きっと何を触っても何も出来ないのだろうと、あきれかえってしまうわけです。
ってなわけで、そんな奴は無視して、日本語だけで、グラフィック表示の仕方を簡単に説明します。
・・・まずは、取説からの抜粋・・・
描画しているのは、4ページあるグラフィック画面の内、GPAGE0のページです。
・・・
グラフィックを描画するプログラムを書く場合、グラフィックを1画面しか使わないのであれば、変更すべきはgColor()とline()の部分だけであって、他は定型として使い回せば良いのです。
何も難しいことはありません。
ある程度の手順を覚えなければならないことは、どの言語を使っても同じです。
いや、言語じゃなくてもアプリでも、それどころか世の中にある物全て、全く何も覚えずに使える物なんてないのです。
くれぐれも、何も努力をしないで「出来ないのは相手が悪い」などという愚かな発想に至らないように。
取説にはグラフィックの表示手順についてちゃんとく書いたし、サンプルも多数出している。
その上ここでも何も聞かずにこんな馬鹿なこという奴は、きっと何を触っても何も出来ないのだろうと、あきれかえってしまうわけです。
ってなわけで、そんな奴は無視して、日本語だけで、グラフィック表示の仕方を簡単に説明します。
・・・まずは、取説からの抜粋・・・
グラフィック画面は4画面あります。それをページと呼びます。 どのページに描画するかはapage()、どのページを表示するかはvpage()、 テキスト画面、グラフィック画面およびスプライト&BG画面の表示順位はvpriority()で
設定します。 従って、グラフィックの描画プログラムは基本的に、vpage() 表示ページ指定 vpriority() 表示優先順位指定 apage() 描画対象ページ指定 wipe() クリア gColor() 描画色指定 描画命令群という順で記述することになります。
・・・ ということです。この手順を守れば、確実にグラフィックは表示できます。 これはX-BASIC/68でもほとんど同じです(優先順位指定と色指定が違うけど)。
・・・例・・・これで、(0,0)~(100,100)の間に白の直線を引きます。vpage(B_TPAGE+B_GPAGE0,YES) vpriority(GPAGE0,TPAGE,GPAGE1,GPAGE2,GPAGE3) apage(GPAGE0) wipe() // gColor(255,255,255,255) line(0,0,100,100) // end
描画しているのは、4ページあるグラフィック画面の内、GPAGE0のページです。
・・・
グラフィックを描画するプログラムを書く場合、グラフィックを1画面しか使わないのであれば、変更すべきはgColor()とline()の部分だけであって、他は定型として使い回せば良いのです。
何も難しいことはありません。
ある程度の手順を覚えなければならないことは、どの言語を使っても同じです。
いや、言語じゃなくてもアプリでも、それどころか世の中にある物全て、全く何も覚えずに使える物なんてないのです。
くれぐれも、何も努力をしないで「出来ないのは相手が悪い」などという愚かな発想に至らないように。
2013年7月13日土曜日
サンプル:ルナ・レスキュー
MZ-80Kの傑作ゲーム、「ルナ・レスキュー」を移植しました。
しかも、ベタ移植です(本当は少しだけアレンジしてあるんだけど)。
昔はこんなゲームを楽しんでいたんだということを、
ある人はなつかしく、ある人とは新鮮な気持ちで知ってください。
基本的には「I/O別冊 MZ活用研究」よりの移植です。
もとネタがあるので、転載禁止です。
iPad縦画面のみ対応、日英対応です。
Zipファイル :XBlunar.zip
しかも、ベタ移植です(本当は少しだけアレンジしてあるんだけど)。
昔はこんなゲームを楽しんでいたんだということを、
ある人はなつかしく、ある人とは新鮮な気持ちで知ってください。
基本的には「I/O別冊 MZ活用研究」よりの移植です。
もとネタがあるので、転載禁止です。
iPad縦画面のみ対応、日英対応です。
Zipファイル :XBlunar.zip
2013年7月5日金曜日
2013年7月2日火曜日
V2.2のバグとその回避法
X-BASIC for iOS v2.2に以下のバグが発見されました。
1. print/printsで先頭文字が全角の時、それ以下に半角文字があっても全て全角幅で表示されてしまう
これはV2.2でのみ発生します。
当面の回避法は、print/prints()の表示文字列中、全角と半角を分離してください。
print "ABCあいう"
↓
print "ABC";"あいう"
2. 単項演算子と2項演算子を含む式で「システムエラー」もしくは「式の型が異なる」が発生する
「例1」
if a>=-128 and a<=-1 then {
}
「例2」
a=(a>=-1 or a<=128)
回避するには、負数を()でくくります。
「例1」
if a>=(-128) and a<=(-1) then {
}
「例2」
a=(a>=(-1) or a<=128)
もしくはifを個別に分割します。
if a>=-128 then {
if a<=-1 then {
}
}
・・・ではありますが、いずれもV2.3で修正済みですので、バージョンアップするのが一番手っ取り早いです(^_^)。
この他の、V2.2までに発生していてるバグは以下の通りです。
実行時エラーは小規模プログラムでは直りましたが、大規模プログラムでは 大幅にずれる問題が解決できていません。
1. print/printsで先頭文字が全角の時、それ以下に半角文字があっても全て全角幅で表示されてしまう
これはV2.2でのみ発生します。
当面の回避法は、print/prints()の表示文字列中、全角と半角を分離してください。
print "ABCあいう"
↓
print "ABC";"あいう"
2. 単項演算子と2項演算子を含む式で「システムエラー」もしくは「式の型が異なる」が発生する
「例1」
if a>=-128 and a<=-1 then {
}
「例2」
a=(a>=-1 or a<=128)
回避するには、負数を()でくくります。
「例1」
if a>=(-128) and a<=(-1) then {
}
「例2」
a=(a>=(-1) or a<=128)
もしくはifを個別に分割します。
if a>=-128 then {
if a<=-1 then {
}
}
・・・ではありますが、いずれもV2.3で修正済みですので、バージョンアップするのが一番手っ取り早いです(^_^)。
この他の、V2.2までに発生していてるバグは以下の通りです。
- dim floatに{}で初期値を指定するとエラーになる
- 配列を引数に持つ関数の中で、子関数にその配列を渡すときエラーが発生する
- 配列の2次元目以降の要素番号チェックが正しくない
- 外部関数内で発生したエラーのメッセージが表示されない
- 配列要素番号が(通しで)32767を超えると動作が異常になるかエラーが発生する
- グローバルもしくはローカルの変数領域が64KB以上必要なとき、うまく確保できない
- emailSend()で添付ファイルをzipで圧縮するとき、正しいzipファイルが生成されない
- randomize()がrandomise()になってる(綴りミス)
- 実行時エラーの指す行がずれている
実行時エラーは小規模プログラムでは直りましたが、大規模プログラムでは 大幅にずれる問題が解決できていません。
2013年6月23日日曜日
サンプル:バネの物理的挙動をシミュレートするプログラム?
バネの物理的挙動をシミュレートするプログラム・・・だそうです。
Zip archive file: XBetc.zip
// http://d.hatena.ne.jp/x68000forever/20101123/1290520018 より
// 画面初期化 / screen initialize
apage(0)
wipe()
vpriority(TPAGE,SPAGE,GPAGE0,GPAGE1,GPAGE2,GPAGE3)
vpage(B_TPAGE+B_SPAGE+B_GPAGE0)
gborder(1,CTHYELLOW)
int by=0
switch deviceType()
case DEVICE_IPODTOUCH: // iPod touch
case DEVICE_IPHONE: // iPhone
case DEVIDE_IPHONE_SIMURATOR
width(40)
by=32
endswitch
//
int c1,c2,t
float l1,l2,l3,k,m
float a,b,c,w1,w2,w3,xx1,xx2,xx3,x1,x2,x3,r2=1.4142135623731#
//
print localizedString("変位1=","Displacement1=");:input l1
print localizedString("変位2=","Displacement2=");:input l2
print localizedString("変位3=","Displacement2=");:input l3
print localizedString("バネ定数=","Rate of spring=");:input k
repeat
print localizedString("質量(>0)=","Mass(>0)=");:input m
until m>0
//
w1=pow((2-r2)*k/m,0.5#)
w2=pow(2*k/m,0.5#)
w3=pow((2+r2)*k/m,0.5#)
a=(l1+r2*l2+l3)/4
b=(l1-l3)/2
c=(l1-r2*l2+l3)/4
//
c1=x68Color2iOSColor(61376):// hsv(30,31,31))
c2=x68Color2iOSColor(55358):// hsv(100,31,31))
gColor(c2)
line( 0,288+by,511,288+by)
gColor(c1)
line(130,285+by,130,291+by)
line(255,285+by,255,291+by)
line(380,285+by,380,291+by)
sp_clr()
sp_disp(0)
sprite_pattern():sprite_pallet()
sp_disp(1)
//
repeat
x1=a*cos(w1*t)+b*cos(w2*t)+c*cos(w3*t)
x2=r2*a*cos(w1*t)-r2*c*cos(w3*t)
x3=a*cos(w1*t)-b*cos(w2*t)+c*cos(w3*t)
locate(0,5):print "t=";t
locate(0,6):print "x1=";x1,"x2=";x2,"x3=";x3
xx1=130+x1:xx2=255+x2:xx3=380+x3
locate(0,7):print "xx1=";xx1,"xx2=";xx2,"xx3=";xx3
sp_halt(YES)
sp_move( 0,xx1-16,256+by, 0)
sp_move( 1,xx1 ,256+by, 1)
sp_move( 2,xx1 ,272+by, 2)
sp_move( 3,xx1-16,272+by, 3)
sp_move( 4,xx2-16,256+by, 4)
sp_move( 5,xx2 ,256+by, 5)
sp_move( 6,xx2 ,272+by, 6)
sp_move( 7,xx2-16,272+by, 7)
sp_move( 8,xx3-16,256+by, 8)
sp_move( 9,xx3 ,256+by, 9)
sp_move(10,xx3 ,272+by,10)
sp_move(11,xx3-16,272+by,11)
sp_halt(NO)
if t=0 then wait(1)
t=t+1
wait(0.1)
until t>1000
end
//
func sprite_pattern()
int i,j
dim char sp1(255),sp2(255),sp3(255),sp4(255)
sp1={
0,0,0,0,0,0,0,0,0,0,4,4,4,4,5,5,
0,0,0,0,0,0,0,0,4,5,5,5,5,5,6,6,
0,0,0,0,0,0,0,4,5,6,6,6,6,6,6,6,
0,0,0,0,0,4,5,6,6,6,6,7,7,7,7,7,
0,0,0,0,4,5,6,6,7,7,7,7,8,8,8,8,
0,0,0,4,5,6,7,7,7,8,8,8,8,8,9,9,
0,0,4,4,6,6,7,8,8,8,8,9,9,9,9,10,
0,0,4,5,6,7,8,8,9,9,9,9,10,10,10,10,
0,4,4,6,6,7,8,9,9,10,10,10,10,11,11,11,
0,4,5,6,7,8,8,9,10,10,11,11,11,11,12,12,
4,5,6,6,7,8,9,9,10,11,11,12,12,12,12,13,
4,5,6,7,7,8,9,10,10,11,12,12,13,13,13,13,
4,5,6,7,8,8,9,10,10,11,12,13,13,14,14,14,
4,5,6,7,8,8,9,10,11,11,12,13,14,14,15,15,
4,6,6,7,8,9,9,10,11,12,12,13,14,15,15,15,
5,6,6,7,8,9,10,10,11,12,13,13,14,15,15,15
}
sp4={
5,6,6,7,8,9,10,10,11,12,13,13,14,15,15,15,
4,6,6,7,8,9,9,10,11,12,12,13,14,15,15,15,
4,5,6,7,8,8,9,10,11,11,12,13,14,14,15,15,
4,5,6,7,8,8,9,10,10,11,12,13,13,14,14,14,
4,5,6,7,7,8,9,10,10,11,12,12,13,13,13,13,
4,5,6,6,7,8,9,9,10,11,11,12,12,12,12,13,
0,4,5,6,7,8,8,9,10,10,11,11,11,11,12,12,
0,4,4,6,6,7,8,9,9,10,10,10,10,11,11,11,
0,0,4,5,6,7,8,8,9,9,9,9,10,10,10,10,
0,0,4,4,6,6,7,8,8,8,8,9,9,9,9,10,
0,0,0,4,5,6,7,7,7,8,8,8,8,8,9,9,
0,0,0,0,4,5,6,6,7,7,7,7,8,8,8,8,
0,0,0,0,0,4,5,6,6,6,6,7,7,7,7,7,
0,0,0,0,0,0,0,4,5,6,6,6,6,6,6,6,
0,0,0,0,0,0,0,0,4,5,5,5,5,5,6,6,
0,0,0,0,0,0,0,0,0,0,4,4,4,4,5,5
}
for i=0 to 255
sp3(i)=sp1(255-i)
sp2(i)=sp4(255-i)
next
sp_def(0 ,sp1)
sp_def(1 ,sp2)
sp_def(2 ,sp3)
sp_def(3 ,sp4)
sp_def(4 ,sp1)
sp_def(5 ,sp2)
sp_def(6 ,sp3)
sp_def(7 ,sp4)
sp_def(8 ,sp1)
sp_def(9 ,sp2)
sp_def(10,sp3)
sp_def(11,sp4)
endfunc
//
func sp_color2(pal;int,colX68;int,pb;int)
// X68の色コードでスプライトの色を設定する / set sprite color by X68 color
sp_color(pal,x68Color2iOSColor(colX68),pb)
endfunc
//
func sprite_pallet()
sp_color( 0, 0,1)://sp_color2( 0, 1,1)
sp_color2( 1, 4229,1)
sp_color2( 2, 8457,1)
sp_color2( 3,12685,1)
sp_color2( 4,19027,1)
sp_color2( 5,23255,1)
sp_color2( 6,27483,1)
sp_color2( 7,31711,1)
sp_color2( 8,35939,1)
sp_color2( 9,40167,1)
sp_color2(10,44395,1)
sp_color2(11,48623,1)
sp_color2(12,52851,1)
sp_color2(13,57079,1)
sp_color2(14,61307,1)
sp_color2(15,65535,1)
endfunc
func str localizedString(js;str,es;str)
if isLocalizeJapan() then return(js)
return (es)
endfunc
Zip archive file: XBetc.zip
登録:
投稿 (Atom)






