http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N6 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能。
http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N6 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能。
#runtime "hsp3cl" #include "DxLib.as" // 文字のサイズ #define MOJI_SIZE 24 DrawPointX = 0 : DrawPointY = 0 // 文字列描画の位置 SP = 0 : CP = 0 // 参照する文字列番号と文字列中の文字の位置(ポインタ不使用) sdim String, 256, 11 String(0) = " ゲームプログラムとは、いやプログラムとは" String(1) = "ある事柄を実現するプログラムの方法を説明されても理解できないことがある。B" String(2) = "@ なぜならそのプログラム技法も何かの基本的な技法の組み合わせで出来ているからだ。B" String(3) = "@ これはその他の学問も基本がわからないと応用が利かないということと同じ現象で、" String(4) = "別に特に珍しいことでもない。B" String(5) = "C しかしゲームプログラムとなると覚えなくてはならない基礎が沢山あり、" String(6) = "さらにある程度クオリティの高いソフトを作ろうとすると色々なプログラム技法を" String(7) = "習得しなくてはならない。B" String(8) = "@ しかもある程度レベルが高くなると自分で技法を編み出すか、技術レベルの高い" String(9) = "プログラマーに聞くなどするしか方法がなく大変厄介である。B" String(10) = "というかそのせいでゲームプログラムの敷居は高くなっているといえる。BE" *main EndFlag = 0 // 終了フラグ sdim OneMojiBuf, 64 // 1文字分一時記憶 DxLib_Init if( stat == -1 ){ // DXライブラリ初期化処理 dialog "エラー" : end // エラーが起きたら直ちに終了 } // 描画位置の初期位置セット DrawPointX = 0 DrawPointY = 0 // 参照文字位置をセット SP = 0 // 1行目の CP = 0 // 0文字 // フォントのサイズセット SetFontSize MOJI_SIZE // 終了フラグを倒す EndFlag = 0 // ループ repeat ProcessMessage if stat != 0 : break CheckHitKey KEY_INPUT_ESCAPE if stat != 0 : break Moji = peek(String(SP), CP) switch Moji case '@' // 改行文字 // 改行処理および参照文字位置を一つ進める gosub *Kaigyou CP++ swbreak case 'B' // ボタン押し待ち文字 // ボタン押し待ちおよび参照文字位置を一つ進める WaitKey CP++ swbreak case 'E' // 終了文字 // 終了フラグを立てるおよび参照文字位置を一つ進める EndFlag = 1 CP++ swbreak case 'C' // クリア文字 // 画面を初期化して描画文字位置を初期位置に戻すおよび参照文字位置を一つ進める ClearDrawScreen 0 DrawPointY = 0 DrawPointX = 0 CP++ swbreak default // その他の文字 // 1文字分抜き出す(2byteずつ) wpoke OneMojiBuf, 0, wpeek(String(SP), CP) // 1文字描画 GetColor 255, 255, 255 DrawString DrawPointX * MOJI_SIZE, DrawPointY * MOJI_SIZE, OneMojiBuf, stat // 参照文字位置を2バイト勧める CP+=2 // カーソルを一文字文進める DrawPointX++ // 少し待つ WaitTimer 10 // 画面からはみ出たら改行する if( DrawPointX * MOJI_SIZE + MOJI_SIZE > 640 ) : gosub *Kaigyou swbreak swend // 終了フラグが1だったら終了する if( EndFlag == 1 ) : break // 参照文字列の終端まで行っていたら参照文字列を進める if ( Moji == 0 ){ SP++ CP = 0 } loop DxLib_End // DXライブラリ使用の終了処理 end stop // 改行 *Kaigyou TempGraph = 0 // 描画行位置を一つ下げる DrawPointY++ // 描画列を最初に戻す DrawPointX = 0 // もし画面からはみ出るなら画面をスクロールさせる if( DrawPointY * MOJI_SIZE + MOJI_SIZE > 480 ){ // テンポラリグラフィックの作成 MakeGraph 640, 480 TempGraph = stat // 画面の内容を丸々コピーする GetDrawScreenGraph 0, 0, 640, 480, TempGraph // 一行分上に貼り付ける DrawGraph 0, -MOJI_SIZE, TempGraph, FALSE // 一番下の行の部分を黒で埋める DrawBox 0, 480 - MOJI_SIZE, 640, 480, 0, TRUE // 描画行位置を一つあげる DrawPointY-- // グラフィックを削除する DeleteGraph TempGraph } return