📄 main.c
字号:
drawrect(ball[b*9+2],ball[b*9+3],ball[b*9+2]+32,ball[b*9+3]+32,blank,1); //setcolor=12,setactivecolor=15 if(ball[a*9+4]==1) drawrect(ball[a*9+2],ball[a*9+3],ball[a*9+2]+16,ball[a*9+3]+16,224,1); //setcolor=12,setactivecolor=15 if(ball[a*9+4]==2) drawrect(ball[a*9+2],ball[a*9+3],ball[a*9+2]+32,ball[a*9+3]+16,224,1); //setcolor=12,setactivecolor=15 if(ball[a*9+4]==3) drawrect(ball[a*9+2],ball[a*9+3],ball[a*9+2]+16,ball[a*9+3]+32,224,1); //setcolor=12,setactivecolor=15 if(ball[a*9+4]==4) drawrect(ball[a*9+2],ball[a*9+3],ball[a*9+2]+32,ball[a*9+3]+32,224,1); //setcolor=12,setactivecolor=15 /*调试输出色普的代码。 int i=160; while(i<=240) { drawrect(90,i-80-80,100,i-80-80+1,i,1); i++; }*/ vFlipScreen(1); }// **************************************************// 判断所有精灵的可移动方向.// 获得可以移动的两个单元的ID和方向.// **************************************************void direct(void){ int i=0,j=0,k=0; for(i=0;i<6;i++) { activeNum[i*3]=100; activeNum[i*3+1]=0; activeNum[i*3+2]=0; } i=0; while(i<10) { if(ball[i*9+5]+ball[i*9+6]+ball[i*9+7]+ball[i*9+8]!=0) { activeNum[k*3]=i; j=5; while(j<9) { if(ball[i*9+j]==1) { if(activeNum[k*3+1]==0) activeNum[k*3+1]=j-4; else activeNum[k*3+2]=j-4; } j++; } k++; } i++; } k=0; while(k<6) { if(activeNum[k*3]==id) { id1=activeNum[k*3+1]; id2=activeNum[k*3+2]; } k++; }}// *************************************************************// 移动后重新调整所有精灵的坐标.// **************************************************************void change(void){ int i=0,up,right,down,left; while(i<10) { up=100;right=100;down=100;left=100; if(ball[i*9+3]/16-1>=0) up=(ball[i*9+3]/16-1)*4+ball[i*9+2]/16; if(ball[i*9+2]/16+1<=3) right=(ball[i*9+3]/16)*4+ball[i*9+2]/16+1; if(ball[i*9+3]/16+1<=4) down=(ball[i*9+3]/16+1)*4+ball[i*9+2]/16; if(ball[i*9+2]/16-1>=0) left=(ball[i*9+3]/16)*4+ball[i*9+2]/16-1; if(ball[i*9+4]==1) { if(up!=100 && map[up]==0) ball[i*9+5]=1; else ball[i*9+5]=0; if(right!=100 && map[right]==0) ball[i*9+6]=1; else ball[i*9+6]=0; if(down!=100 && map[down]==0) ball[i*9+7]=1; else ball[i*9+7]=0; if(left!=100 && map[left]==0) ball[i*9+8]=1; else ball[i*9+8]=0; } if(ball[i*9+4]==2) { if(up!=100 && map[up]==0 && map[up+1]==0) ball[i*9+5]=1; else ball[i*9+5]=0; if(right!=100 && map[right+1]==0 && (right%4+1)<4) ball[i*9+6]=1; else ball[i*9+6]=0; if(down!=100 && map[down]==0 && map[down+1]==0) ball[i*9+7]=1; else ball[i*9+7]=0; if(left!=100 && map[left]==0 ) ball[i*9+8]=1; else ball[i*9+8]=0; } if(ball[i*9+4]==3) { if(up!=100 && map[up]==0) ball[i*9+5]=1; else ball[i*9+5]=0; if(right!=100 && map[right]==0 && map[right+4]==0) ball[i*9+6]=1; else ball[i*9+6]=0; if(down!=100 && map[down+4]==0 && down+4<20) ball[i*9+7]=1; else ball[i*9+7]=0; if(left!=100 && map[left]==0 && map[left+4]==0) ball[i*9+8]=1; else ball[i*9+8]=0; } if(ball[i*9+4]==4) { if(up!=100 && map[up]==0 && map[up+1]==0) ball[i*9+5]=1; else ball[i*9+5]=0; if(right!=100 && map[right+1]==0 && map[right+1+4]==0 && right%4+1<4) ball[i*9+6]=1; else ball[i*9+6]=0; if(down!=100 && map[down+4]==0 && map[down+4+1]==0 && down+4<20) ball[i*9+7]=1; else ball[i*9+7]=0; if(left!=100 && map[left]==0 && map[left+4]==0) ball[i*9+8]=1; else ball[i*9+8]=0; } i++; } }// *************************************************************// 移动精灵.// direct :移动的方向.// index :精灵编号.// *************************************************************void moveball(int direct,int index){ int i=0;/* LoadRes(BALL1,BALL1_SIZE,&Ball[0]); // Load the ball sprite LoadRes(BALL2,BALL2_SIZE,&Ball[1]); // Load the ball sprite LoadRes(BALL3,BALL3_SIZE,&Ball[2]); // Load the ball sprite LoadRes(BALL4,BALL4_SIZE,&Ball[3]); // Load the ball sprite LoadRes(BALL5,BALL5_SIZE,&Ball[4]); // Load the ball sprite LoadRes(BALL6,BALL6_SIZE,&Ball[5]); // Load the ball sprite LoadRes(BALL7,BALL7_SIZE,&Ball[6]); // Load the ball sprite LoadRes(BALL8,BALL8_SIZE,&Ball[7]); // Load the ball sprite LoadRes(BALL9,BALL9_SIZE,&Ball[8]); // Load the ball sprite LoadRes(BALL10,BALL10_SIZE,&Ball[9]); // Load the ball sprite*/ vSetTransferMode(MODE_TRANS); // set transfermode to transperent if(ball[index*9+4]==1) vFillRect(ball[index*9+2],ball[index*9+3],ball[index*9+2]+16,ball[index*9+3]+16); if(ball[index*9+4]==2) vFillRect(ball[index*9+2],ball[index*9+3],ball[index*9+2]+32,ball[index*9+3]+16); if(ball[index*9+4]==3) vFillRect(ball[index*9+2],ball[index*9+3],ball[index*9+2]+16,ball[index*9+3]+32); if(ball[index*9+4]==4) vFillRect(ball[index*9+2],ball[index*9+3],ball[index*9+2]+32,ball[index*9+3]+32); if(direct==1) DrawObject(ball[index*9+2],ball[index*9+3]-16,index); if(direct==2) DrawObject(ball[index*9+2]+16,ball[index*9+3],index); if(direct==3) DrawObject(ball[index*9+2],ball[index*9+3]+16,index); if(direct==4) DrawObject(ball[index*9+2]-16,ball[index*9+3],index); vFlipScreen(1); /*while(i<10) { vDisposePtr("BALL"+i); i++; }*/ //vDisposePtr(Ball[index]); }// **************************************************// 延时函数,// nTime :延时的时间,单位为微秒.// **************************************************void sleep(int nTime){ int Time; Time = vGetTickCount() + nTime ; while(vGetTickCount() < Time);}// *******************************************// 主函数.// *******************************************int main(void) { uint32_t key; //fontInit(); //menu(); vClearScreen(vRGB(0,0,0)); // Clear the "backbuffer" with black vSetClipWindow(0,0,100,80); initDrawSprites(); /*if(menu()) { newgame(); } else vTerminateVMGP(); // Terminate vmgp */ while(1) { key = vGetButtonData(); if(key==KEY_ENTER) { if(down==1) down=0; else down=1; sleep(ticktime); } if(key == KEY_LEFT) { engine(key); sleep(ticktime); } if(key == KEY_RIGHT) { engine(key); sleep(ticktime); } if(key==KEY_UP) { engine(key); sleep(ticktime); } if(key==KEY_DOWN) { engine(key); sleep(ticktime); } /*if(success()) { if(menu()) { newgame(); continue; } else break; }*/ if(success()) break; } vTerminateVMGP(); // Terminate vmgp return 1;}// **************************************************// 新游戏模块.// **************************************************/*void newgame(void){ down=0;id=8;id1=0;id2=0;//id是被激活的单元索引值. a=0;a1=0;a2=0;b=0;b1=0;b2=0;//a,b:是可以移动的两个单员的ID,a1,a2,b1,b2是可以移动的方向. //id,存在,x,y,类型,C上,c右,c下,c左。 ball[]= {1, 1, 0, 0,3,0,0,0,0, 2, 1,16, 0,4,0,0,0,0, 3, 1,48, 0,3,0,0,0,0, 4, 1, 0,32,1,0,0,0,0, 5, 1,16,32,2,0,0,0,0, 6, 1,48,32,1,0,0,0,0, 7, 1, 0,48,3,0,0,0,0, 8, 1,16,48,1,0,0,1,0, 9, 1,32,48,1,0,0,1,0, 10,1,48,48,3,0,0,0,0, 11,0,16,64,1,0,0,0,0, 12,0,32,64,1,0,0,0,0};//12个单元每个有9个属性 map[] ={1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,0,0,1}; }*/// *******************************************/*void textout(int x,int y,char *s){//???????????????}*/// **************************************************// 界面菜单模块// **************************************************/*int menu(void){ uint32_t button; int selectmenu=0;//0:New game,1:Quit. vClearScreen(vRGB(0,0,0)); // Clear the "backbuffer" with black vSetClipWindow(0,0,100,80); textout(20,20,"Game Name"); textout(30,60,"New Game"); textout(30,70,"Quit"); drawrect(30,60,40,70,12,2); while(1) { button = vGetButtonData(); if(KEY_ENTER == button) break; if(button == KEY_UP || button == KEY_DOWN) { if(selectmenu==0) { selectmenu=1; drawrect(30,70,40,80,12,2);//active menu button. drawrect(30,60,40,70,0,2);//unactive menu button. } else { selectmenu=0; drawrect(30,60,40,70,12,2);//active menu button. drawrect(30,70,40,80,0,2);//unactive menu button. } sleep(ticktime); } } selectmenu=1; if(selectmenu==0) { return 0; } else { return 1; } }*/// **************************************************// 判断时候通过,成功.// **************************************************int success(void){ if(ball[1*9+2]==16 && ball[1*9+3]==48) { //调入success图片.或者输出文字。????????? while(KEY_ENTER & vGetButtonData()); //输出gif图片.?????????????? while(KEY_ENTER & vGetButtonData()); return 1; } else return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -