首页 > 代码库 > 双人五子棋对战(需要EasyX图像库)

双人五子棋对战(需要EasyX图像库)

实训要做项目呐。天天坐在电脑面前累死了。最近题刷的少。大多数都挺水。就不挨个编辑发上来了。发发白天写的项目吧。可能好几天更一下。实训结束恢复正常。

这个游戏需要EasyX的图像库。有兴趣的可以下一个图像库运行一下玩玩~(虽然= =没LOL好玩2333333)

设计题目:双人五子棋对战单机游戏

使用C语言及VC绘图库,在VC环境下,设计一个双人五子棋对战单机游戏,双方各执黑白一子,黑白双方轮流落子,直到某一方首先在棋盘的横线、纵线或斜线上形成连续五子,则该方就算获胜,游戏过程可以悔棋一步。要求友好的图形化界面、方便操作。

功能设计要求

根据五子棋游戏规则,项目设计有以下几点要求:

  1. 输出游戏规则并由用户决定是否遵守并开局。
  2. 要求动态画出棋盘大小。
  3. 画棋子并确定其颜色。
  4. 提示下棋规则。
  5. 玩家轮流下棋。
  6. 判断谁先落棋。
  7. 允许且只允许悔棋一步。
  8. 判断每局游戏输赢,显示每局游戏的获胜者及分数。
  9. 判断是否进行下一局。
  10. 判最终赢家(三局两胜)。
  1 #include<stdio.h>  2 #include<graphics.h>  3 #include<conio.h>  4 #define N 10  5 void gameover();  6 void MainFace();  7 int Game_Over1(int a[10][10],int chess_symbol )/* "-"形或者"|"形(事实上"-"与"|"关于"\"对称) */  8 {      9     int i,j,k,l,r; 10     for( i=0; i < N; i++ ) 11         for( k=0; k < N-4; k++ ) 12         { 13             l=r=0; 14             for( j=k; j < k+5; j++ ) 15             { 16                 if( a[i][j] == chess_symbol )/* "-"形*/ 17                     l++; 18                 if( a[j][i] == chess_symbol )/* "|"形*/ 19                     r++; 20             } 21             if( l == 5 || r == 5 )/*连续的个棋子在一条直线上时,游戏结束*/ 22                 return 1;        } 23         return 0; 24 } 25  26  27 int Game_Over2( int a[10][10] ,int chess_symbol )/* "\"形*/ 28 { 29     int i,j,k,m,LeftDown,RightUp; 30     for( m=0; m < N-4; m++ ) 31         for( k=0; k < N-4-m; k++ ) 32         { 33             RightUp=LeftDown=0; 34             for( i=k ,j=k+m;  i < k+5;  i++ ,j++ ) 35             { 36                 if( a[i][j] == chess_symbol )/* 对角线"\"上及其右上方的"\"形*/ 37                     RightUp++; 38                 if( a[j][i] == chess_symbol )/* 对角线"\"上及其左下方的"\"形*/ 39                     LeftDown++;             40             } 41             if( RightUp == 5 || LeftDown == 5 ) 42                 return 1;         43         } 44         return 0; 45 } 46 int Game_Over3( int a[10][10] ,int chess_symbol )/* "/"形*/ 47 {     48     int i,j,k,m,LeftUp,RightDown; 49     for( m=N-1; m >= 4; m-- ) 50         for( k=0; k < m + 1 - 4; k++ ) 51         { 52             RightDown=LeftUp=0; 53             for( i=k ,j= m - k;  i < k+5;  i++ ,j-- ) 54             { 55                 if( a[i][j] == chess_symbol )/*对角线"/"上及其左上方的"/"形*/ 56                     LeftUp++; 57                 if( a[N-1-j][N-1-i] == chess_symbol )/*对角线"/"上及其右下方的"/"形*/ 58                     RightDown++; 59             } 60             if( RightDown == 5 || LeftUp == 5 ) 61                 return 1; 62         } 63         return 0; 64 } 65  66 typedef struct  67 { 68     UINT uMsg;                 69     int x; 70     int y; 71 }m; 72 void main() 73 { 74     char k; 75     printf("请遵守游戏规则\nYes or No"); 76     printf("请选择‘y‘or‘n‘\n"); 77     scanf("%c",&k); 78     if(k==y||k==Y) MainFace(); 79     if(k==n||k==N)     {printf("感谢您的使用\n");gameover();} 80 } 81 void gameover() 82 { 83     getch(); 84     closegraph(); 85 } 86  87 void MainFace() 88 { 89     int chess[N][N]={0}; 90     int i,x,y,j,r,n=1; 91     int v[N]; 92     char ch; 93     MOUSEMSG m; 94     initgraph(500,500);/*生成一个,区域*/ 95     setbkcolor(LIGHTGRAY);    cleardevice();/*背景设置为白色*/ 96     setcolor(RED);/*画图颜色是红色*/ 97     for(x=2;x<=502;x=x+50)/*画棋盘格*/ 98     {     99         line(x,2,x,500);100         line(2,x,500,x);101     }102     while(true)/*响应鼠标操作*/103 {104     m = GetMouseMsg();105     if(m.uMsg==WM_LBUTTONDOWN)106     {107         x=m.x%50;if(x<=25)m.x=m.x-x;else m.x=m.x+(50-x);108         y=m.y%50;if(y<=25)m.y=m.y-y;else m.y=m.y+(50-y);109         i=m.x/50;j=m.y/50;110         if (chess[i][j]!=0)/*防止在一个地方重复下棋子chess[i][j]==1 为白子            chess[i][j]==1 为黑子*/111             continue;        112         if(n==1)/*判断该谁下棋*/113         {                     114             setcolor(WHITE); 115             setfillstyle(WHITE);116             fillcircle(m.x,m.y,20);117             /*fillellipse(m.x,m.y,10,10);*/            118             chess[i][j]=1;                119             if(Game_Over1(chess,1)==1||Game_Over2(chess,1)==1||Game_Over3(chess,1)==1)120             {121                 setcolor(BLACK);outtextxy(200,200,"此局白子胜利");122                 v[0]++;     if(v[0]==2)123                 { outtextxy(200,300,"3局胜,白子胜局,白子胜出");                       break;}                124                 outtextxy(250,250,"是否继续下棋:Y OR N");125                 ch= getch();126                 if(ch==N) break;127                 else{128                     for(i=0;i<N;i++)129                         for(j=0;j<N;j++)130                             chess[i][j]=0;                        131                     setbkcolor(LIGHTGRAY);    cleardevice();/*背景设置为白色*/132                     setcolor(RED);/*画图颜色是红色*/                    133                     for(x=2;x<=502;x=x+50)/*画棋盘格*/134                     {    line(x,2,x,500);135                     line(2,x,500,x);136                     }137                 }                138             }        139             n=2;/*换方下子*/140         }        141         else142         {    143             chess[i][j]=2;    144             for(r=20;r>=0;r--)145             {146                 setcolor(BLACK);    147                 setfillstyle(BLACK);148                 fillcircle(m.x,m.y,r);149             }150         /*fillellipse(m.x,m.y,1,1);    */151         if(Game_Over1(chess,2)==1||Game_Over2(chess,2)==1||Game_Over3(chess,2)==1) 152         {153             setcolor(BLACK);outtextxy(200,200,"此局黑子胜利");    v[1]++;154             if(v[1]==2){ outtextxy(200,200,"3局胜,黑子胜局,黑子胜出");    break;}155             outtextxy(250,250,"是否继续下棋:Y OR N");156             ch= getch();157             if(ch==N) break;158             else{159                 for(i=0;i<N;i++)160                     for(j=0;j<N;j++)161                         chess[i][j]=0;                    162                 setbkcolor(LIGHTGRAY);    cleardevice();/*背景设置为白色*/163                 setcolor(RED);/*画图颜色是红色*/                    164                 for(x=2;x<=502;x=x+50)/*画棋盘格*/165                 {    line(x,2,x,500);166                 line(2,x,500,x);167                 }168             }                169         }170         n=1;171         }        172     }    173     if(m.uMsg==WM_RBUTTONUP) break;/*右键结束*/174 }175         getch();176         closegraph();177 }

 

双人五子棋对战(需要EasyX图像库)