Ejemplo n.º 1
0
// only set the column and two down diagnals
inline void place(board*pb,int row,int col){
	int i;
	for(i=row+1;i<=N;i++)
		setboard(pb,i,col);
	int c1=col,c2=col;
	for(i=row+1;i<=N;i++){
		--c1;
		++c2;
		if(inboard(i,c1)) setboard(pb,i,c1);
		if(inboard(i,c2)) setboard(pb,i,c2);
	}
}
Ejemplo n.º 2
0
int Solve(int board[][col],int qrow,int qcol)
{
	if ((qcol == col-1) && (qrow == col-1)) // base case
	{
		printf("path is:\n");
		setboard(board, qrow, qcol);
		return 1;
	}
	else
	{ // There are four possible wat to travel up, down, back ,forward but not cross
		if (issafe(board, qrow, qcol)) {
			setboard(board, qrow, qcol);
			printf("set:\n\n");
			display_Board(board);
			printf("\n\n");
			if (Solve(board, qrow + 1,qcol))
			{//down
				printf("1:\n\n");
				display_Board(board);
				printf("\n\n");
				return 1;
			}

			else if (Solve(board, qrow ,qcol+1))
			{//forward
				printf("2:\n\n");
				display_Board(board);
				printf("\n\n");
				return 1;
			}
			else if (Solve(board, qrow-1 ,qcol))
			{//up
				printf("3:\n\n");
				display_Board(board);
				printf("\n\n");
				return 1;
			}
			else if (Solve(board, qrow ,qcol-1))
			{ //backword
				printf("4:\n\n");
				display_Board(board);
				printf("\n\n");//
				return 1;
			}
			unsetboard(board,qrow , qcol);
			printf("unset:\n\n");
			display_Board(board);
			printf("\n\n");
		}
	}
	return 0;
}
Ejemplo n.º 3
0
char *search(char *board, char me) {  // 0 = black, 1 = white
  int i, j, x, y, p, q;
  char *best_board = board;
  int best_score = -49;
  int this_score;

  // choose a piece to investigate
 
  for (x=0; x<7; x++)
    for (y=0; y<7; y++) {
      if (getboard(board,x,y) != me) continue;  // not my piece
      for (i=-2; i<=2; i++) 
	for (j=-2; j<=2; j++) {
	  char *new_board;
	  if (i==0 && j==0) continue;              
	  if (!inboard(x+i,y+j)) continue;        // not on the board
	  if (getboard(board,x+i,y+j) != '-') continue; // not empty
	  
	  new_board = copy_board(board);
	  
	  if ((abs(i) > 1) || (abs(j) > 1))   // this is an extension
	    setboard(new_board,x,y,'-');	  
	  setboard(new_board,x+i,y+j,me);

	  // claim the surrounding squares
	  
	  for (p=-1; p<=1; p++) 
	    for (q=-1; q<=1; q++) {
	      if (inboard(x+i+p,y+j+q) && 
		  (getboard(new_board,x+i+p,y+j+q) != '-'))
		setboard(new_board,x+i+p,y+j+q,me);
	    }
	  
	  if (me == 'b')
	    this_score = score(search(new_board,'w'),'b');
	  else
	    this_score = 50 - score(new_board,'b');
	  
	  if (this_score > best_score) {
	    best_score = this_score;
	    best_board = new_board;
	  }
	}
    }
  return best_board;
}
Ejemplo n.º 4
0
void game::setrandom()//random空格填2
{
    while(1){
      int t=rand()%16+1;
      if (b[t].number==0){
          b[t].number=2;
          setboard(b[t]);
          return;
      }
    }
}
Ejemplo n.º 5
0
void game::gamestart(){
    for(int i=0;i<17;i++){
        b[i].position=i;
        b[i].number=0;
        setboard(b[i]);
    }//初始化
    score=0;
    str=QString::number(score,10);
    ui->score->setText(str);
    setrandom();
    setrandom();
    ui->win->clear();
    ui->lose->clear();
}
Ejemplo n.º 6
0
game::game(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::game)
{
    ui->setupUi(this);
    for(int i=0;i<17;i++){
        b[i].position=i;
        b[i].number=0;
        b[i].isAdded=false;
        b[i].isMoved=false;
        setboard(b[i]);
    }//初始化
    score=0;
    str=QString::number(score,10);
    ui->score->setText(str);
    srand(time(NULL));
    trigger=true;
}
Ejemplo n.º 7
0
void game::keyPressEvent(QKeyEvent *event)
{
    if(trigger){
    if(event->key() == Qt::Key_Left){


        for(int j=0;j<4;j++){
            for(int i=2+j*4;i<=4+j*4;i++){
                for(int k=i;k>1+(4*j);k--){
                //跟前一個數字相同
                    if(b[k].number!=0&&b[k].number==b[k-1].number&&b[k-1].isAdded==false&&b[k].isAdded==false){
                        b[k-1].number=b[k-1].number+b[k-1].number;
                        b[k].number=0;
                        b[k-1].isAdded=true;    //數字往前一格
                        b[k].isAdded=false;     //原空格變為零
                        setboard(b[k-1]);
                        setboard(b[k]);
                        b[k-1].isMoved=true;
                        b[k].isMoved=false;
                        score=score+b[k-1].number;
                 }
                //前一個空格為0
                else if(b[k].number!=0&&b[k-1].number==0){
                        b[k-1].number=b[k].number;
                        b[k].number=0;
                        b[k-1].isMoved=true;
                        b[k].isMoved=false;
                        b[k-1].isAdded=b[k].isAdded;
                        b[k].isAdded=false;
                        setboard(b[k-1]);
                        setboard(b[k]);
                  }
                }
            }
       }
    }
    else if(event->key() == Qt::Key_Right){
       for(int j=0;j<4;j++){
            for(int i=3+j*4;i>=1+j*4;i--){
                 for(int k=i;k<(1+j)*4;k++){
                if(b[k].number!=0&&b[k].number==b[k+1].number&&b[k+1].isAdded==false&&b[k].isAdded==false){
                    b[k+1].number=b[k+1].number+b[k+1].number;
                    b[k].number=0;
                    b[k+1].isAdded=true;
                    b[k].isAdded=false;
                    setboard(b[k+1]);
                    setboard(b[k]);
                    b[k+1].isMoved=true;
                    b[k].isMoved=false;
                    score=score+b[k+1].number;
                    }
                else if(b[k].number!=0&&b[k+1].number==0){
                    b[k+1].number=b[k].number;
                    b[k].number=0;
                    b[k+1].isMoved=true;
                    b[k].isMoved=false;
                    b[k+1].isAdded=b[k].isAdded;
                    b[k].isAdded=false;
                    setboard(b[k+1]);
                    setboard(b[k]);
                }
                 }
            }
       }
    }
    else if(event->key() == Qt::Key_Up){
       for(int j=0;j<4;j++){
            for(int i=5+j;i<=13+j;i+=4){
                 for(int k=i;k>1+j;k-=4){
                if(b[k].number!=0&&b[k].number==b[k-4].number&&b[k-4].isAdded==false&&b[k].isAdded==false){
                    b[k-4].number=b[k-4].number+b[k-4].number;
                    b[k].number=0;
                    b[k-4].isAdded=true;
                    b[k].isAdded=false;
                    setboard(b[k-4]);
                    setboard(b[k]);
                    b[k-4].isMoved=true;
                    b[k].isMoved=false;
                    score=score+b[k-4].number;
                    }
                else if(b[k].number!=0&&b[k-4].number==0){
                    b[k-4].number=b[k].number;
                    b[k].number=0;
                    b[k-4].isMoved=true;
                    b[k].isMoved=false;
                    b[k-4].isAdded=b[k].isAdded;
                    b[k].isAdded=false;
                    setboard(b[k-4]);
                    setboard(b[k]);
                }
                 }
            }
       }
    }
    else if(event->key() == Qt::Key_Down){
       for(int j=0;j<4;j++){
            for(int i=9+j;i>=1+j;i-=4){
                 for(int k=i;k<13+j;k+=4){
                if(b[k].number!=0&&b[k].number==b[k+4].number&&b[k+4].isAdded==false&&b[k].isAdded==false){
                    b[k+4].number=b[k+4].number+b[k+4].number;
                    b[k].number=0;
                    b[k+4].isAdded=true;
                    b[k].isAdded=false;
                    setboard(b[k+4]);
                    setboard(b[k]);
                    b[k+4].isMoved=true;
                    b[k].isMoved=false;
                    score=score+b[k+4].number;
                    }
                else if(b[k].number!=0&&b[k+4].number==0){
                    b[k+4].number=b[k].number;
                    b[k].number=0;
                    b[k+4].isMoved=true;
                    b[k].isMoved=false;
                    b[k+4].isAdded=b[k].isAdded;
                    b[k].isAdded=false;
                    setboard(b[k+4]);
                    setboard(b[k]);
                }
                 }
            }
       }
    }
    if(AnyMoved()){
        setrandom();
        initialized();
        score+=2;
        if(IsWined()){
            trigger=false;
            ui->win->setPixmap(QPixmap(":/pic/win.png"));
        }
        if(Islosed()){
            trigger=false;
            ui->win->setPixmap(QPixmap(":/pic/lose.png"));
        }
        str=QString::number(score,10);
        ui->score->setText(str);
    }
   }
}
Ejemplo n.º 8
0
/*FGROUP SimpleTests
vmeadd: vme address on FO
         in pedja notation to be used as trigger
e.g.: to trigger on serial number vmeadd= 0x2
timeout: number of loops to wait
         if timeout == 0, than infinite loop
busy: inmon
l0: outmon
l1: outmon
l2: inmon
fo:inmono1

NO ALIGNMENT os snapshots.
*/
int trdssmtrigger(int vmeadd,int timeout){
 int i,j,ret,n=0;
 //w32 cntmem[NCOUNTERS];
 int flag=0,flag2=1;
 int boards[NSSMBOARDS];
 //int boards[NCTPBOARDS];
 w32 cntval1,cntval2;
 int cntpos;
 int counter=0;
 if(timeout == 0){
    flag=1;
    flag2=0;
 }
 for(i=0;i<NSSMBOARDS;i++)boards[i]=0;
 vmeadd=0x1000+4*vmeadd;
 // none for backward compatibility
 setboard(&n,NSSMBOARDS-1,boards,0x0,"none");
 // L0 counters
 cntpos=counter+65;
 //L1 counters
 //cntpos=counter+165;
 //condstopSSM(board,counter,5000,13000);
 //busy board: inmon, continuos 
 setboard(&n,0,boards,0xb,"busy_inmon");
 //l0 board: inmon, continuos
 setboard(&n,1,boards,0x3,"l0_outmon");
 //l1 board:
 setboard(&n,2,boards,0x3,"l1_outmon");
 //l2 board: inmon, continuos
 setboard(&n,3,boards,0xb,"l2_inmon");
 //int board: inmon, continuos
 //setomSSM(4,0xb);
 //setsmssw(4,"int_inmon");
 //fo1 board: inmon, continuos - 
 setboard(&n,5,boards,0x13,"fo_inmonl1");
 //setboard(&n,6,boards,0x13,"fo_inmonl1");
 //setboard(&n,7,boards,0x13,"fo_inmonl1");
 //setboard(&n,8,boards,0x13,"fo_inmonl1");
 //setboard(&n,9,boards,0x13,"fo_inmonl1");
 //setboard(&n,10,boards,0x13,"fo_inmonl1");
 // read counters 1st time
 //readCounters(cntmem, NCOUNTERS, 0); cntval1=cntmem[cntpos];
 cntval1=vmer32(vmeadd);
 printf("cntval1=%u \n",cntval1);
 // start SSM
 //startBoardsN(n,boards,0,0);
 for(i=1;i<n;i++){
   int boardoffset=BSP*ctpboards[boards[i]].dial; 
    vmew32(SSMaddress+boardoffset,0);
    vmew32(SSMstart+boardoffset, DUMMYVAL);
 }
 //for(i=0;i<n;i++)printf("%i %i\n",i,boards[i]);printf("\n");
 //
 usleep(1000000);
 j=0;
 while((j<timeout) || flag){
  //readCounters(cntmem, NCOUNTERS, 0); cntval2=cntmem[cntpos];
  cntval2=vmer32(vmeadd);
  //printf("cntval2=%u \n",cntval2);
  //if(cntval2 != cntval1 || flag2){
  if(cntval2 != 0){
    //for(i=1;i<n;i++)stopSSM(boards[n-i]);
    for(i=1;i<n;i++){
       //stopSSM(boards[i]);
       w32 busy;
       int boardoffset=BSP*ctpboards[boards[i]].dial;
       vmew32(SSMstop+boardoffset,DUMMYVAL);
       busy = vmer32(SSMstatus+boardoffset);
       //printf(" 0x%x\n",busy);
       busy = busy & 0x100;
       if(busy){
         printf("HW error board %i\n",boards[i]);
         return 0;
	}
    }
    printf("Error detected: 0x%x\n",cntval2);
    break;    
  }
  j++;
 } 
 //usleep(100000);
 for(i=1;i<n;i++){
   printf("Reading board %i\n",boards[i]);
   readSSM(boards[i]);
 }

 // synchronise
 //FindOrbitChannel(NCTPBOARDS,boards);
 sms[boards[0]].orbit=33;
 for(i=1;i<n;i++){
   printf("board %i %i\n",i,boards[i]);
   sms[boards[i]].orbit = 0;   
 }
 ret=syncSSM2(n,boards);
 printf("cntval2=%u \n",cntval2);
 return ret;

}
Ejemplo n.º 9
0
void design (void) {
	int updflag=0;
	int dx,dy,tempx,n;
	int lastcell=1;
	int tempint;
	int drawmode=0;
	char tempstr[32];
	char tempfname[32];
	char tempstr2[12];
	char tempstr3[32];
	int new_col=0;
	int bc_x=0,bc_y=0,bc_w=0,bc_h=0;		// Block copy x,y and width,height
	int tx,ty;

	disy=0;
	designflag=1;
	gamecount=0;
	tempstr[0]='\0';
	tempfname[0]='\0';
	setorigin();
	dx=objs[0].x/16;
	dy=objs[0].y/16;
	drawboard();
	fontcolor (&statvp,1,0);
	clearvp (&statvp);

	do {
		if (drawmode) {
			setboard (dx,dy,lastcell);
			drawcell (dx,dy);
			updflag=1;
			}
		fontcolor (&statvp,3,0);						// memory usage
		wprint (&statvp,248,1,2,"       ");
		ultoa (coreleft(),tempstr3,10);
		wprint (&statvp,290-(1+strlen(tempstr3)*6),1,2,tempstr3);
		tempstr3[0]='\0';

		fontcolor (&statvp,1,0);
		wprint (&statvp,248,21,2, "# objs: ");
		fontcolor (&statvp,3,0);
		wprint (&statvp,296,21,2,itoa(numobjs,tempstr2,10));

		drawshape (&gamevp,0x0100,dx*16+4,dy*16+4);
		do {
			checkctrl(0);
			} while ((dx1==0)&&(dy1==0)&&(key==0)&&(updflag==0));
		updflag=0;
		modboard(dx,dy);
		upd_objs(0);
		refresh(0);
		purgeobjs();
		if ((dx1!=0)||(dy1!=0)) {
			dx+=dx1*(1+fire1*(scrnxs/2-1));
			dy+=dy1*(1+fire1*(scrnys/2-1));
			if (dx<0) dx=0;
			if (dx>=boardxs) dx=boardxs-1;
			if (dy<0) dy=0;
			if (dy>=boardys) dy=boardys-1;
			if ((dx*16)<gamevp.vpox) {
				gamevp.vpox-=scrnxs*8;
				if (gamevp.vpox<0) gamevp.vpox=0;
				drawboard();
				};
			if ((dx*16)>=(gamevp.vpox+16*scrnxs-16)) {
				gamevp.vpox+=scrnxs*8;
				if (gamevp.vpox>=(16*(boardxs-scrnxs)+8))
					gamevp.vpox=16*(boardxs-scrnxs)+8;
				drawboard();
				};
			if ((16*dy)<gamevp.vpoy) {
				gamevp.vpoy-=scrnys*8;
				if (gamevp.vpoy<0) gamevp.vpoy=0;
				drawboard();
				};
			if ((16*dy)>=(gamevp.vpoy+16*(scrnys-1))) {
				gamevp.vpoy+=scrnys*8;
				if (gamevp.vpoy>=(16*(boardys-scrnys+1)))
					gamevp.vpoy=(boardys-scrnys+1)*16;
				drawboard();
				};
			};

		switch (toupper(key)) {
			case k_f1:					// Mark top left corner of block
				bc_x=dx; bc_y=dy; break;
			case k_f2:
				// Mark bottom right corner of block and copy
				//	block of tile numbers into temp array bc_array
				if(dx<bc_x) break;
					// 0-width or negative width rectangle	(can't do that)
				if(dy<bc_y) break;
					// 0-height or negative height rectangle (can't do that)
				bc_w=(dx-bc_x)+1; bc_h=(dy-bc_y)+1;
				if((bc_w>normxs)||(bc_h>normys)) {			// Too big!!
					bc_w=0; bc_h=0; break;
					};
				for(ty=0; ty<bc_h; ty++) {
					for(tx=0; tx<bc_w; tx++) {
						bc_array[(ty*bc_w)+tx]=board(bc_x+tx,bc_y+ty);
						};
					};	break;
			case k_f3:
				for(ty=0; ty<bc_h; ty++) {
					for(tx=0; tx<bc_w; tx++) {
						setboard(dx+tx, dy+ty, bc_array[(ty*bc_w)+tx]);
						};
					};	updflag=1; break;
			case k_f4:
				do {
					upd_colors (); gamecount++; checkctrl0(0);
					} while (key==0); break;
			case enter:
				clearvp (&statvp);
				wprint (&statvp,2,1,1,"Put:");
				fontcolor (&statvp,6,0);
				winput (&statvp,2,11,1,tempstr,16);
				strupr (tempstr);
				for (tempint=0; tempint<numinfotypes; tempint++) {
					if (strcmp (tempstr,info[tempint].na)==0) {
						lastcell=tempint;
						setboard(dx,dy,tempint);
						shm_want[(info[tempint].sh>>8)&0x3f]=1;
						shm_do(); break;
						};
					};
				updflag=1; break;
			case 9: drawmode=!drawmode; break;				// tab
			case 'K': lastcell=board(dx,dy); break;
			case ' ':
				setboard(dx,dy,lastcell);
				updflag=1; break;
			case 'I':
				pl.score=1000;
				printhi (1);
				pl.score=0; break;
			case 'V':
				if (pl.numinv==0) addinv (inv_hero);
				else {
					pl.numinv=0;
					init_inv();
					};
				pl.score=0;
				pl.level=0; break;
			case 'H':
				tempint=board(dx,dy);
				tempx=dx;
				while (board(tempx,dy)==tempint) {
					setboard(tempx,dy,lastcell);
					drawcell (tempx,dy);
					tempx--;
					};
				tempx=dx+1;
				while (board(tempx,dy)==tempint) {
					setboard(tempx,dy,lastcell);
					drawcell (tempx,dy);
					tempx++;
					}; break;
			case 'O': updflag=objdesign(dx,dy); break;	// Object Mgmt
			case 'U':
				for (n=0; n<numobjs; n++) {
//					if (((kindflags[objs[n].objkind]&f_inside)==0)&&
//						(objs[n].inside!=NULL)) {
//						objs[n].inside=NULL;
//						sound(240);
//						delay(500);
//						nosound();
//						};
					setobjsize (n);
					}; break;
			case 'Z':
				infname ("Clear?",tempfname);
				if (toupper(tempfname[0])=='Y') {
					init_brd();
					init_objs();
					drawboard();
					}; break;
			case 'L':
				infname ("Load:",tempfname);
				if (tempfname[0]!='\0') {
					loadboard (tempfname);
					setorigin();
					dx=objs[0].x/16; dy=objs[0].y/16;
					drawboard();
					}; break;
			case 'Y':												// Disalign Y
				clearvp (&statvp);
				wprint (&statvp,2,1,1,"Dis Y:");
				itoa (disy,tempstr,10);
				winput (&statvp,2,11,1,tempstr,16);
				disy=atoi (tempstr);
				strupr (tempstr); break;
			case 'N':
				infname ("New board?",tempfname);
				if (toupper (tempfname[0])=='Y') {
					zapobjs();
					init_brd();
					}; break;
			case 'S':
				infname ("Save:",tempfname);
				if (tempfname[0]!='\0') saveboard (tempfname); break;
			case 'C':
				clearvp (&statvp);
				wprint (&statvp,2,1,1,"New Color:");
				fontcolor (&statvp,6,0);
				itoa (new_col,tempstr,10);
				winput (&statvp,2,11,1,tempstr,16);
				new_col=atoi (tempstr);

				switch (new_col) {
					case 0: setcolor (250,0,0,0);
						setcolor (251,0,0,0); break;				// reset all
					case 1: setcolor (251,0,0,0); break;		// reset #251
					case 2: setcolor (250,0,0,32);		 		// dk. blue sky
						setcolor (251,0,0,32); break;
					case 3:												// lt. blue sky
						setcolor (176,8,16,25); setcolor (177,8,20,29);
						setcolor (178,12,24,33); setcolor (179,16,28,41);
						setcolor (180,20,32,45); setcolor (181,24,40,49);
						setcolor (182,28,44,57); setcolor (183,36,48,60);
						setcolor (250,36,48,60); setcolor (251,36,48,60); break;
					case 4:												// yellow sky
						setcolor (176,32,0,0); setcolor (177,40,0,0);
						setcolor (178,52,0,0); setcolor (179,60,0,0);
						setcolor (180,60,28,0); setcolor (181,60,40,0);
						setcolor (182,60,52,0); setcolor (183,60,60,0);
						setcolor (250,60,60,0);	setcolor (251,60,60,0); break;
					case 5:												// emerald sky
						setcolor (176,0,12,12); setcolor (177,0,18,17);
						setcolor (178,0,25,23); setcolor (179,0,32,27);
						setcolor (180,0,39,32); setcolor (181,0,46,35);
						setcolor (182,0,53,38); setcolor (183,0,60,40);
						setcolor (250,0,60,40); setcolor (251,0,60,40); break;
					case 6: setcolor (250,32,32,24);				// olive green
						setcolor (251,32,32,24); break;
					case 7:												// violet sky
						setcolor (176,13,5,22); setcolor (177,18,8,27);
						setcolor (178,23,13,33); setcolor (179,29,19,39);
						setcolor (180,35,25,45); setcolor (181,42,32,51);
						setcolor (182,49,40,57); setcolor (183,57,50,63);
						setcolor (250,57,50,63); setcolor (251,57,50,63); break;
					case 8: setcolor (250,23,23,23);				// factory grey
						setcolor (251,23,23,23); break;
					case 9: setcolor (250,12,23,63);		 		// royal blue
						setcolor (251,12,23,63); break;
					case 10: setcolor (250,20,20,23);			// factory grey v3
						setcolor (251,20,20,23); break;
					};
			};
		} while (key!=escape);