home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 September
/
VPR9709A.ISO
/
Ffilly
/
Ftile_ca
/
FTILE_CA.TFY
< prev
next >
Wrap
Text File
|
1996-12-28
|
17KB
|
742 lines
#info INAM ふらっとタイル
#info ISBJ パズルゲーム ふらっとタイル Ver 4.00+
#info IART 迎 亮
#info ICOP 迎 亮
#info IKEY flat
#info GENR joy
#info MDFY Ask me
#info TRNS Ask me
#info JINT Ask me
#info INST Other
#info VIDO 640x480;256
#info GRPC 迎 亮,"MXE05170@niftyserve.or.jp"
#info EFCT 迎 亮,"MXE05170@niftyserve.or.jp"
#info PROD 迎 亮,"MXE05170@niftyserve.or.jp"
#info CONT 迎 亮,"MXE05170@niftyserve.or.jp"
#define VER 4.00+
#define XWIDTH 80
#define YWIDTH 20
#define XSTPOS 60
#define YSTPOS 90
#define XNO 6
#define YNO 10
#define MAXGAMENO 29
int openwinno,basewinno,reportwinno,sortwinno,helpwinno,profilewinno,movewinno;
int rulewinno,aboutwinno,clearwinno,endingwinno;
int openingpic,basepic,reportpic,reportclspic,sortpic,rulepic;
int bigflatpic,uppic,rightpic,leftpic,downpic;
int whitepic,greenpic,bluepic,redpic,yellowpic;
int bottunpic;
int helppic,helpprofilepic,helpmovepic,helprulepic,helpaboutpic,clearpic,clearokpic,endingpic;
int color;
int placeX,placeY,dir;
int count,clearsum,stepsum,check,redocheck;
int dirsave,placeXsave,placeYsave,p2save,p3save,countsave,openwinnosave;
int saveflag;
int tile[],redo[],save[],sortarray[],stagearray[];
#include "wave.tfy"
#include "picture.tfy"
#include "question.tfy"
#include "flatman.tfy"
#include "help.tfy"
#include "report.tfy"
#include "cotton.tfy"
#include "security.tfy"
dummy(){
return;
}
reverse(){
int i;
i=placeX+9*placeY;
if(dir==0){ //下向きタイル戻し
if(check==1){
movewave();
tile[i+9]=tile[i+9]+1;
tile[i+18]=tile[i+18]-1;
MovePic(tile[i+9]-48,0,0,32,32,basepic,12+35*placeX,12+35*(placeY+1));
MovePic(tile[i+18]-48,0,0,32,32,basepic,12+35*placeX,12+35*(placeY+2));
countstep();
check=0;
}
else{
warnwave();
MsgBox(" ルール違反です",0x30);
}
}
if(dir==1){ //右向きタイル戻し
if(check==1){
movewave();
tile[i+1]=tile[i+1]+1;
tile[i+2]=tile[i+2]-1;
MovePic(tile[i+1]-48,0,0,32,32,basepic,12+35*(placeX+1),12+35*placeY);
MovePic(tile[i+2]-48,0,0,32,32,basepic,12+35*(placeX+2),12+35*placeY);
countstep();
check=0;
}
else{
warnwave();
MsgBox(" ルール違反です",0x30);
}
}
if(dir==2){ //上向きタイル戻し
if(check==1){
movewave();
tile[i-9]=tile[i-9]+1;
tile[i-18]=tile[i-18]-1;
MovePic(tile[i-9]-48,0,0,32,32,basepic,12+35*(placeX),12+35*(placeY-1));
MovePic(tile[i-18]-48,0,0,32,32,basepic,12+35*(placeX),12+35*(placeY-2));
countstep();
check=0;
}
else{
warnwave();
MsgBox(" ルール違反です",0x30);
}
}
if(dir==3){ //左向きタイル戻し
if(check==1){
movewave();
tile[i-1]=tile[i-1]+1;
tile[i-2]=tile[i-2]-1;
MovePic(tile[i-1]-48,0,0,32,32,basepic,12+35*(placeX-1),12+35*placeY);
MovePic(tile[i-2]-48,0,0,32,32,basepic,12+35*(placeX-2),12+35*placeY);
countstep();
check=0;
}
else{
warnwave();
MsgBox(" ルール違反です",0x30);
}
}
}
move(stageno){
real x,y;
int i,j,msgno;
int p2,p3;
str string;
p2=46; p3=46; //ふらっとマンの初期位置
mes(LBDOWN){
p2=11+placeX*35; p3=11+placeY*35;
//やり直し
if((MesP2>360 && MesP3>275 && MesP2<420 && MesP3<295) && MesP1==(basewinno)){
MovePic(bottunpic,59,133,59,19,basepic,360,275);
openwave();
msgno=MsgBox("やり直してもいいですか?",0x20+1);
if(msgno==1){
for(i=0;i<81;i=i+1){
j=i/9;
MovePic(yellowpic,0,0,32,32,basepic,12+35*(i-9*j),12+35*j);
}
stageredo();
check=0;
count=-1;
countstep();
startwave();
}
MovePic(bottunpic,0,133,59,19,basepic,360,275);
if(msgno==2) closewave();
}
//一手戻し
if((MesP2>450 && MesP3>275 && MesP2<510 && MesP3<295) && MesP1==(basewinno)){
MovePic(bottunpic,59,171,59,19,basepic,450,275);
reverse();
MovePic(bottunpic,0,171,59,19,basepic,450,275);
closewave();
}
//セーブ
if((MesP2>360 && MesP3>300 && MesP2<420 && MesP3<320) && MesP1==(basewinno)){
MovePic(bottunpic,59,209,59,19,basepic,360,300);
openwave();
msgno=MsgBox("セーブしました",0x40);
if(msgno==1){
saveflag=1;
for(i=0;i<81;i=i+1){
save[i]=tile[i];
}
dirsave=dir;
placeXsave=placeX;
placeYsave=placeY;
p2save=p2;
p3save=p3;
countsave=count;
check=0;
}
MovePic(bottunpic,0,209,59,19,basepic,360,300);
closewave();
}
//ロード
if((MesP2>450 && MesP3>300 && MesP2<510 && MesP3<320) && MesP1==(basewinno)){
MovePic(bottunpic,59,228,59,19,basepic,450,300);
if(saveflag==1){
openwave();
msgno=MsgBox("ロードしてもいいですか?",0x20+1);
if(msgno==1){
for(i=0;i<81;i=i+1){
for(i=0;i<81;i=i+1){
j=i/9;
MovePic(yellowpic,0,0,32,32,basepic,12+35*(i-9*j),12+35*j);
tile[i]=save[i];
}
}
dir=dirsave;
placeX=placeXsave;
placeY=placeYsave;
p2=p2save;
p3=p3save;
count=countsave-1;
countstep();
check=0;
tiledraw();
if(dir==0) MovePic(downpic,0,0,33,33,basepic,p2,p3,0,color);
if(dir==1) MovePic(rightpic,0,0,33,33,basepic,p2,p3,0,color);
if(dir==2) MovePic(uppic,0,0,33,33,basepic,p2,p3,0,color);
if(dir==3) MovePic(leftpic,0,0,33,33,basepic,p2,p3,0,color);
}
}
else{
warnwave();
MsgBox("セーブデータがありません",0x10+1);
}
MovePic(bottunpic,0,228,59,19,basepic,450,300);
closewave();
}
//ヘルプ
if((MesP2>360 && MesP3>325 && MesP2<420 && MesP3<345) && MesP1==(basewinno)){
MovePic(bottunpic,59,19,59,19,basepic,360,325);
CapTitle("ふらっとタイル Ver 3.00 ヘルプ");
helpwinno=OpenWin(helppic,60,60);
help();
MovePic(bottunpic,0,19,59,19,basepic,360,325);
}
//ステージ終了
if((MesP2>450 && MesP3>325 && MesP2<510 && MesP3<345) && MesP1==(basewinno)){
MovePic(bottunpic,59,152,59,19,basepic,450,325);
openwave();
MovePic(bottunpic,0,152,59,19,basepic,450,325);
CloseWin(basewinno);
for(i=0;i<81;i=i+1){
j=i/9;
MovePic(yellowpic,0,0,32,32,basepic,12+35*(i-9*j),12+35*j);
}
redocheck=0;
saveflag=0;
openwinno=openwinnosave;
openingwave();
del_me;
}
if((MesP2>p2 && MesP3>p3+35 && MesP2<p2+33 && MesP3<281+33) && MesP1==(basewinno)){
if(check=1) check=0;
countstep(stageno);
if(dir==0) flatmanmovedown(p2,p3); //下
else{
dir=0;
flatmanchange(p2,p3);
}
}
if((MesP2>p2+35 && MesP3>p3 && MesP2<281+33 && MesP3<p3+33) && MesP1==(basewinno)){
if(check=1) check=0;
countstep(stageno);
if(dir==1) flatmanmoveright(p2,p3); //右
else{
dir=1;
flatmanchange(p2,p3);
}
}
if((MesP2>p2 && MesP3>11 && MesP2<p2+33 && MesP3<p3-2) && MesP1==(basewinno)){
if(check=1) check=0;
countstep(stageno);
if(dir==2) flatmanmoveup(p2,p3); //上
else{
dir=2;
flatmanchange(p2,p3);
}
}
if((MesP2>11 && MesP3>p3 && MesP2<p2-2 && MesP3<p3+35) && MesP1==(basewinno)){
if(check=1) check=0;
countstep(stageno);
if(dir==3) flatmanmoveleft(p2,p3); //左
else{
dir=3;
flatmanchange(p2,p3);
}
}
}
mes(RBDOWN){
tilemovecheck(stageno);
}
mes(RBDBLCLK){
dummy();
}
}
tilemovecheck(stageno){
int i;
i=placeX+placeY*9;
if(dir==0){ //下向きチェック
if(i<63){
tilemove(i,stageno);
}
}
if(dir==1){ //右向きチェック
if(i%9!=7 && i%9!=8){
tilemove(i,stageno);
}
}
if(dir==2){ //上向きチェック
if(i>17){
tilemove(i,stageno);
}
}
if(dir==3){ //左向きチェック
if(i%9!=0 && i%9!=1){
tilemove(i,stageno);
}
}
}
tilemove(i,stageno){
if(dir==0 && tile[i+9]-tile[i]==1 && tile[i+18]<tile[i+9]){ //下向きタイル移動
movewave();
tile[i+9]=tile[i+9]-1;
tile[i+18]=tile[i+18]+1;
MovePic(tile[i+9]-48,0,0,32,32,basepic,12+35*placeX,12+35*(placeY+1));
MovePic(tile[i+18]-48,0,0,32,32,basepic,12+35*placeX,12+35*(placeY+2));
countstep();
clearcheck(stageno);
check=1;
}
if(dir==1 && tile[i+1]-tile[i]==1 && tile[i+2]<tile[i+1]){ //右向きタイル移動
movewave();
tile[i+1]=tile[i+1]-1;
tile[i+2]=tile[i+2]+1;
MovePic(tile[i+1]-48,0,0,32,32,basepic,12+35*(placeX+1),12+35*placeY);
MovePic(tile[i+2]-48,0,0,32,32,basepic,12+35*(placeX+2),12+35*placeY);
countstep();
clearcheck(stageno);
check=1;
}
if(dir==2 && tile[i-9]-tile[i]==1 && tile[i-18]<tile[i-9]){ //上向きタイル移動
movewave();
tile[i-9]=tile[i-9]-1;
tile[i-18]=tile[i-18]+1;
MovePic(tile[i-9]-48,0,0,32,32,basepic,12+35*(placeX),12+35*(placeY-1));
MovePic(tile[i-18]-48,0,0,32,32,basepic,12+35*(placeX),12+35*(placeY-2));
countstep();
clearcheck(stageno);
check=1;
}
if(dir==3 && tile[i-1]-tile[i]==1 && tile[i-2]<tile[i-1]){ //左向きタイル移動
movewave();
tile[i-1]=tile[i-1]-1;
tile[i-2]=tile[i-2]+1;
MovePic(tile[i-1]-48,0,0,32,32,basepic,12+35*(placeX-1),12+35*placeY);
MovePic(tile[i-2]-48,0,0,32,32,basepic,12+35*(placeX-2),12+35*placeY);
countstep();
clearcheck(stageno);
check=1;
}
}
ending()
{
mes(TIME){
step(20){,,,,,
CapTitle("");
endingwinno=OpenWin(endingpic,200,150);
,,,,,
CloseWin(endingwinno);
end_step;
del_me;
}
}
}
clearcheck(stageno){ //クリアーチェック
int i,j,n;
str stagestring;
for(i=0;i<81;i=i+1){
if(tile[i]>49) return;
}
stagestring=StrPrint("stage_%ld",stageno+1);
n=GetIniInt("report",stagestring,-1,"flattile.ini");
CapTitle("");
clearwave();
if(n>count || n==0) clearwinno=OpenWin(clearpic,200,150);
else clearwinno=OpenWin(clearpic,200,150,240,100);
mes(TIME){
step(20){,,,
if(n>count || n==0){
WriteIniInt("report",stagestring,count,"flattile.ini");
clearbmp();
stagewrite();
}
CloseWin(basewinno);
basewinno=-1;
openwinno=openwinnosave;
CloseWin(clearwinno);
end_step;
del_me;
}
}
mes(TIME){
step(20){,,,
for(i=0;i<81;i=i+1){
j=i/9;
MovePic(yellowpic,0,0,32,32,basepic,12+35*(i-9*j),12+35*j);
}
,,
if(n>count || n==0){
MovePic(reportclspic,0,0,540,335,reportpic,0,0);
MovePic(reportclspic,0,0,540,335,sortpic,0,0);
MovePic(bottunpic,0,266,59,19,reportpic,270,300); //成績表ソートボタン
MovePic(bottunpic,0,247,59,19,reportpic,360,300); //成績表ファイルボタン
MovePic(bottunpic,0,76,59,19,reportpic,450,300); //成績表OKボタン
MovePic(bottunpic,0,76,59,19,sortpic,450,300); //成績表ソートOKボタン
reporttitle(); //成績表新規作成
sorttitle(stepsum,clearsum); //成績表ソート新規作成
security(stageno+1); //暗号化
}
end_step;
del_me;
}
}
if(stageno==59)
ending();
}
stagewrite()
{
int stageno;
int i,j;
str string;
stageno=0;
for(i=0;i<6;i=i+1){
for(j=0;j<10;j=j+1){
stageno=stageno+1;
SetLineSize(2);
DrawRect(openingpic,60,90,541,291,0,1);
SetLineSize(1);
DrawLine(openingpic,60,90+20*j,541,90+20*j);
DrawLine(openingpic,140+80*i,90,140+80*i,291);
BackMode(1);
SetFont(16, "MS ゴシック",128,0,0,0,400);
TextColor(0,0,0);
string=StrPrint("%2d",stageno);
TextWrite("STAGE",openingpic,68+80*i,92+20*j);
TextWrite(string,openingpic,118+80*i,92+20*j);
}
}
}
opening(){
int i,j;
SetLineSize(2);
DrawRect(openingpic,60,90,541,291,0,1);
SetLineSize(1);
SetPaintColor(0x000000);
stagewrite();
SetFont(16, "MS ゴシック",128,0,0,0,800);
TextColor(0,0,255);
TextWrite("Filly data by 迎 亮",openingpic,360,330);
SetFont(44, "MS ゴシック",128,0,0,0,500);
TextColor(255,0,0);
TextWrite("ふらっとタイル",openingpic,40,10);
SetFont(20, "MS ゴシック",128,0,0,0,500);
TextColor(255,0,255);
TextWrite("遊びたいステージを選択して下さい",openingpic,140,60);
SetFont(24, "MS ゴシック",0,0,0,0,600);
TextColor(255,0,0);
TextWrite("Ver 4.00+",openingpic,400,25);
}
clearbmp()
{
int i,j,k,size,stageno,stepsum,clearsum;
str string,nostring,stagestring,stepstring,clearstring;
j=0; stageno=0; stepsum=0; clearsum=0;
for(j=0;j<6;j=j+1){
for(i=0;i<10;i=i+1){
stageno=stageno+1;
stagestring=StrPrint("stage_%ld",stageno);
k=GetIniInt("report",stagestring,100,"flattile.ini");
if(k>0)
{
MovePic(clearokpic,j*80,i*20,80,20,openingpic,60+j*80,90+i*20);
}
}
}
}
select(){
int msgno,stageno;
mes(LBDOWN){
stageno=retgameno(MesP1,MesP2,MesP3);
if((MesP2>230 && MesP3>300 && MesP2<290 && MesP3<320) && MesP1==(openwinno)){
MovePic(bottunpic,59,190,59,19,openingpic,230,300);
CapTitle("ふらっとタイル Ver 4.00+ 成績表");
reportwinno=OpenWin(reportpic,40,40);
MovePic(bottunpic,0,190,59,19,openingpic,230,300);
report();
}
if((MesP2>320 && MesP3>300 && MesP2<380 && MesP3<320) && MesP1==(openwinno)){
MovePic(bottunpic,59,57,59,19,openingpic,320,300);
CapTitle("ふらっとタイル Ver 4.00+ 操作方法");
movewinno=OpenWin(helpmovepic,80,80);
MovePic(bottunpic,0,57,59,19,openingpic,320,300);
helpmove();
}
if((MesP2>410 && MesP3>300 && MesP2<470 && MesP3<320) && MesP1==(openwinno)){
MovePic(bottunpic,59,95,59,19,openingpic,410,300);
CapTitle("ふらっとタイル Ver 4.00+ ルール");
rulewinno=OpenWin(helprulepic,80,80);
MovePic(bottunpic,0,95,59,19,openingpic,410,300);
helprule();
}
if((MesP2>500 && MesP3>300 && MesP2<560 && MesP3<320) && MesP1==(openwinno)){
openwave();
MovePic(bottunpic,59,152,59,19,openingpic,500,300);
msgno=MsgBox("ふらっとタイルを終了してもいいですか?",0x20+1);
MovePic(bottunpic,0,152,59,19,openingpic,500,300);
if(msgno==1){
CloseWin(openwinno);
ExitTitle();
}
if(msgno==2) closewave();
}
if(stageno!=(-1)){ //選択画面の領域内である
if(stageno<=MAXGAMENO){
//登録されているゲームの面数以内である
if(stageno<58){
game(stageno);
}
else{
if(stageno==58){
if(clearsum>=58){
game(58);
}
else{
warnwave();
MsgBox("ステージ58までを全部クリアしてください",0x30);
}
}
if(stageno==59){
if(clearsum>=59){
game(59);
}
else{
warnwave();
MsgBox("ステージ59をクリアしてください",0x30);
}
}
}
}
else{
//登録されていないゲーム面の場合
warnwave();
MsgBox("このバージョンでは遊べません m(_ _)m",0x30);
}
}
}
}
game(stageno){
del_all;
int i,fileno;
str string;
saveflag=0; //セーブフラグ初期化
openwinnosave=openwinno; //オープニング画面番号待避
openwinno=-2;
count=-1; //カウント数のリセット
check=0; //チェックの初期値
countstep();
SetFont(24, "MS ゴシック",128,0,0,0,600);
TextColor(255,0,0);
TextWrite("ふらっとタイル",basepic,350,10);
string=StrPrint("STAGE %2d",stageno+1);
MovePic(yellowpic,0,0,50,30,basepic,450,40);
SetFont(30, "MS ゴシック",128,0,0,0,500);
TextColor(0,255,0);
TextWrite(string,basepic,375,40);
fileno=OpenF("question.dat");
tiledataread(stageno,fileno);
tiledraw();
CloseF(fileno);
placeX=1;placeY=1;dir=2; //スタートのふらっとマンの場所、向き
MovePic(uppic,0,0,33,33,basepic,46,46,0,color);
CapTitle("ふらっとタイル Ver 4.00+ ゲーム盤");
basewinno=OpenWin(basepic,40,40);
startwave();
move(stageno);
}
countstep(){
real i;
str string;
count=count+1;
string=StrPrint("STEP = %4ld",count);
MovePic(yellowpic,0,0,50,18,basepic,440,252);
SetFont(20, "MS ゴシック",0,0,0,0,600);
TextColor(0,0,255);
BackMode(1);
TextWrite(string,basepic,390,252);
}
openmainwindow(){
openwinno=OpenWin(openingpic,20,20);
PlayWAVE("opening.wav");
}
inifilecheck(){
int i;
str stagestring;
if(GetIniInt("check","flag",0,"flattile.ini")==0){
WriteIniInt("check","flag",1,"flattile.ini");
for(i=0;i<60;i=i+1){
stagestring=StrPrint("stage_%d",i+1);
WriteIniInt("report",stagestring,0,"flattile.ini");
}
}
if(GetIniInt("check","flag",0,"flattile.ini")==1){
WriteIniInt("check","flag",2,"flattile.ini");
for(i=0;i<60;i=i+1){
stagestring=StrPrint("pass_%d",i+1);
WriteIniInt("pass",stagestring,123456789,"flattile.ini");
security(i+1);
}
}
}
int passcheck()
{
int i,password;
str string;
for(i=0;i<30;i=i+1){
password=passget(i+1);
if(password!=0){
warnwave();
string=StrPrint("STAGE %ldのパスワードが違います",i+1);
MsgBox(string,0x30);
return(-1);
}
}
return(0);
}
main(){
int c;
inifilecheck();
c=passcheck();
if(c==0)
{
CapTitle("ふらっとタイル Ver 4.00+");
loadpicture(); //画像の読み込み
color=GetColor(yellowpic,1,1);
clearbmp();
drawpic(); //画像の描き込み
opening(); //オープニング関係の描き込み
openmainwindow();
select();
}
if(c!=0) ExitTitle();
}