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