1、在linux下ubuntu的五子棋游戏c语言代码#include #include /#include #include #include #include #include #define FB_W 1024#define FB_H 768#define CHESSBOARD1 10#define CHESSBOARD2 10#define X_OFFSET 400#define Y_OFFSET 200#define X_CAPASITY 10 #define Y_CAPASITY 10#define SPACE 40#define RED 0x00ff0000#define BLUE 0
2、x0000ff00#define WHITE 0xffffffff#define BLACK 0xff000000#define NOKEY 0#define RADIO 19#define C_H 17#define C_W 10#define T_ 0x00ffffff#define X_ 0xff00ffff#define BORD 0xeeff0000#define u32_t unsigned intint arrayCHESSBOARD1CHESSBOARD21;int boardCHESSBOARD1CHESSBOARD2;int play1CHESSBOARD1CHESSBOA
3、RD24;int CHESSBOARD1CHESSBOARD24;int cursor_storeC_HC_W;struct fb_infoint w;int h;int bpp;int *mem;fb;static u32_t cursor_pixelC_HC_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_
4、,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_,
5、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_;int fb_open() int fd; int *mem; fd = open(/dev/fb0,O_RDWR); if(fd 0) printf(open file error!n); return 1; struct fb_var_screeninfo fb_var; ioctl(fd,FBIOGET_V
6、SCREENINFO,&fb_var); fb.w = fb_var.xres; fb.h = fb_var.yres; fb.bpp = fb_var.bits_per_pixel; printf(w:%d h:%d bpp:%dn,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(%dn, mem); return 0;void fb_pixel(in
7、t x,int y,int color)*(fb.mem + y*FB_W+x) = color;void fb_drawline(int x0,int x1,int y,int color)int i;for(i = x0;ix1;i+)fb_pixel(i,y,color);void fb_drawretangle(int x0,int y0,int x1,int y1,int color) int i,j; for(i = x0;ix1;i+) for(j = y0;jy1;j+) fb_pixel(i,j,color); void fb_drawline2(int x,int y0,i
8、nt y1,int color)int i;for(i = y0;iy1;i+)fb_pixel(x,i,color);void fb_drawcycle(int x,int y,int r,int color)int i,j;for(i = -r;ir;i+)for(j = -r;jr;j+) if(i*i+j*j = r*r) fb_pixel(i+x,j+y,color);int get_mouse_info(int fd,char *buf)int n;n = read(fd,buf,8);return n;int save_cursor(int x,int y)int i,j;for
9、(i = 0;i C_H;i+)for(j = 0;jC_W;j+)cursor_storeij = *(fb.mem + j + x+(i +y)*FB_W);return 0;int restore_cursor(int x,int y) int i,j; for(i = 0;iC_H;i+) for(j = 0;j C_W;j+) *(fb.mem+j+x+(i+y)*FB_W)=cursor_storeij; return 0;void drawmouse(int x,int y)int i,j;for(i = 0;iC_H;i+)for(j = 0;jC_W;j+)if(cursor
10、_pixelij != T_)fb_pixel(x+j,y+i,cursor_pixelij);/printf(kdjfk%dn,cursor_pixelij);int printboard()int i;fb_drawretangle(X_OFFSET - SPACE,Y_OFFSET - SPACE,X_OFFSET + SPACE *Y_CAPASITY,Y_OFFSET + SPACE * X_CAPASITY,BLUE);for(i = 0;i Y_CAPASITY;i+) fb_drawline(X_OFFSET,X_OFFSET+SPACE*(Y_CAPASITY - 1),i
11、* SPACE + Y_OFFSET,RED);for(i = 0;i X_CAPASITY;i+)fb_drawline2(i*SPACE+X_OFFSET,Y_OFFSET,Y_OFFSET+SPACE*(X_CAPASITY-1),RED);void printqizi(int row,int col, int color)int x,y;x = X_OFFSET + SPACE*col;y = Y_OFFSET + SPACE*row;fb_drawcycle(x,y,RADIO,color);struct node_tint x;int y;int z;/print the ches
12、sboardvoid print(int boardCHESSBOARD1CHESSBOARD2) int i, j; printf(n); printf( ); for (j = 0; j CHESSBOARD2; j+) printf( %d, j); printf(n); printf( -); for (j = 0; j CHESSBOARD2; j+) printf( -); printf(n); for (i = 0; i CHESSBOARD1; i+) printf(%d| , i); for (j = 0; j CHESSBOARD2; j+) printf(%d , boa
13、rdij);printf(n);printf(n);/ 鍒濆 鍖栨 鐩?void init(int mapCHESSBOARD1CHESSBOARD2) int i,j; for(i=0;iCHESSBOARD1;i+) for(j=0;jCHESSBOARD2;j+) mapij = 0; void init2(int mapCHESSBOARD1CHESSBOARD24) int i,j,k; for(i=0;iCHESSBOARD1;i+) for(j=0;jCHESSBOARD2;j+) for(k =0;k4;k+) mapijk = 0; void init3(int mapCHE
14、SSBOARD1CHESSBOARD21) int i , j; for(i = 0;iCHESSBOARD1;i+) for(j = 0;jCHESSBOARD2;j+) mapij1 = 0; int detection(int mapCHESSBOARD1CHESSBOARD24,int x,int y,int player) int i,j,k,nx,ny,counter = 0; int dirx4 = 0,1,1,1; int diry4 = 1,0,1,-1; if(boardxy) return 0; for(i =0;i4;i+) nx = x; ny = y; while(
15、boardnx+=dirxiny+=diryi = player) counter+; nx =x; ny =y; while(boardnx-=dirxiny-=diryi = player) counter+; switch(counter) case 0: mapxyi = 0;break; case 1: mapxyi = 5;break; case 2: mapxyi = 10;break; case 3: mapxyi = 15;break; case 4: mapxyi = 20;break; /printf(%d,%d,%d ,x,y,mapxyi); counter = 0;
16、printf(n);return 0;int get_max(int mapCHESSBOARD1CHESSBOARD24)int i,j,k;int max = 0;for(i = 0;iCHESSBOARD2;i+)for(j = 0;jCHESSBOARD1;j+)for(k = 0;kmax)max = mapijk;return max;struct node_t get_max2(int mapCHESSBOARD1CHESSBOARD24) int i,j,k; struct node_t p; int max = 0,cur; for(i = 0;iCHESSBOARD2;i+
17、) for(j = 0;jCHESSBOARD1;j+) for(k = 0;kmax) max = cur; p.x = i; p.y = j; p.z = k; return p;struct node_t get_max3(int mapCHESSBOARD1CHESSBOARD24) int i,j,k; struct node_t p; int max = 0,cur; for(i = 0;iCHESSBOARD2;i+) for(j = 0;jCHESSBOARD1;j+) for(k = 0;k= max) max = cur; p.x = i; p.y = j; p.z = k
18、; return p;struct node_t get_max4(int mapCHESSBOARD1CHESSBOARD21) int i,j; struct node_t p; int max = 0,cur; for(i = 0;iCHESSBOARD2;i+) for(j = 0;j= max) max = cur; p.x = i; p.y = j; p.z = 1; return p;/鏌湅鍧愭爣x y鏄 惁鑳借蛋int if_done(int x,int y)if(x=CHESSBOARD1|x=CHESSBOARD2|y0)return 0;return 1;void put
19、er() int i,j,k; init2(play1); init2(); for(i = 0;iCHESSBOARD2;i+) for(j = 0;jCHESSBOARD1;j+) detection(play1,i,j,1); detection(,i,j,2); /鏌湅妫嬬洏鐨勬 瀛愭儏鍐垫湁鍑犱釜杩炰竴璧?int check(int x,int y,int boardCHESSBOARD1CHESSBOARD2) int i = 0,j = 0,nextx,nexty; int counter = 1; int player; int directionx4 = 0,1,1,1; i
20、nt directiony4 = 1,0,1,-1; player = boardxy; if(player = 0) return 0; for(i = 0;i4;i+) nextx = x; nexty = y; counter = 1; for(j = 1;j5;j+) nextx += directionxi; nexty +=directionyi; if(boardnextxnexty = player) counter+; if(counter = 5) return 1; return 0;void drawbg(int row,int col)int x,y;x = X_OF
21、FSET + 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);int if_gameover(int boardCHESSBOARD1CHESSBOARD2) int i,j; for(i = 0;iCHESSBOARD2;i+) for(j = 0;jCHESSBOARD1;j+) if(check(i,j,board) return 1; return 0;void mo
22、use_doing()int fd,step = 1; int row,col,flag1=1; int max1,max2;char buf8; struct node_t p;int mx,my,a,b,c,d,e;mx = FB_W/2-100;my = FB_H/2;int n;/drawmouse(mx,my);fd = open(/dev/input/mice,O_RDWR|O_NONBLOCK);if(fd 0) e = (buf0&0x07); c = 2*buf1; d = 2*buf2;if(e = NOKEY) restore_cursor(mx,my); mx += c
23、; my -= d; if(mx = FB_W-17) mx=FB_W-17; if(mx FB_H-17) my = FB_H-17; if(my = max2) p = get_max2(play1); else p = get_max2(); row = p.x; col = p.y; if(!(if_done(row,col)|boardrowcol) / printf(you cant done here !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; boardrowcol = 2; puter(board); restore_cursor(mx,my); printq
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1