在linux下ubuntu的五子棋游戏c语言代码.docx
- 文档编号:10689269
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:27
- 大小:17.88KB
在linux下ubuntu的五子棋游戏c语言代码.docx
《在linux下ubuntu的五子棋游戏c语言代码.docx》由会员分享,可在线阅读,更多相关《在linux下ubuntu的五子棋游戏c语言代码.docx(27页珍藏版)》请在冰豆网上搜索。
在linux下ubuntu的五子棋游戏c语言代码
#include
#include
//#include
#include
#include
#include
#include
#defineFB_W1024
#defineFB_H768
#defineCHESSBOARD110
#defineCHESSBOARD210
#defineX_OFFSET400
#defineY_OFFSET200
#defineX_CAPASITY10
#defineY_CAPASITY10
#defineSPACE40
#defineRED0x00ff0000
#defineBLUE0x0000ff00
#defineWHITE0xffffffff
#defineBLACK0xff000000
#defineNOKEY0
#defineRADIO19
#defineC_H17
#defineC_W10
#defineT___0x00ffffff
#defineX___0xff00ffff
#defineBORD0xeeff0000
#defineu32_tunsignedint
intarray[CHESSBOARD1][CHESSBOARD2][1];
intboard[CHESSBOARD1][CHESSBOARD2];
intplay1[CHESSBOARD1][CHESSBOARD2][4];
int[CHESSBOARD1][CHESSBOARD2][4];
intcursor_store[C_H][C_W];
structfb_info{
intw;
inth;
intbpp;
int*mem;
}fb;
staticu32_tcursor_pixel[C_H][C_W]=
{
{BORD,T___,T___,T___,T___,T___,T___,T___,T___,T___},
{BORD,BORD,T___,T___,T___,T___,T___,T___,T___,T___},
{BORD,X___,BORD,T___,T___,T___,T___,T___,T___,T___},
{BORD,X___,X___,BORD,T___,T___,T___,T___,T___,T___},
{BORD,X___,X___,X___,BORD,T___,T___,T___,T___,T___},
{BORD,X___,X___,X___,X___,BORD,T___,T___,T___,T___},
{BORD,X___,X___,X___,X___,X___,BORD,T___,T___,T___},
{BORD,X___,X___,X___,X___,X___,X___,BORD,T___,T___},
{BORD,X___,X___,X___,X___,X___,X___,X___,BORD,T___},
{BORD,X___,X___,X___,X___,X___,X___,X___,X___,BORD},
{BORD,X___,X___,X___,X___,X___,BORD,BORD,BORD,BORD},
{BORD,X___,X___,BORD,X___,X___,BORD,T___,T___,T___},
{BORD,X___,BORD,T___,BORD,X___,X___,BORD,T___,T___},
{BORD,BORD,T___,T___,BORD,X___,X___,BORD,T___,T___},
{T___,T___,T___,T___,T___,BORD,X___,X___,BORD,T___},
{T___,T___,T___,T___,T___,BORD,X___,X___,BORD,T___},
{T___,T___,T___,T___,T___,T___,BORD,BORD,T___,T___}
};
intfb_open()
{
intfd;
int*mem;
fd=open("/dev/fb0",O_RDWR);
if(fd<0)
{
printf("openfileerror!
\n");
return1;
}
structfb_var_screeninfofb_var;
ioctl(fd,FBIOGET_VSCREENINFO,&fb_var);
fb.w=fb_var.xres;
fb.h=fb_var.yres;
fb.bpp=fb_var.bits_per_pixel;
printf("w:
%dh:
%dbpp:
%d\n",fb_var.xres,fb_var.yres,fb_var.bits_per_pixel);
fb.mem=mmap(NULL,FB_H*FB_W*fb_var.bits_per_pixel/8,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
//printf("%d\n",mem);
return0;
}
voidfb_pixel(intx,inty,intcolor)
{
*(fb.mem+y*FB_W+x)=color;
}
voidfb_drawline(intx0,intx1,inty,intcolor)
{
inti;
for(i=x0;i { fb_pixel(i,y,color); } } voidfb_drawretangle(intx0,inty0,intx1,inty1,intcolor) { inti,j; for(i=x0;i for(j=y0;j { fb_pixel(i,j,color); } } voidfb_drawline2(intx,inty0,inty1,intcolor) { inti; for(i=y0;i fb_pixel(x,i,color); } voidfb_drawcycle(intx,inty,intr,intcolor) { inti,j; for(i=-r;i for(j=-r;j { if(i*i+j*j<=r*r) { fb_pixel(i+x,j+y,color); } } } intget_mouse_info(intfd,char*buf) { intn; n=read(fd,buf,8); returnn; } intsave_cursor(intx,inty) { inti,j; for(i=0;i { for(j=0;j cursor_store[i][j]=*(fb.mem+j+x+(i+y)*FB_W); } return0; } intrestore_cursor(intx,inty) { inti,j; for(i=0;i { for(j=0;j *(fb.mem+j+x+(i+y)*FB_W)=cursor_store[i][j]; } return0; } voiddrawmouse(intx,inty) { inti,j; for(i=0;i { for(j=0;j { if(cursor_pixel[i][j]! =T___) fb_pixel(x+j,y+i,cursor_pixel[i][j]); //printf("kdjfk%d\n",cursor_pixel[i][j]); } } } intprintboard() { inti; fb_drawretangle(X_OFFSET-SPACE,Y_OFFSET-SPACE,X_OFFSET+SPACE*Y_CAPASITY,Y_OFFSET+SPACE*X_CAPASITY,BLUE); for(i=0;i { fb_drawline(X_OFFSET,X_OFFSET+SPACE*(Y_CAPASITY-1),i*SPACE+Y_OFFSET,RED); } for(i=0;i { fb_drawline2(i*SPACE+X_OFFSET,Y_OFFSET,Y_OFFSET+SPACE*(X_CAPASITY-1),RED); } } voidprintqizi(introw,intcol,intcolor) { intx,y; x=X_OFFSET+SPACE*col; y=Y_OFFSET+SPACE*row; fb_drawcycle(x,y,RADIO,color); } structnode_t{ intx; inty; intz; }; //printthechessboard voidprint(intboard[CHESSBOARD1][CHESSBOARD2]) { inti,j; printf("\n"); printf(""); for(j=0;j printf("%d",j); printf("\n"); printf("-"); for(j=0;j printf("-"); printf("\n"); for(i=0;i printf("%d|",i); for(j=0;j printf("%d",board[i][j]); } printf("\n"); } printf("\n"); } //鍒濆鍖栨鐩? voidinit(intmap[CHESSBOARD1][CHESSBOARD2]) { inti,j; for(i=0;i for(j=0;j map[i][j]=0; } voidinit2(intmap[CHESSBOARD1][CHESSBOARD2][4]) { inti,j,k; for(i=0;i for(j=0;j for(k=0;k<4;k++) map[i][j][k]=0; } voidinit3(intmap[CHESSBOARD1][CHESSBOARD2][1]) { inti,j; for(i=0;i for(j=0;j map[i][j][1]=0; } intdetection(intmap[CHESSBOARD1][CHESSBOARD2][4],intx,inty,intplayer) { inti,j,k,nx,ny,counter=0; intdirx[4]={0,1,1,1}; intdiry[4]={1,0,1,-1}; if(board[x][y]) { return0; } for(i=0;i<4;i++) { nx=x; ny=y; while(board[nx+=dirx[i]][ny+=diry[i]]==player) counter++; nx=x; ny=y; while(board[nx-=dirx[i]][ny-=diry[i]]==player) counter++; switch(counter) { case0: map[x][y][i]=0;break; case1: map[x][y][i]=5;break; case2: map[x][y][i]=10;break; case3: map[x][y][i]=15;break; case4: map[x][y][i]=20;break; } //printf("%d,%d,%d",x,y,map[x][y][i]); counter=0; } printf("\n"); return0; } intget_max(intmap[CHESSBOARD1][CHESSBOARD2][4]) { inti,j,k; intmax=0; for(i=0;i for(j=0;j for(k=0;k<4;k++) { if(map[i][j][k]>max) max=map[i][j][k]; } returnmax; } structnode_tget_max2(intmap[CHESSBOARD1][CHESSBOARD2][4]) { inti,j,k; structnode_tp; intmax=0,cur; for(i=0;i { for(j=0;j { for(k=0;k<4;k++) { cur=map[i][j][k]; if(cur>max) { max=cur; p.x=i; p.y=j; p.z=k; } } } } returnp; } structnode_tget_max3(intmap[CHESSBOARD1][CHESSBOARD2][4]) { inti,j,k; structnode_tp; intmax=0,cur; for(i=0;i { for(j=0;j { for(k=0;k<4;k++) { cur=map[i][j][k]; if(cur>=max) { max=cur; p.x=i; p.y=j; p.z=k; } } } } returnp; } structnode_tget_max4(intmap[CHESSBOARD1][CHESSBOARD2][1]) { inti,j; structnode_tp; intmax=0,cur; for(i=0;i { for(j=0;j { cur=map[i][j][1]; if(cur>=max) { max=cur; p.x=i; p.y=j; p.z=1; } } } returnp; } //鏌ョ湅鍧愭爣xy鏄惁鑳借蛋 intif_done(intx,inty) { if(x>=CHESSBOARD1||x<0) return0; if(y>=CHESSBOARD2||y<0) return0; return1; } voidputer() { inti,j,k; init2(play1); init2(); for(i=0;i { for(j=0;j { detection(play1,i,j,1); detection(,i,j,2); } } } //鏌ョ湅妫嬬洏鐨勬瀛愭儏鍐垫湁鍑犱釜杩炰竴璧? intcheck(intx,inty,intboard[CHESSBOARD1][CHESSBOARD2]) { inti=0,j=0,nextx,nexty; intcounter=1; intplayer; intdirectionx[4]={0,1,1,1}; intdirectiony[4]={1,0,1,-1}; player=board[x][y]; if(player==0) return0; for(i=0;i<4;i++) { nextx=x; nexty=y; counter=1; for(j=1;j<5;j++) { nextx+=directionx[i]; nexty+=directiony[i]; if(board[nextx][nexty]==player) counter++; } if(counter==5) { return1; } } return0; } voiddrawbg(introw,intcol) { intx,y; x=X_OFFSET+SPACE*col; y=Y_OFFSET+SPACE*row; fb_drawcycle(x,y,RADIO,BLUE); fb_drawline(x-RADIO,x+RADIO,y,RED); fb_drawline2(x,y-RADIO,y+RADIO,RED); } intif_gameover(intboard[CHESSBOARD1][CHESSBOARD2]) { inti,j; for(i=0;i for(j=0;j { if(check(i,j,board)) return1; } return0; } voidmouse_doing() { intfd,step=1; introw,col,flag1=1; intmax1,max2; charbuf[8]; structnode_tp; intmx,my,a,b,c,d,e; mx=FB_W/2-100; my=FB_H/2; intn; //drawmouse(mx,my); fd=open("/dev/input/mice",O_RDWR|O_NONBLOCK); if(fd<0) { printf("openmouseerror! \n"); } save_cursor(mx,my); drawmouse(mx,my); while(flag1) { if(read(fd,buf,8)>0) { e=(buf[0]&0x07); c=2*buf[1]; d=2*buf[2]; if(e==NOKEY) { restore_cursor(mx,my); mx+=c; my-=d; if(mx>=FB_W-17) mx=FB_W-17; if(mx<0) mx=0; if(my>FB_H-17) my=FB_H-17; if(my<0) my=0; save_cursor(mx,my); drawmouse(mx,my); } elseif(e==1) { if(step%2==1) { //printf("play1done! \n"); col=(int)(mx-X_OFFSET+SPACE/2)/SPACE; row=(int)(my-Y_OFFSET+SPACE/2)/SPACE; if(! (if_done(row,col))||board[row][col]) { //printf("youcan'tdonehere! \n"); col=(int)(mx-X_OFFSET)/SPACE; row=(int)(my-Y_OFFSET)/SPACE; continue; } board[row][col]=1; restore_cursor(mx,my); printqizi(row,col,BLACK);//鐢婚粦鑹茬殑妫嬪瓙 save_cursor(mx,my); array[row][col][1]=step; step++; puter();//鏇存柊浼樺厛绾ц〃 //printf("flag2%d\n",flag2); //flag2=1; } else{ //printf("play2done! \n"); max1=get_max(play1); max2=get_max(); if(max1>=max2) { p=get_max2(play1); } else{ p=get_max2(); } row=p.x; col=p.y; if(! (if_done(row,col))||board[row][col]) { //printf("youcan'tdonehere! \n"); max1=get_max(play1); max2=get_max(); if(max1>=max2) { p=get_max3(play1); } else{ p=get_max3(); } row=p.x; col=p.y; continue; } board[row][col]=2; puter(board); restore_cursor(mx,my); printq
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux ubuntu 五子棋 游戏 语言 代码