回复 90楼 xzlxzlxzl
可以啊~~~~~~~~~弄出效果就行了~拜谢啦~~~~
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
void Del_Clum(PClum* p) { PClum pt=(*p)->prior; pt->next=(*p)->next; if ((*p)->next!=NULL) (*p)->next->prior=pt; Free_Node((void** )p); } void Link_Clum(PClum p1,PClum p2) { if (p1==NULL||p2==NULL) return ; p1->next=p2; p2->prior=p1; } void Show_Init_Map() //初始特效设计 { COLORREF re_linecolor=getlinecolor(); COLORREF bgcolor=TRANSPARENT; Game_Start=false; int widht=(BOX2_WIDTH)/(MAP_SIZE); //Main盒子的宽 int height=(BOX2_HEIGHT)/(MAP_SIZE); //Main盒子的高 int i=0; int j=0; int t=0; int show_Map[(BOX2_WIDTH)/(MAP_SIZE)*(BOX2_HEIGHT)/(MAP_SIZE)]={0}; int temp_Map[(BOX2_WIDTH)/(MAP_SIZE)*(BOX2_HEIGHT)/(MAP_SIZE)]={0}; int show_Map2[(BOX2_WIDTH)/(MAP_SIZE)*(BOX2_HEIGHT)/(MAP_SIZE)]={0}; //记录数据纵坐标 Map_Data show[(BOX2_WIDTH)/(MAP_SIZE)*(BOX2_HEIGHT)/(MAP_SIZE)]={0}; PClum head=NULL; //头节点 PClum end=NULL; //尾节点 for (i=0;i<widht*height;++i) temp_Map[i]=i; for (i=0,t=widht*height;i<widht*height;i++,t--) //生成方块数量的随机数 { int s=rand()%t; show_Map[i]=temp_Map[s]; show_Map[i]%=widht; for (j=s;j<t-1;++j) temp_Map[j]=temp_Map[j+1]; } setlinecolor(bgcolor); Creat_Node((void** )&head,sizeof(Clum)); //创建头节点 Creat_Node((void** )&end,sizeof(Clum)); //创建尾节点 Link_Clum(head,end); for (t=0;t<widht*height;++t) //初始化方块数据 { show[t].color=Map[widht-show_Map2[show_Map[t]]++-1][show_Map[t]].color; //获取初始化方块颜色 show[t].x=show_Map[t]; //获取方块下落的横坐标 } memset(show_Map2,0,sizeof(show_Map2)); //重置数组 for (t=0;t<widht*height;++t) { PClum pclum=end->prior; PClum pt=NULL; PClum ps=head; Creat_Node((void** )&pt,sizeof(Clum)); pt->map_data=show[t]; Link_Clum(pclum,pt); //链接两个节点 Link_Clum(pt,end); BeginBatchDraw(); while ((ps=ps->next)&&(ps!=end)) { int left=Box_Main.point.left+ps->map_data.x*MAP_SIZE; //获取方块的顶点信息 int top=Box_Main.point.top+ps->map_data.y*MAP_SIZE; int right=left+MAP_SIZE; int bottom=top+MAP_SIZE; if (ps->map_data.y>0) { setfillcolor(bgcolor); fillrectangle(left,top-MAP_SIZE,right,bottom-MAP_SIZE); } setfillcolor(ps->map_data.color); //设置方块颜色 fillrectangle(left,top,right,bottom); //填充方块颜色 Draw_Line_Rectangle //绘制边框信息 ( Box_Main.point.left, Box_Main.point.top, Box_Main.point.left+Box_Main.width, Box_Main.point.top+Box_Main.height, Box_Main.color.line_color, bgcolor ); if (ps->map_data.y<widht-show_Map2[ps->map_data.x]-1) ++ps->map_data.y; else { show_Map2[ps->map_data.x]++; PClum pt=ps->prior; Del_Clum(&ps); ps=pt; } } EndBatchDraw(); //结束批量绘图 Sleep(FALL_TIME); //缓冲时间 } Free_Node((void** )&head); //释放头节点 Free_Node((void** )&end); //释放尾节点 Data.timer.TIME_START=clock(); //游戏时间重新开始 FlushMouseMsgBuffer(); //清理鼠标缓冲区 }
[此贴子已经被作者于2017-5-16 03:53编辑过]
int main() { int a[3][3]={{10,20,30},{40,50,60},{70,80,90}}; char b[3][3]={{'a','b','c'},{'d','e','f'},{'h','i','j'}}; void* (*p[2])[3]={0}; int i=0; int j=0; (int (*)[3])p[0]=(int (*)[3])a; (char (*)[3])p[1]=(char (*)[3])b; for (i=0;i<sizeof(**p)/sizeof(*p);++i) for (j=0;j<sizeof(**p)/sizeof(***p);++j) printf("%-4d%-4c\n",((int (*)[3])p[0])[j][i],((char (*)[3])p[1])[j][i]); return 0; }
[此贴子已经被作者于2017-5-23 16:54编辑过]