签到

06月21日
尚未签到

共有回帖数 0

    此情若长久

    等级:
    原创五子棋(界面版)抛砖引玉 寻蒙c高手交流
    ////////////////////////////////////////////
    #include "stdio.h"
    #includegraphics.h
    #define LEFT 0x4b00   /*光标左键值*/
    #define RIGHT 0x4d00 /*光标右键值*/
    #define DOWN 0x5000 /*光标下键值*/
    #define UP 0x4800 /*光标上键值*/
    #define ESC 0x011b /* ESC键值*/
    #define ENTER 0x1c0d /* 回车键值*/
    int a[15][15]={0},key;
    void playtoplay(void);/*人人对战函数*/
    void DrawQp(void);/*画棋盘函数*/
    void MoveColor(int x,int y);/*恢复原来棋盘状态*/
    void QpChange(int x,int y,int z);/*判断棋盘的变化*/
    void playWin(int t);/*输出胜利者信息*/
    void chongtucolor(int x,int y);
    void main()
    {
          int gd=DETECT,gr;
       initgraph(&gd,&gr,""); /*初始化图形系统*/
       DrawQp();/*画棋盘*/
    playtoplay();/*人人对战*/
       getch();
       closegraph();/*关闭图形系统*/
    }
    void chongtucolor(int x,int y)
    {
       switch(a[(x-46)/26][(y-46)/26])
          {
      case 0:
           break; /*黑色*/
      default:
           setfillstyle(SOLID_FILL,4);break;
          }
    }
    void DrawQp()/*画棋盘*/
    {
       int i,j;
       setcolor(RED);
       rectangle(3,3,635,472);
       setbkcolor(BLUE);
       setcolor(WHITE);
       for(i=46;i=462;i+=26)
         fillellipse(x,y,10,10);
         SetPlayColor(t);  
            x-=26;
      chongtucolor(x,y);
         fillellipse(x,y,10,10);
      }
          else
      if(key==RIGHT&&x449&&y33)/*右方向键*/
      {
        MoveColor(x,y);
         fillellipse(x,y,10,10);
         SetPlayColor(t);
       
         x+=26;
         chongtucolor(x,y);
         fillellipse(x,y,10,10);
      }
          else
      if(key==UP&&y59)/*上方向键*/
      {
        MoveColor(x,y);
         fillellipse(x,y,10,10);
         SetPlayColor(t);
         y-=26;
        chongtucolor(x,y);
         fillellipse(x,y,10,10);
      }
          else
      if(key==DOWN&&y449)/*下方向键*/
      {
         MoveColor(x,y);
         fillellipse(x,y,10,10);
         SetPlayColor(t);
         y+=26;
         chongtucolor(x,y);
         fillellipse(x,y,10,10);
      }

          }
                t=t%2+1; /*一方走后,改变棋子颜色即轮对方走*/
       } /*endwhile*/
    }

    void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/
    {
       if(y46)/*如果是从起点出发就恢复蓝色*/
          setfillstyle(SOLID_FILL,BLUE);
       else/*其他情况如果是1就恢复6白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/
          switch(a[(x-46)/26][(y-46)/26])
          {
      case 1:
          setfillstyle(SOLID_FILL,15);break; /*白色*/
      case 2:
          setfillstyle(SOLID_FILL,8);break; /*黑色*/
      default:
         setfillstyle(SOLID_FILL,BLUE); /*蓝色*/
          }
    }
    void QpChange(int x,int y,int t)/*判断棋盘的变化*/
    {
       int i,j,k,kk,ii,jj,m,n;

       i=(x-46)/26; /*计算数组元素的行下标*/
       j=(y-46)/26; /*计算数组元素的列下标*/
       /***************** 上下判断*************************/
       ii=i;
       m=0;n=0;
       while(ii0)
       {ii--;
       if(a[ii][j]==a[j])
        m++;
        else
        break;
       }
       ii=i;
       while(ii14)
       {
        ii++;
        if(a[ii][j]==a[j])
        n++;
        else
        break;
       }
       if((m+n)=4)
       playWin(t);
       /****************左右判断***********************/
       jj=j;
       m=0;n=0;
       while(jj0)
       {
        jj--;
        if(a[jj]==a[j])
        m++;
        else
        break;
       }
       jj=j;
       while(jj14)
       {
        jj++;
        if(a[jj]==a[j])
        n++;
        else
        break;
       }
       if((m+n)=4)
       playWin(t);
       /***********************斜着判断1**********************/
       ii=i;jj=j;
       m=0;n=0;
       while(ii0&&jj0)
       {
        ii--;jj--;
        if(a[ii][jj]==a[j])
        m++;
        else
        break;
       }
       ii=0;jj=0;
       while(ii14&&jj14)
       {
        ii++;jj++;
         if(a[ii][jj]==a[j])
        n++;
        else
        break;
       }
       if((m+n)=4)
       playWin(t);
       /*******************斜着判断2**********************/
       ii=i;jj=j;
       m=0;n=0;
       while(ii0&&jj14)
       {
        ii--;jj++;
         if(a[ii][jj]==a[j])
        m++;
        else
        break;
       }
       ii=i;jj=j;
       while(ii14&&jj0)
       {
        ii++;jj--;
         if(a[ii][jj]==a[j])
        n++;
        else
        break;
       }
       if((m+n)=4)
      playWin(t);
    }

    void playWin(int t)/*输出最后的胜利者结果*/
    {
       settextstyle(0,0,4);
       setcolor(12);
       if(t==1)
      outtextxy(100,10,"white win!");
      else
      outtextxy(100,10,"Back win!");
      getch();
      exit(0);
    }



    楼主 2015-12-18 13:54 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知