⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scgo_219.txt

📁 电子词典文曲星tc800平台上的一款休闲围棋游戏,使用LAVAIDE编译。
💻 TXT
📖 第 1 页 / 共 2 页
字号:
//重走times步棋
{
int i;
while(times--)
{
 if(RmvdFlagStack_Top==RedoTimesMax){
		                 Beep();Message("已到局末!",50);
				  DrawFullScreen();
				  return;
				  }
 ReUnSta(0);
 RmvdFlagStack_Top++;
 Shou++;
  }
 }



void PutDown(int x,int y)
//经判断确定,在x,y处走棋
{
 int t;
 if(!IsInBoard(x,y))return;
 Board[x][y]=1+Turn;
 RemoveRound(x,y);
 Push(x,y);
 if(!BuZi)Turn=1-Turn;
 if(FlashAlert){
	         t=FlashSwitch;
	         FlashSwitch=0;
		 Undo(1);Redo(1);
		 FlashSwitch=t;
		}
 DoTimes++;
 }



int InputFileName(int s)
{
int i,t;
char ch,Caps,HuoZuiCap;
i=0;
Caps=1;
HuoZuiCap=1;
FileName[0]=0;
Locate(0,0);
printf("%s目录:LavaData\\SCGO\n文件:*\n\n",s,FileName);
printf("********************");
Locate(3,0);printf("CAPS:  [F1]   [F3]");

do
{
Locate(2,5);
printf("%s ",FileName);
Locate(2,14);
if(HuoZuiCap)printf(".SGO");
	else printf(".sgo");

	Box(40,31,150,48,1,2);
	ch=getchar();

		if(ch==F1)Caps=1-Caps;
		if(ch==F3)HuoZuiCap=1-HuoZuiCap;
		if((ch==F2||ch==LEFT)&&i>0){
						i--;
						FileName[i]=0;
						}
               if((ch>='a'&&ch<='z')||ch==BLANKKEY)
		{
			if(i<8)
			{
			if(ch==BLANKKEY)ch=95;
			else if(Caps)ch=ch-32;
			FileName[i++]=ch;
			FileName[i]=0;
			}
		}
	}
while(!(ch==ENTER||ch==JUMP));

if(HuoZuiCap)
 	strcat(FileName,".SGO");
	else strcat(FileName,".sgo");
ClearScreen();
if(ch==JUMP)return 0;
else return 1;
}



void putw(int i,int fp)
{
putc(i,fp);
i=i/0x100;
putc(i,fp);
}
 
int getw(int fp)
{
return getc(fp)+getc(fp)*0x100;
}



void Save()
{
int i,k;
char c,fp;
if(Message("保存棋局?",1))
  {if(!InputFileName("*****[保存棋局]*****")){return;}
  	if((fp=fopen(FileName, "r"))!=NULL)
     		{
		 fclose(fp);
	  	 if(Message("棋谱已存在!覆盖?",YES))ClearScreen();
		 else {return;}
		}
  if((fp=fopen(FileName, "w+"))==NULL) {
                                    		Message("文件操作失败!",YES);
						return ;
						}
  //else
fwrite("[SCGO_SGO]",NULL,10,fp);
      for(i=0;i<73;i++)
   {
    c=0;
    for(k=i*5;k<i*5+5;k++)c=c*3+Board[0][k];
    putc(c,fp);
	}

putc(Turn,fp);
putc(RmvdStkTop,fp);
putw(RedoTimesMax,fp);
putw(Shou,fp);
putw(RmvdFlagStack_Top,fp);
fwrite(PutDownXY_Stack[0],NULL,2*RedoTimesMax+2,fp);
fwrite(RmvdFlagStack,NULL,RedoTimesMax+1,fp);
fwrite(RemovedStack[0],NULL,2*RmvdStkTop+2,fp);
fclose(fp);
DoTimes=0;
Message("保存成功!",500);
  }
return;
}


void RemindSaving()
{if(DoTimes>10){WDO=30;Save();WDO=0;}} 



void LoadSGO()
{ 
  int i,k;
  char c,fp,temp[11];temp[10]=0;
  if((fp=fopen(FileName, "r"))==NULL) 
  {
   Beep();
   Message("无法打开!",YES);
   return ;
   }
   fread(temp,NULL,10,fp);
   if(strcmp(temp,"[SCGO_SGO]")){
				Message("这不是本程序存档!",YES);
				return;
				}

   Init();
   for(i=0;i<73;i++)
     {
     c=getc(fp);
	 for(k=i*5+4;k>=i*5;k--)
	                       {
				Board[0][k]=c%3;
	                       c=c/3;
                            }
      }

   Turn=getc(fp);
   RmvdStkTop=getc(fp);
   RedoTimesMax=getw(fp);
   Shou=getw(fp);
   RmvdFlagStack_Top=getw(fp);
   fread(PutDownXY_Stack[0],NULL,2*RedoTimesMax+2,fp);
   fread(RmvdFlagStack,NULL,RedoTimesMax+1,fp);
   fread(RemovedStack[0],NULL,2*RmvdStkTop+2,fp);
   fclose(fp);
   Message("读取成功!",500);
   ClearScreen();
   
}


void  ExitScgo()
 {
 int i;
 RemindSaving();
 ClearScreen();
 for(i=0;i<6;i++)
 Block(1+i,1+i,159-i,79-i,2);
 TextOut(50,18,"<谢谢使用>",1);
 TextOut(44,34,"<山 尘 制 作>",1);
 TextOut(34,50,"<QQ : 185027516>",1);
 Refresh();
 while(!Inkey());
 exit(0xff);
 } 



void PrintINFO()
{
 ClearScreen();
 SetScreen(1);
 printf("********[棋谱信息]********%s",QIPUINFO);
 getchar();
}



void LoadSGF()
{
int i,k,fp,t,flag;
char ch,ch1,ch2;
ch=0;i=0;
SetScreen(1);
if((fp=fopen(FileName, "r"))==NULL) 
  {
   Beep();
   Message("无法打开!",YES);
   return ;
   }
FlashAlert=FALSE;
Message("数据处理中...",10);
Init();
while(1)
{
	while(ch!=';'&&!feof(fp))
	{
	ch=getc(fp);
	QIPUINFO[i++]=ch;
	if(i>129)i--;
	}
	ch=getc(fp);
	QIPUINFO[i++]=ch;
	if(i>128)i--;
	if(ch=='B'||ch=='b')Turn=BLACKTURN;
		else if(ch=='W'||ch=='w')Turn=WHITETURN;
			 else if(!feof(fp))continue;

	ch=getc(fp);
	QIPUINFO[i++]=ch;
	if(i>128)i--;
	if(ch!='['&&(!feof(fp)))continue;
		else break;
}

i=i-2; 
QIPUINFO[i]=')';
QIPUINFO[++i]=NULL;

while(!feof(fp))
{
ch1=tolower(getc(fp))-'a';
ch2=tolower(getc(fp))-'a';
if(ch1>18||ch2>18){Message("读取错误!",1000);return;}
PutDown(ch1,ch2);

do 
{ch=getc(fp);}
while((ch!=';')&&(!feof(fp)));

do 
{ch=getc(fp);} 
while((ch!='[')&&(!feof(fp)));
}

fclose(fp);
ClearScreen();
Message("读取成功!",500);


DoTimes=0;
ClearScreen();
PrintINFO();
DrawFullScreen();
Message("现在是局末",1);
Message("按任意键回到局初",1);
Undo(RedoTimesMax);
FlashAlert=TRUE;
}


void Load()
{
int i,k;
char temp[5];
k=0;
if(!Message("读取棋谱?",YES))return;
RemindSaving();
if(!FileList(FileName))return;
i=strlen(FileName);
if(i>3)strcpy(temp,FileName+i-4);

for(i=0;i<strlen(temp);i++)
	temp[i]=toupper(temp[i]);

if(!strcmp(".SGO",temp))LoadSGO();
 else if(!strcmp(".SGF",temp))LoadSGF();
  	else Message("请选择SGO或SGF文件!",1000);

}



void OtherOptions()
{
char Key;
SetScreen(1);
printf("======== 其他选项 ========* 布子模式切换[- B -]  \n* 自动提子开关[- A -]  \n* 闪 动 开 关 [- F -]\n* 播 放 棋 谱 [- P -]\n* 播 放 间 隔 [- D -]");
Locate(5,22);
printf("%d秒",SplitDelayTime/1000);
Locate(3,22);
if(FlashSwitch)printf("开");
	else printf("关");

Box(0,0,159,79,1,2);
Box(8,13,156,77,1,2);
Key=getchar();
if(Key== 'f'){FlashSwitch=1-FlashSwitch;
		if(FlashSwitch)Message("闪动开",500);
			else Message("闪动关",500);
		}
if(Key== 'b'){if(BuZi){
			BuZi=FALSE;
                    	Auto=TRUE;
			InitStack();
			Message("退出布子模式",500);
			}
           	else  {
		         BuZi=TRUE;
		         Auto=FALSE;
			 RmvdFlagStack_Top=-1;
			 Shou=1;
			 Message("进入布子模式",500);
			 }
	      InitStack();
              DrawFullScreen();
	   }

if(Key== 'a'){
          if(!BuZi){
          		 Auto=1-Auto;
		   if(Auto)Message("自动提子开",500);
		   else Message("自动提子关",500);
          		 DrawFullScreen();
		   InitStack();
		   }
		} 

if(Key== 'p'  ){
			Message("~开始播放~",500);
  			DrawFullScreen();
			FlashAlert=TRUE;
	               while(RmvdFlagStack_Top<RedoTimesMax && !Inkey())
			      { 
				  Redo(1);
				  Delay(SplitDelayTime);
				  }
	  	       Message("~播放结束~",500);
			DrawFullScreen();
		}
if(Key=='d'){
		SetScreen(1);
		printf("请选择播放间隔时间:\n\1  2  3  4  5  6  7  8  9\n0-----------------------8S");
		Key=getchar();
		if(Key=='b')SplitDelayTime=10;
		else if(Key=='n')SplitDelayTime=1000;
		else if(Key=='m')SplitDelayTime=2000;
		else if(Key=='g')SplitDelayTime=3000;
		else if(Key=='h')SplitDelayTime=4000;
		else if(Key=='j')SplitDelayTime=5000;
		else if(Key=='t')SplitDelayTime=6000;
		else if(Key=='y')SplitDelayTime=7000;
		else if(Key=='u')SplitDelayTime=8000;
		else return;
		printf("播放间隔设置成[%d]秒",SplitDelayTime/1000);
		getchar();
		}
}

void DisplayState()	//F4
{
int i;
char ch;
FlashAlert=FALSE;
ClearScreen();
SetScreen(1);
printf("==== 山尘围棋 ver2.19 ====");
if(BuZi)printf("*-布子模式"); 
	 else if(Auto)printf("* 自动提子"); 
	   	  else printf("* 手动提子");
printf("    第  [%d]手\n",Shou,RmvdFlagStack[RmvdFlagStack_Top]);

if(Auto)
 	 printf("* 快进[O/L/-] 前进[%d]手\n* 快退[I/K/^] 后退[%d]手\n",
		RedoTimesMax-RmvdFlagStack_Top,RmvdFlagStack_Top);

printf("* 其他[- E -] 提子[%d]枚\n* SGF [- S -] 信息[X]",RmvdFlagStack[RmvdFlagStack_Top]);
Box(0,0,159,79,1,2);
Box(8,13,156,77,1,2);
ch=getchar();

if(Auto)
  {
	if(ch=='i'){Message("后退10手!",500);Undo(10);}
	if(ch=='k'){Message("后退50手!",500);Undo(50);}
	if(ch=='o'){Message("前进10手!",500);Redo(10);}
	if(ch=='l'){Message("前进50手!",500);Redo(50);}
	if(ch==UP){Message("前进至局末!",500);Redo(RedoTimesMax-RmvdFlagStack_Top);}
	if(ch==PGUP){Message("后退至初局!",500);Undo(RmvdFlagStack_Top);}
   }
if(ch=='e')OtherOptions();
if(ch=='x')PrintINFO();
if(ch=='s')Load();
FlashAlert=TRUE;
ClearScreen();
DrawFullScreen();
}

void help()
{
SetScreen(1);
printf("******** 热线帮助 ********F1:新局  F2:存储  F3:读取\nF4:状态 1-9:快捷  AC:退出\n I:后退   O:前进   R:提子\nMr/Q:下子       SHFT:全屏\n  遇到提问框请按[Y]确认");
getchar();
SetScreen(1);
printf("  若要连续移动请同时按[.]键及方向键\n  请在主界面按[F4],还有其他选项.\n\n    BY:山尘(QQ:185027516)");
getchar();
DrawFullScreen();
}

//--------MAIN-----------
void main()
{
int Key,CursorFalshCount;
char LCDX,LCDY,Y;
   
Key=0;
CursorFalshCount=0;
ClearScreen();
Init();
if(!ChDir("/LavaData")){MakeDir("/LavaData");ChDir("/LavaData");}
if(!ChDir("SCGO")){MakeDir("SCGO");ChDir("SCGO");}
DrawFullScreen();
Message("[山尘围棋v2.19]",YES);
DrawFullScreen();
while(1)
{
Key=Inkey();
LCDX=CursorX*8+8;
LCDY=CursorY*8;
Y=CursorY+TopOffset;
CursorFalshCount=(CursorFalshCount+1)%5;
Delay(30);
if(CursorFalshCount==1)Box(LCDX-5,LCDY+3,LCDX-4,LCDY+4,1,1);

if(CursorFalshCount==2){Box(LCDX-4,LCDY+2,LCDX-4,LCDY+5,1,1);
			 Box(LCDX-6,LCDY+3,LCDX-3,LCDY+4,1,1);}

if(CursorFalshCount==3){Box(LCDX-6,LCDY+2,LCDX-3,LCDY+5,1,0);
			Box(LCDX-5,LCDY+3,LCDX-4,LCDY+4,1,1);}

if(CursorFalshCount==4)Box(LCDX-6,LCDY+2,LCDX-3,LCDY+5,1,0);

if((Key==UP||Key== 's') || ((CheckKey(UP)||CheckKey('s'))&&CheckKey(DOT)))
			{
			if(CursorY>0){DrawCurrent();CursorY--;}
			else 
				if(TopOffset>0){TopOffset--;DrawFullScreen();}
				else Beep();
			}

if((Key==DOWN||Key== 'x') || ((CheckKey(DOWN)||CheckKey('x'))&&CheckKey(DOT)))
			{
			 if(CursorY<9)
					{DrawCurrent();
					CursorY++;} 
			else 
				if(TopOffset<9){TopOffset++;DrawFullScreen();}
				else Beep();}

if((Key==LEFT||Key== 'z') || ((CheckKey(LEFT)||CheckKey('z'))&&CheckKey(DOT)))
			{
			DrawCurrent();
			CursorX=(CursorX+18)%19;
			}

if((Key==RIGHT||Key== 'c') || ((CheckKey(RIGHT)||CheckKey('c'))&&CheckKey(DOT)))
			{
			DrawCurrent();
			CursorX=(CursorX+20)%19;
			}



if(Key== PGUP||Key== 'a'){
				 if(TopOffset>0)
					{
					if(TopOffset>3)TopOffset=TopOffset-3;
						else TopOffset=0;
			 	 	DrawFullScreen();
					}
		              	else Beep();
			   }

if(Key== PGDN||Key== 'd' )
        		{
			 if(TopOffset<9)
		  		{
           	    		if(TopOffset<6)TopOffset=TopOffset+3;
		    		else TopOffset=9;
				DrawFullScreen();
				   }
       		  	else Beep();
	 		}


if(Key== ENTER||Key== 'q')
	{
	if(! Board[CursorX][Y])
   		{
		    Board[CursorX][Y]=1+Turn;
		 if(Auto)
  			  {
			 if(IsDead(CursorX,Y))
       				{
			       if(IsDeadRound(CursorX,Y)&&IsDaJieJinShou(CursorX,Y)==FALSE)
       					{
					PutDown(CursorX,Y);
				       }
				   else 
					{
					Beep();
				    	Board[CursorX][Y]=NOSTONE;
	            			}	
       				}
	 	         else PutDown(CursorX,Y);
		    }
	    	else Turn=1-Turn;
	   if(BuZi)Turn=1-Turn;
	    DrawScroll();
	}
	else Beep();
  DrawCurrent();		
  }

if(Key== F1){
		if(Message("新开一局?",YES))
			{RemindSaving();
			Init();}
		DrawFullScreen();
		}

if(Key== F2){
		Save();
          	DrawFullScreen();
		}

if(Key== F3){
	      Load();
             DrawFullScreen();
             }

if(Key== F4){
		DisplayState();
		Refresh();
		}
          


if(Key== 't'){TopOffset=0;CursorX=3;CursorY=3;DrawFullScreen();}
if(Key== 'y'){TopOffset=0;CursorX=9;CursorY=3;DrawFullScreen();}
if(Key== 'u'){TopOffset=0;CursorX=15;CursorY=3;DrawFullScreen();}
if(Key== 'g'){TopOffset=4;CursorX=3;CursorY=5;DrawFullScreen();}
if(Key== 'h'){TopOffset=4;CursorX=9;CursorY=5;DrawFullScreen();}
if(Key== 'j'){TopOffset=4;CursorX=15;CursorY=5;DrawFullScreen();}
if(Key== 'b'){TopOffset=9;CursorX=3;CursorY=6;DrawFullScreen();}
if(Key== 'n'){TopOffset=9;CursorX=9;CursorY=6;DrawFullScreen();}
if(Key== 'm'){TopOffset=9;CursorX=15;CursorY=6;DrawFullScreen();}


if(Key== 'l')
           if(BuZi)
	   	{
		Turn=1-Turn;
		DrawScroll();
	   	Refresh();
		}

if(Key== 'r')if(!Auto){
                     Board[CursorX][Y]=0;
                     DrawBoardXY(CursorX,Y);
		      DrawCurrent();
			 }
 		 else Beep();
			 
if(Key== SHIFT){	DrawFullBoard();
			DrawFullScreen();
			}
  
if(Key== 'i'&&Auto)Undo(1);

if(Key== 'o'&&Auto)Redo(1);

if(Key== HELP)help();

if(Key==  EXIT)
	if(Message("退出?",YES))ExitScgo();
	else DrawFullScreen(); 
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -