zoukankan      html  css  js  c++  java
  • 双人五子棋对战(需要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("请遵守游戏规则
    Yes or No");
     76     printf("请选择'y'or'n'
    ");
     77     scanf("%c",&k);
     78     if(k=='y'||k=='Y') MainFace();
     79     if(k=='n'||k=='N')     {printf("感谢您的使用
    ");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         else
    142         {    
    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 }
  • 相关阅读:
    asp.net core系列 47 Identity 自定义用户数据
    asp.net core系列 46 Identity介绍
    asp.net core系列 45 Web应用 模型绑定和验证
    asp.net core系列 44 Web应用 布局
    (入门SpringBoot)SpringBoot来临(一)
    (办公)ssm发送邮件
    (办公)vue下载excel,后台用post方法
    (办公)定时任务quartz入门
    (办公)工作中的编码不良习惯Java(不定时更新)
    (办公)springboot配置全局异常
  • 原文地址:https://www.cnblogs.com/xzt6/p/5808791.html
Copyright © 2011-2022 走看看