在linux下ubuntu的五子棋游戏c语言代码.doc_第1页
在linux下ubuntu的五子棋游戏c语言代码.doc_第2页
在linux下ubuntu的五子棋游戏c语言代码.doc_第3页
在linux下ubuntu的五子棋游戏c语言代码.doc_第4页
在linux下ubuntu的五子棋游戏c语言代码.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#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 0x0000ff00#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 play1CHESSBOARD1CHESSBOARD24;int comCHESSBOARD1CHESSBOARD24;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_,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_;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_VSCREENINFO,&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(int 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,int 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(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_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 * 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 chessboardvoid 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 , boardij);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 mapCHESSBOARD1CHESSBOARD21) 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(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;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+) 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; 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 computer() int i,j,k; init2(play1); init2(com); for(i = 0;iCHESSBOARD2;i+) for(j = 0;jCHESSBOARD1;j+) detection(play1,i,j,1); detection(com,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;int 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_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);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 mouse_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; 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(com); 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(com);if(max1 = max2)p = get_max3(play1);elsep = get_max3(com); row = p.x; col = p.y; continue; boardrowcol = 2; computer(board);restore_cursor(mx,my); printqizi(row,col,WHITE); save_cursor(mx, my);arrayrowcol1 = step;step+; /flag2 = 0; if(if_gameover(board) flag1=0; else if(e = 2) if(step != 1) p = get_max4(array); row = p.x; col = p.y;boardrowcol = 0; arrayrowcol1 = 0;computer(board);drawbg(row,col);/restore_cursor(mx,my);step-; if(boardrowcol =1) printf(GAME OVER! play1 win!n); else printf(GAME OVER! play2 win!n); void mouse_doing2()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; my -= d; if(mx = FB_W-17) mx=FB_W-17; if(mx FB_H-17) my = FB_H-17; if(my 0) my = 0; save_cursor(mx,my); drawmouse(mx,my); else if(e = 1) if(step%2=1) / printf(play1 done!n); col =(int) (mx-X_OFFSET+SPACE/2)/SPACE; row = (int)(my-Y_OFFSET+SPACE/2)/SPACE;if(!(if_done(row,col)|boardrowcol)/printf(you cant done here !n);col =(int) (mx-X_OFFSET)/SPACE; row = (int)(my-Y_OFFSET)/SPACE;continue; boardrowcol = 1;restore_cursor(mx,my); printqizi(row,col,BLACK);/鐢婚粦鑹茬殑妫嬪瓙save_cursor(mx, my); arrayrowcol1 = step; step +; /computer();/鏇存柊浼樺厛绾 / printf(flag2 %dn,flag2); /flag2 = 1; else / printf(play2 done!n); col =(int)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论