// 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); } }
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; }
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; }
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; } } }
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(); }
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; }
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); } } }
/*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; }
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);