2013年7月23日火曜日

サンプル:人間対戦チェスプログラム


人間対戦のチェスプログラムです。

間違ってもコンピューターとの対戦など出来ません。
見た目も非常にシンプルです。

結局、中途半端なプログラムに終わっています。
適当に改良してください(^_^;)。

iPadの縦横画面および日英に対応しています。



Zipファイル :XBches.zip

これは珍しく完全自作なので、転載ほか、いかように使っていただいても結構です。

駒のパターンは、実はUnicodeにある文字フォントです。
Unicodeではこんなものまであるのです。
(チェスがあるのですから、トランプなんて当然あります。)

2013年7月18日木曜日

「グラフィックが表示できん」とお嘆きの貴兄に

外人で、「グラフィックが表示されんから金返せ」などと言う奴が居たのですよ。

取説にはグラフィックの表示手順についてちゃんとく書いたし、サンプルも多数出している。
その上ここでも何も聞かずにこんな馬鹿なこという奴は、きっと何を触っても何も出来ないのだろうと、あきれかえってしまうわけです。

ってなわけで、そんな奴は無視して、日本語だけで、グラフィック表示の仕方を簡単に説明します。

・・・まずは、取説からの抜粋・・・

グラフィック画面は4画面あります。それをページと呼びます。
どのページに描画するかはapage()、どのページを表示するかはvpage()、
テキスト画面、グラフィック画面およびスプライト&BG画面の表示順位はvpriority()で
設定します。

従って、グラフィックの描画プログラムは基本的に、
vpage() 表示ページ指定 vpriority() 表示優先順位指定 apage() 描画対象ページ指定 wipe() クリア gColor() 描画色指定 描画命令群
という順で記述することになります。
 ・・・
ということです。この手順を守れば、確実にグラフィックは表示できます。
これはX-BASIC/68でもほとんど同じです(優先順位指定と色指定が違うけど)。 
 
・・・例・・・
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
これで、(0,0)~(100,100)の間に白の直線を引きます。
描画しているのは、4ページあるグラフィック画面の内、GPAGE0のページです。

・・・

グラフィックを描画するプログラムを書く場合、グラフィックを1画面しか使わないのであれば、変更すべきはgColor()とline()の部分だけであって、他は定型として使い回せば良いのです。
何も難しいことはありません。

ある程度の手順を覚えなければならないことは、どの言語を使っても同じです。
いや、言語じゃなくてもアプリでも、それどころか世の中にある物全て、全く何も覚えずに使える物なんてないのです。

くれぐれも、何も努力をしないで「出来ないのは相手が悪い」などという愚かな発想に至らないように。


2013年7月13日土曜日

サンプル:ルナ・レスキュー

MZ-80Kの傑作ゲーム、「ルナ・レスキュー」を移植しました。
しかも、ベタ移植です(本当は少しだけアレンジしてあるんだけど)。

昔はこんなゲームを楽しんでいたんだということを、
ある人はなつかしく、ある人とは新鮮な気持ちで知ってください。

基本的には「I/O別冊 MZ活用研究」よりの移植です。
もとネタがあるので、転載禁止です。


iPad縦画面のみ対応、日英対応です。





Zipファイル :XBlunar.zip

2013年7月5日金曜日

サンプル:新説?!桃太郎ゲーム

MZ-80K用の古いゲームの移植です。
 iPad縦画面のみ対応、日英対応です。




「I/O別冊 MZ活用研究」からの移植で、転載禁止です。


Zipファイル :XBmomo.zip

2013年7月2日火曜日

サンプル:地底最大の作戦


MZ-80K用の古いゲームの移植です。
iPad縦画面のみ対応、日英対応です。



Oh!X1988/9からの移植で、転載禁止です。


Zipファイル :XBsnake.zip

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. dim floatに{}で初期値を指定するとエラーになる
  2. 配列を引数に持つ関数の中で、子関数にその配列を渡すときエラーが発生する
  3. 配列の2次元目以降の要素番号チェックが正しくない
  4. 外部関数内で発生したエラーのメッセージが表示されない
  5. 配列要素番号が(通しで)32767を超えると動作が異常になるかエラーが発生する 
  6. グローバルもしくはローカルの変数領域が64KB以上必要なとき、うまく確保できない
  7. emailSend()で添付ファイルをzipで圧縮するとき、正しいzipファイルが生成されない 
  8. randomize()がrandomise()になってる(綴りミス)
  9. 実行時エラーの指す行がずれている
4番まではV2.3で修正されました。5~8はV2.4で修正されました。
実行時エラーは小規模プログラムでは直りましたが、大規模プログラムでは 大幅にずれる問題が解決できていません。