サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
1: 2004-01-22 (木) 23:28:42 ソース 2: 2004-01-23 (金) 00:15:46 ソース
Line 4: Line 4:
           "mt_xor1.c"の解説            "mt_xor1.c"の解説
                                                                 2004/01/22                                                                  2004/01/22
-                                        ベイサイド(bayside_yokohama@yahoo.co.jp)+                                      ベイサイド(bayside_yokohama@yahoo.co.jp)
   このドキュメントは、"mt_xor1.c"の説明だけをするものです。最初に読むべきドキュ    このドキュメントは、"mt_xor1.c"の説明だけをするものです。最初に読むべきドキュ
Line 19: Line 19:
   このアクセス方法は2つの手順で構成されます。まず、指定されたバッファ内に自由に    このアクセス方法は2つの手順で構成されます。まず、指定されたバッファ内に自由に
- 読み書きします。このバッファはグラフィックボックスに対応しており、1バイトが1ド+ 読み書きします。このバッファはグラフィックボックスに対応しており、4バイトが1ド
 ットになっています(パックドピクセル)。そして一通りのアクセスが済んだらいじった  ットになっています(パックドピクセル)。そして一通りのアクセスが済んだらいじった
 部分をflushします。flushというのは、メモリ内のバッファの内容を画面に確実に反映  部分をflushします。flushというのは、メモリ内のバッファの内容を画面に確実に反映
Line 88: Line 88:
 るようになるまではちょっと無理かもしれません。・・・それでもマシンパワーのある  るようになるまではちょっと無理かもしれません。・・・それでもマシンパワーのある
 マシンなら、なんとかゲームにはなるかもしれません。  マシンなら、なんとかゲームにはなるかもしれません。
 +
 + // "mt_xor1.c"
 + //  stack:4k malloc:6k
 + //  copyright(C) 2004 ベイサイド
 +
 + #include <guigui00.h>
 +
 + #define  AUTO_MALLOC  0
 +
 + /* ちょっとしたマクロ */
 + #define  pixel(x, y)  *(p + (y) * 100 + (x))
 +
 + /* 基本的なアルゴリズム */
 + /* 1.グラフィックボックスをオープンする */
 + /* 2.(int *) graphicbox + 16以降のバイトは、x_size * y_size * 4のcharのバッファになっているので
 +   そこを好きなようにいじる(リードしてもライトしてもいい) */
 + /* 3.いじり終ったら、バッファをflushしなければいけない。この時点で画面に反映される */
 +
 + void OsaskMain()
 + {
 +   struct LIB_WINDOW *window;
 +   struct LIB_TEXTBOX *wintitle;
 +   struct LIB_GRAPHBOX *graphicbox;
 +   int i, j;
 +   int *p;
 +
 +   lib_init(AUTO_MALLOC);
 +   window = lib_openwindow(AUTO_MALLOC, 0x0200, 136, 48);
 +   wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0,  7, 1,  0,  0, window, 0x00c0, 0);
 +   lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "Mt.Xor0");
 +
 +   /* グラフィックボックスをウィンドウに用意する */
 +   graphicbox = lib_opengraphbox(1, AUTO_MALLOC, 4, 8, 100, 48, 18, 0, window);
 +   /* パラメーターの意味は以下の通り:
 +     opt      : 1(固定)
 +     mode    : 4(固定)
 +     mode_opt : 初期の背景色(バッファはこのバイトで初期化される)
 +     x_size  : グラフィックボックスの大きさ(ドット単位)
 +     y_size  : グラフィックボックスの大きさ(ドット単位)
 +     x_pos    : グラフィックボックスの位置(ドット単位)
 +     y_pos    : グラフィックボックスの位置(ドット単位)
 +   */
 +
 +   p = (int *) graphicbox + 16;
 +
 +   /* 頂点に一つ点を打つ */
 +   pixel(49, 0) = 0; /* 黒い点 */
 +
 +   /* ちょっとした演算 */
 +   for (j = 0; j < 47; j++) {
 +     for (i = 1; i < 99; i++)
 +       pixel(i, j + 1) = ((pixel(i - 1, j) == 0) ^ (pixel(i + 1, j) == 0)) ? 0 : 0xC6C6C6;
 +   }
 +
 +   j = 0;
 +   for (;;) {
 +
 +     /* バッファの内容を確実に画面に反映させる */
 +     lib_flushgraphbox(0x8024, window, 18, 0, 100, 48, 0, p);
 +     /* パラメーターの意味は以下の通り:
 +       opt  : 0x8001(固定)
 +       win  : グラフィックボックスが所属するウィンドウ
 +       x    : グラフィックボックスのx_pos
 +       y    : グラフィックボックスのy_pos
 +       sx  : グラフィックボックスのx_size
 +       sy  : グラフィックボックスのy_size
 +       skip : 0(固定)
 +       p    : (int *) graphbox + 16
 +
 +       なお、上記の例はグラフィックボックス全体をflushしている
 +     */
 +
 +     lib_waitsignaltime(0x0007, 0, 0, 0x80000000, 0, 0); /* 500msec.-wait */
 +
 +     /* 色変更 */
 +     j = (j + 1) & 0x868686;
 +     for (i = 0; i < 48 * 100; i++) {
 +       if (p[i] != 0xC6C6C6)
 +         p[i] = j;
 +     }
 +
 +   }
 + }
 +
 +*** [[K]]の落書き
 +-こんなのをそのうち<guigui00.h>に追加しようと思います。
 + #if (!defined(LIB_GBOX_BUF))
 +     #define LIB_GBOX_BUF(gbox)  ((void *) ((char *) (gbox) + 64))
 +     #define LIB_GBOX_BUF8(gbox)  ((unsigned char *) LIB_GBOX_BUF(gbox))
 +     #define LIB_GBOX_BUF16(gbox) ((unsigned short *) LIB_GBOX_BUF(gbox))
 +     #define LIB_GBOX_BUF32(gbox)  ((unsigned int *) LIB_GBOX_BUF(gbox))
 + #endif
 +-たぶん僕の言う「そのうち」はなかなかこないので、上記をコピーして自分のソースに貼り付けてもいいです。

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。