在linux下ubuntu的五子棋游戏c语言代码.docx

上传人:b****5 文档编号:12018536 上传时间:2023-04-16 格式:DOCX 页数:27 大小:17.93KB
下载 相关 举报
在linux下ubuntu的五子棋游戏c语言代码.docx_第1页
第1页 / 共27页
在linux下ubuntu的五子棋游戏c语言代码.docx_第2页
第2页 / 共27页
在linux下ubuntu的五子棋游戏c语言代码.docx_第3页
第3页 / 共27页
在linux下ubuntu的五子棋游戏c语言代码.docx_第4页
第4页 / 共27页
在linux下ubuntu的五子棋游戏c语言代码.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

在linux下ubuntu的五子棋游戏c语言代码.docx

《在linux下ubuntu的五子棋游戏c语言代码.docx》由会员分享,可在线阅读,更多相关《在linux下ubuntu的五子棋游戏c语言代码.docx(27页珍藏版)》请在冰豆网上搜索。

在linux下ubuntu的五子棋游戏c语言代码.docx

在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];

intcom[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;

}

voidcomputer()

{

inti,j,k;

init2(play1);

init2(com);

for(i=0;i

{

for(j=0;j

{

detection(play1,i,j,1);

detection(com,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++;

computer();//鏇存柊浼樺厛绾ц〃

//printf("flag2%d\n",flag2);

//flag2=1;

}

else{

//printf("play2done!

\n");

max1=get_max(play1);

max2=get_max(com);

if(max1>=max2)

{

p=get_max2(play1);

}

else{

p=get_max2(com);

}

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(com);

if(max1>=max2)

{

p=get_max3(play1);

}

else{

p=get_max3(com);

}

row=p.x;

col=p.y;

continue;

}

board[row][col]=2;

computer(boar

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1