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 24DrawPointX = 0 : DrawPointY = 0 // 文字列描画の位置SP = 0 : CP = 0 // 参照する文字列番号と文字列中の文字の位置(ポインタ不使用)sdim String, 256, 11String(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"*mainEndFlag = 0 // 終了フラグsdim OneMojiBuf, 64 // 1文字分一時記憶DxLib_Initif( stat == -1 ){ // DXライブラリ初期化処理dialog "エラー" : end // エラーが起きたら直ちに終了}// 描画位置の初期位置セットDrawPointX = 0DrawPointY = 0// 参照文字位置をセットSP = 0 // 1行目のCP = 0 // 0文字// フォントのサイズセットSetFontSize MOJI_SIZE// 終了フラグを倒すEndFlag = 0// ループrepeatProcessMessageif stat != 0 : breakCheckHitKey KEY_INPUT_ESCAPEif stat != 0 : breakMoji = peek(String(SP), CP)switch Mojicase '@' // 改行文字// 改行処理および参照文字位置を一つ進めるgosub *KaigyouCP++swbreakcase 'B' // ボタン押し待ち文字// ボタン押し待ちおよび参照文字位置を一つ進めるWaitKeyCP++swbreakcase 'E' // 終了文字// 終了フラグを立てるおよび参照文字位置を一つ進めるEndFlag = 1CP++swbreakcase 'C' // クリア文字// 画面を初期化して描画文字位置を初期位置に戻すおよび参照文字位置を一つ進めるClearDrawScreen 0DrawPointY = 0DrawPointX = 0CP++swbreakdefault // その他の文字// 1文字分抜き出す(2byteずつ)wpoke OneMojiBuf, 0, wpeek(String(SP), CP)// 1文字描画GetColor 255, 255, 255DrawString DrawPointX * MOJI_SIZE, DrawPointY * MOJI_SIZE, OneMojiBuf, stat// 参照文字位置を2バイト勧めるCP+=2// カーソルを一文字文進めるDrawPointX++// 少し待つWaitTimer 10// 画面からはみ出たら改行するif( DrawPointX * MOJI_SIZE + MOJI_SIZE > 640 ) : gosub *Kaigyouswbreakswend// 終了フラグが1だったら終了するif( EndFlag == 1 ) : break// 参照文字列の終端まで行っていたら参照文字列を進めるif ( Moji == 0 ){SP++CP = 0}loopDxLib_End // DXライブラリ使用の終了処理endstop// 改行*KaigyouTempGraph = 0// 描画行位置を一つ下げるDrawPointY++// 描画列を最初に戻すDrawPointX = 0// もし画面からはみ出るなら画面をスクロールさせるif( DrawPointY * MOJI_SIZE + MOJI_SIZE > 480 ){// テンポラリグラフィックの作成MakeGraph 640, 480TempGraph = 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