home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 November
/
VPR9811A.BIN
/
FFILLY
/
NandD
/
nandd.tfy
< prev
next >
Wrap
Text File
|
1998-08-26
|
15KB
|
504 lines
#info INAM "Night'n'Day version 1.0"
#info IART "POCOPEN:GGB02243@nifty.ne.jp,poco@yun.co.jp"
#info ICOP "POCOPEN:GGB02243@nifty.ne.jp,poco@yun.co.jp"
#include rgb2bgr.h
#include draw3D.h
#define NAME 0x3737ff
#define SHADOW 0x000000
#define INFO 0x9fe464
#define SCORE 0x1a85e6
#define STAGE 0x9f6060
#define KEY 0xff9bff
#define RESULT 0xabcbce
int pic,a[],you,turn,size,num[],pID[],win;
str pn[],pName[],LF;
main(){
//Debug(1);
size=8;
LF=StrCode(0x0a);
pic=LoadPic("nandd.bmp");
SetLineSize(1);
init(1);
}
//DirectPlayの初期化
int dp(){
int ID,w,h,dummy;
str name;
ID=DPInit(0x39ca9000);
if(ID==-1){
CloseWin(win);
del_us;
del_me;
}
else{
name=LF;
while(name==LF){
name=SubStr(StrInput("あなたの名前は?(Cancelで終了)"),0,10);
}
if(CharCode(name)==0x00){
CloseWin(win);
del_us;
del_me;
}
BackMode(1);
SetFont(20,"Times New Roman",0,0,0,0,400);
bgCol(0);
wTextWrite(" Player's Name: ",pic,50,8,NAME);
w=GetLowWord(GetTextSize(" Player's Name: "));
SetFont(20,"MS ゴシック",128,0,0,0,500);
wTextWrite(name+" ",pic,50+w,8,NAME);
DPSetName(name);
if(DPIsHost()==0){
DPSendMessage("",1);
SetFont(24,"MS ゴシック",128,0,0,0,400);
SetFont(24,"MS ゴシック",128,0,0,0,400);
w=GetLowWord(GetTextSize("ゲームを開始します"))+2;
h=GetHiWord(GetTextSize("ゲームを開始します"))+2;
dummy=CreatePic(pic,w,h);
MovePic(pic,380,200,380+w,200+h,dummy);
wTextWrite("挑戦します!",pic,380,200,INFO);
you=1;
pn[1]=name;
mes(DP_RECEIVE){
DPGetMessage();
if(MesP2==2){
pID[0]=MesP1;
pn[0]=DPGetName(pID[0]);
mes(TIME){
step(20){
del_us;
,,MovePic(dummy,0,0,w,h,pic,380,200);
wTextWrite("ゲームを開始します",pic,380,200,INFO);
,,MovePic(dummy,0,0,w,h,pic,380,200);
game();
DelPic(dummy);
del_me;
}
}
}
}
}
else{
pID[0]=ID;
SetFont(24,"MS ゴシック",128,0,0,0,400);
w=GetLowWord(GetTextSize("挑戦者を待っています"))+2;
h=GetHiWord(GetTextSize("挑戦者を待っています"))+2;
dummy=CreatePic(pic,w,h);
MovePic(pic,380,200,380+w,200+h,dummy);
mes(TIME){
step(20){
wTextWrite("挑戦者を待っています",pic,380,200,INFO);
,MovePic(dummy,0,0,w,h,pic,380,200);
}
}
mes(DP_RECEIVE){
DPGetMessage();
if(MesP2==1){
del_us;
MovePic(dummy,0,0,w,h,pic,380,200);
wTextWrite("挑戦者が来ました!",pic,380,200,INFO);
pID[1]=MesP1;
pName[1]=DPGetName(pID[1]);
you=0;
pn[0]=name;
pn[1]=pName[1];
DPSendMessage("",2,pID[1]);
}
else if(MesP2==2){
mes(TIME){
step(20){
del_us;
,,MovePic(dummy,0,0,w,h,pic,380,200);
wTextWrite("ゲームを開始します",pic,380,200,INFO);
,,MovePic(dummy,0,0,w,h,pic,380,200);
game();
DelPic(dummy);
del_me;
}
}
}
}
}
}
}
//ゲーム初期化
int init(int new){
int dummy,i,j;
dummy=LoadPic("nandd.bmp");
MovePic(dummy,0,40,640,440,pic,0,40);
DelPic(dummy);
draw3D(pic,36,36,43+size*40,43+size*40,STAGE,3);
for(i=0;i<size;i=i+1){
for(j=0;j<size;j=j+1){
draw3D(pic,41+i*40,41+j*40,78+i*40,78+j*40,STAGE,2,40,1);
}
}
for(i=0;i<size+2;i=i+1){
for(j=0;j<size+2;j=j+1){
a[i*100+j]=-1;
}
}
CapTitle(" Night'n'Day version 1.0");
if(new==1){
win=OpenWin(pic);
dp();
}
else game();
}
//ゲーム本体
int game(){
str abc;
int pass[],dummy,i,j,k,x,y;
pass[0]=0;
pass[1]=0;
turn=0;
dummy=CreatePic(pic,240,280);
MovePic(pic,400,120,240,280,dummy);
BackMode(1);
SetFont(16,"MS ゴシック",128,0,0,0,600);
wTextWrite("終了:右クリック",pic,410,325,KEY);
wTextWrite("パス:[P]キー",pic,410,343,KEY);
wTextWrite("次のゲーム:[N]キー",pic,410,359,KEY);
wTextWrite("ヘルプ:[H]キー",pic,410,375,KEY);
SetFont(22,"MS ゴシック",128,0,0,0,600);
num[0]=2;
num[1]=2;
for(i=0;i<2;i=i+1){
draw(10,i+3,i);
wTextWrite(StrPrint("%s:%3ld",pn[i],num[i]),pic,440,130+i*40,SCORE);
}
wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
draw(size/2,size/2,0);
draw(size/2,size/2+1,1);
draw(size/2+1,size/2,1);
draw(size/2+1,size/2+1,0);
mes(KEY_DOWN){
if(StrCode(MesP2)=="P"&&turn==you){
k=0;
for(i=1;i<size+1;i=i+1){
for(j=1;j<size+1;j=j+1){
if(a[i*100+j]==-1){
if(check2(i,j,turn,0)>0)k=k+1;
}
}
}
if(k==0){
DPSendMessage("",5);
}
else{
MsgBox(StrPrint("%s はパスできません",pn[turn]));
pass[turn]=0;
}
}
if(StrCode(MesP2)=="N"&&turn==you){
if(MsgBox("次のゲームを始めますか?",0x24)==6){
DPSendMessage("",4);
}
}
if(StrCode(MesP2)=="H"&&turn==you){
Shell("nandd.txt");
}
}
mes(RBDOWN){
if(MsgBox("終了しますか?",0x24)==6){
DPSendMessage("",6);
}
}
mes(DP_RECEIVE){
abc=DPGetMessage();
if(MesP2==1){
if(turn!=you){
x=StrtoInt(SubStr(abc,0,2));
y=StrtoInt(SubStr(abc,2,2));
check2(x,y,turn);
draw(x,y,turn);
num[turn]=num[turn]+1;
MovePic(dummy,0,0,240,180,pic,400,120);
for(i=0;i<2;i=i+1){
draw(10,i+3,i);
wTextWrite(StrPrint("%s:%3ld",pn[i],num[i]),pic,440,130+i*40,SCORE);
}
if(num[you]+num[(you+1)%2]==size*size){
MovePic(dummy,0,100,240,180,pic,400,220);
DelPic(dummy);
if(num[you]>num[(you+1)%2])end(0);
if(num[you]==num[(you+1)%2])end(1);
if(num[you]<num[(you+1)%2])end(2);
del_us;
del_me;
}
turn=(turn+1)%2;
wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
}
else if(num[you]+num[(you+1)%2]==size*size){
del_me;
}
else{
turn=(turn+1)%2;
MovePic(dummy,0,80,240,100,pic,400,200);
wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
}
}
else if(MesP2==5){
MsgBox(StrPrint("%s はパスしました",pn[turn]));
pass[turn]=1;
if(pass[0]&&pass[1]){
MovePic(dummy,0,100,240,180,pic,400,220);
DelPic(dummy);
if(num[you]>num[(you+1)%2])end(0);
if(num[you]<num[(you+1)%2])end(2);
del_us;
del_me;
}
else{
turn=(turn+1)%2;
MovePic(dummy,0,80,240,100,pic,400,200);
wTextWrite(StrPrint("%s の順番です",pn[turn]),pic,400,230,INFO);
}
}
else if(MesP2==4){
del_us;
init(0);
del_me;
}
else if(MesP2==6){
DPEnd();
CloseWin(win);
del_all;
del_me;
}
}
mes(LBDOWN){if(turn==you){
x=(MesP2-40)/40+1;
y=(MesP3-40)/40+1;
if(check1(x,y,turn)==1){
MsgBox("そこには置けません");
}
else{
if(check2(x,y,turn)){
draw(x,y,turn);
DPSendMessage(StrPrint("%02ld%02ld",x,y),1);
num[turn]=num[turn]+1;
MovePic(dummy,0,0,240,180,pic,400,120);
for(i=0;i<2;i=i+1){
draw(10,i+3,i);
wTextWrite(StrPrint("%s:%3ld",pn[i],num[i]),pic,440,130+i*40,SCORE);
}
if(num[you]+num[(you+1)%2]==size*size){
MovePic(dummy,0,0,240,260,pic,400,140);
DelPic(dummy);
if(num[you]>num[(you+1)%2])end(0);
if(num[you]==num[(you+1)%2])end(1);
if(num[you]<num[(you+1)%2])end(2);
del_me;
}
}
else{
MsgBox("そこには置けません");
}
}
}}
}
//コマを描く
int draw(int x,int y,int bw){
if(bw==1){
draw3D(pic,x*40+4,y*40+4,x*40+35,y*40+35,0x22b9d9,2);
}
else if(bw==0){
draw3D(pic,x*40+4,y*40+4,x*40+35,y*40+35,0x808080,2);
}
a[x*100+y]=bw;
}
//置けるかどうかチェックその1
int check1(int x,int y,int bw){
if(x>8)return 1;
if(a[x*100+y]!=-1)return 1;
else return 0;
}
//反転チェック&置けるかどうかチェックその2
int check2(int x,int y,int bw,int mode=1){
int flag,i,j,k,m;
flag=0;
if(a[(x-1)*100+y]==(bw+1)%2){
for(i=x-2;i>0;i=i-1){
if(a[i*100+y]==-1)goto next1;
if(a[i*100+y]==bw){
for(j=x-1;j>i;j=j-1){
if(mode)draw(j,y,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next1;
}
}
}
next1:;
if(a[(x+1)*100+y]==(bw+1)%2){
for(i=x+2;i<size+2;i=i+1){
if(a[i*100+y]==-1)goto next2;
if(a[i*100+y]==bw){
for(j=x+1;j<i;j=j+1){
if(mode)draw(j,y,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next2;
}
}
}
next2:;
if(a[x*100+y-1]==(bw+1)%2){
for(i=y-2;i>0;i=i-1){
if(a[x*100+i]==-1)goto next3;
if(a[x*100+i]==bw){
for(j=y-1;j>i;j=j-1){
if(mode)draw(x,j,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next3;
}
}
}
next3:;
if(a[x*100+y+1]==(bw+1)%2){
for(i=y+2;i<size+2;i=i+1){
if(a[x*100+i]==-1)goto next4;
if(a[x*100+i]==bw){
for(j=y+1;j<i;j=j+1){
if(mode)draw(x,j,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next4;
}
}
}
next4:;
if(a[(x-1)*100+y-1]==(bw+1)%2){
k=-1;
for(i=y-2;i>0;i=i-1){
k=k-1;
if(a[(x+k)*100+i]==-1)goto next5;
if(a[(x+k)*100+i]==bw){
m=0;
for(j=y-1;j>i;j=j-1){
m=m-1;
if(mode)draw(x+m,j,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next5;
}
}
}
next5:;
if(a[(x+1)*100+y+1]==(bw+1)%2){
k=1;
for(i=y+2;i<size+2;i=i+1){
k=k+1;
if(a[(x+k)*100+i]==-1)goto next6;
if(a[(x+k)*100+i]==bw){
m=0;
for(j=y+1;j<i;j=j+1){
m=m+1;
if(mode)draw(x+m,j,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next6;
}
}
}
next6:;
if(a[(x-1)*100+y+1]==(bw+1)%2){
k=-1;
for(i=y+2;i<size+2;i=i+1){
k=k-1;
if(a[(x+k)*100+i]==-1)goto next7;
if(a[(x+k)*100+i]==bw){
m=0;
for(j=y+1;j<i;j=j+1){
m=m-1;
if(mode)draw(x+m,j,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next7;
}
}
}
next7:;
if(a[(x+1)*100+y-1]==(bw+1)%2){
k=1;
for(i=y-2;i>0;i=i-1){
k=k+1;
if(a[(x+k)*100+i]==-1)goto next8;
if(a[(x+k)*100+i]==bw){
m=0;
for(j=y-1;j>i;j=j-1){
m=m+1;
if(mode)draw(x+m,j,bw);
num[bw]=num[bw]+1;
num[(bw+1)%2]=num[(bw+1)%2]-1;
}
flag=1;
goto next8;
}
}
}
next8:;
return flag;
}
//ゲームエンド
int end(int r){
int dummy;
str abc;
dummy=CreatePic(pic,260,120);
MovePic(pic,380,230,260,120,dummy);
BackMode(1);
SetFont(24,"MS ゴシック",128,0,0,0,500);
if(r==0)abc=pn[you]+" の勝ち";
if(r==1)abc="引き分け";
if(r==2)abc=pn[you]+" の負け";
wTextWrite(abc,pic,400,230,RESULT);
SetFont(24,"MS ゴシック",128,0,0,0,400);
mes(TIME){
step(20){
wTextWrite("クリックしてください",pic,380,290,INFO);
,
MovePic(dummy,0,40,260,80,pic,380,270);
}
}
mes(LBDOWN){
del_us;
init(0);
del_me;
}
}
int wTextWrite(str _str,int _pic,int _x,int _y,int _col1,int _col2=SHADOW,int _d=2){
textCol(_col2);
TextWrite(_str,_pic,_x+_d,_y+_d);
textCol(_col1);
TextWrite(_str,_pic,_x,_y);
}