注册 登录
重磅消息:开通VIP会员,获取平台所有项目,永久使用,详细请咨询QQ:3376762016
远程服务部署安装,售后服务,请加QQ1:3376762016,QQ2:3597230140(即将满员),QQ3:1399491757(已满)
查看: 597|回复: 0
打印 上一主题 下一主题

C语言五子棋游戏源代码

[复制链接]

该用户从未签到

3518

主题

3532

帖子

66万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
668954
QQ
跳转到指定楼层
楼主
发表于 2019-1-16 09:17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
技术:C语言

/*
五子棋
*/

#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<bios.h>
#include<conio.h>

#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define SPACE 0x3920

#define BILI 20
#define JZ 4
#define JS 3
#define N 19

int box[N][N];
int step_x,step_y ;
int key ;
int flag=1 ;

void draw_box();
void draw_cicle(int x,int y,int color);
void change();
void judgewho(int x,int y);
void judgekey();
int judgeresult(int x,int y);
void attentoin();

void attention()
{
   char ch ;
   window(1,1,80,25);
   textbackground(LIGHTBLUE);
   textcolor(YELLOW);
   clrscr();
   gotoxy(15,2);
   printf("游戏操作规则:");
   gotoxy(15,4);
   printf("Play Rules:");
   gotoxy(15,6);
   printf("1、按左右上下方向键移动棋子");
   gotoxy(15,8);
   printf("1. Press Left,Right,Up,Down Key to move Piece");
   gotoxy(15,10);
   printf("2、按空格确定落棋子");
   gotoxy(15,12);
   printf("2. Press Space to place the Piece");
   gotoxy(15,14);
   printf("3、禁止在棋盘外按空格");
   gotoxy(15,16);
   printf("3. DO NOT press Space outside of the chessboard");
   gotoxy(15,18);
   printf("你是否接受上述的游戏规则(Y/N");
   gotoxy(15,20);
   printf("Do you accept the above Playing Rules? [Y/N]:");
   while(1)
    {
       gotoxy(60,20);
       ch=getche();
       if(ch=='Y'||ch=='y')
       break ;
       else if(ch=='N'||ch=='n')
       {
              window(1,1,80,25);
                  textbackground(BLACK);
                  textcolor(LIGHTGRAY);
              clrscr();
              exit(0);
       }
       gotoxy(51,12);
       printf(" ");
    }
}
void draw_box()
{
   int x1,x2,y1,y2 ;
   setbkcolor(LIGHTBLUE);
   setcolor(YELLOW);
   gotoxy(7,2);
   printf("Left, Right, Up, Down KEY to move, Space to put,ESC-quit.");
   for(x1=1,y1=1,y2=18;x1<=18;x1++)
   line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);
   for(x1=1,y1=1,x2=18;y1<=18;y1++)
   line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);
   for(x1=1;x1<=18;x1++)
   for(y1=1;y1<=18;y1++)
   box[x1][y1]=0 ;
}

void draw_circle(int x,int y,int color)
{
   setcolor(color);
   setlinestyle(SOLID_LINE,0,1);
   x=(x+JZ)*BILI ;
   y=(y+JS)*BILI ;
   circle(x,y,8);
}

void judgekey()
{
   int i ;
   int j ;
   switch(key)
    {
       case LEFT :

       if(step_x-1<0)
       break ;
       else
       {
           for(i=step_x-1,j=step_y;i>=1;i--)
           if(box[j]==0)
           {
              draw_circle(step_x,step_y,LIGHTBLUE);
                break ;
           }
           if(i<1)break ;
           step_x=i ;
           judgewho(step_x,step_y);
           break ;
       }
       case RIGHT :

       if(step_x+1>18)
       break ;
       else
       {
           for(i=step_x+1,j=step_y;i<=18;i++)
           if(box[j]==0)
           {
              draw_circle(step_x,step_y,LIGHTBLUE);
                break ;
           }
           if(i>18)break ;
           step_x=i ;
           judgewho(step_x,step_y);
           break ;
       }
        case DOWN :
       if((step_y+1)>18)
       break ;
       else
       {
           for(i=step_x,j=step_y+1;j<=18;j++)
           if(box[j]==0)
           {
              draw_circle(step_x,step_y,LIGHTBLUE);
                break ;
           }
            if(j>18)break ;
           step_y=j ;
           judgewho(step_x,step_y);
           break ;
       }
       case UP :
       if((step_y-1)<0)
       break ;
       else
       {
           for(i=step_x,j=step_y-1;j>=1;j--)
           if(box[j]==0)
           {
              draw_circle(step_x,step_y,LIGHTBLUE);
                break ;
           }
           if(j<1)break ;
           step_y=j ;
           judgewho(step_x,step_y);
           break ;
       }
       case ESC :
       break ;
       case SPACE :
       if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)
       {
           if(box[step_x][step_y]==0)
           {
                box[step_x][step_y]=flag ;
               if(judgeresult(step_x,step_y)==1)
                {
                    sound(1000);
                    delay(1000);
                    nosound();
                    gotoxy(30,4);
                    if(flag==1)
                    {
                        setbkcolor(BLUE);
                        cleardevice();
                       setviewport(100,100,540,380,1);
                        /*定义一个图形窗口*/
                        setfillstyle(1,2);
                        /*绿色以实填充*/
                        setcolor(YELLOW);
                        rectangle(0,0,439,279);
                        floodfill(50,50,14);
                        setcolor(12);
                   settextstyle(1,0,5);
                     /*三重笔划字体, 水平放?5*/
                       outtextxy(20,20,"The White Win !");
                        setcolor(15);
                       settextstyle(3,0,5);
                        /*无衬笔划字体, 水平放大5*/
                       outtextxy(120,120,"The White Win !");
                        setcolor(14);
                        settextstyle(2,0,8);
                        getch();
                        closegraph();
                        exit(0);
                    }
                    if(flag==2)
                    {
                        setbkcolor(BLUE);
                        cleardevice();
                        setviewport(100,100,540,380,1);
                        /*定义一个图形窗口*/
                        setfillstyle(1,2);
                        /*绿色以实填充*/
                        setcolor(YELLOW);
                        rectangle(0,0,439,279);
                        floodfill(50,50,14);
                        setcolor(12);
                        settextstyle(1,0,8);
                        /*三重笔划字体, 水平放大8*/
                       outtextxy(20,20,"The Red Win !");
                        setcolor(15);
                        settextstyle(3,0,5);
                        /*无衬笔划字体, 水平放大5*/
                       outtextxy(120,120,"The Red Win !");
                        setcolor(14);
                        settextstyle(2,0,8);
                        getch();
                        closegraph();
                        exit(0);
                    }
                }
                change();
                break ;
           }
       }
       else
       break ;
    }
}
void change()
{
   if(flag==1)
   flag=2 ;
   else
   flag=1 ;
}
void judgewho(int x,int y)
{
   if(flag==1)
   draw_circle(x,y,15);
   if(flag==2)
   draw_circle(x,y,4);
}
int judgeresult(int x,int y)
{
   int j,k,n1,n2 ;
   while(1)
    {
       n1=0 ;
       n2=0 ;
       /*水平向左数*/
       for(j=x,k=y;j>=1;j--)
       {
           if(box[j][k]==flag)
           n1++;
           else
           break ;
       }
       /*水平向右数*/
       for(j=x,k=y;j<=18;j++)
       {
           if(box[j][k]==flag)
           n2++;
            else
           break ;
       }
       if(n1+n2-1>=5)
       {
           return(1);
           break ;
       }

       /*垂直向上数*/
       n1=0 ;
       n2=0 ;
       for(j=x,k=y;k>=1;k--)
       {
           if(box[j][k]==flag)
           n1++;
           else
           break ;
       }
       /*垂直向下数*/
       for(j=x,k=y;k<=18;k++)
       {
           if(box[j][k]==flag)
           n2++;
           else
           break ;
       }
       if(n1+n2-1>=5)
        {
           return(1);
           break ;
       }

       /*向左上方数*/
       n1=0 ;
       n2=0 ;
       for(j=x,k=y;j>=1,k>=1;j--,k--)
       {
           if(box[j][k]==flag)
           n1++;
           else
           break ;
        }
       /*向右下方数*/
       for(j=x,k=y;j<=18,k<=18;j++,k++)
       {
           if(box[j][k]==flag)
           n2++;
           else
           break ;
       }
       if(n1+n2-1>=5)
       {
           return(1);
           break ;
       }

       /*向右上方数*/
       n1=0 ;
       n2=0 ;
       for(j=x,k=y;j<=18,k>=1;j++,k--)
       {
           if(box[j][k]==flag)
           n1++;
           else
           break ;
       }
       /*向左下方数*/
       for(j=x,k=y;j>=1,k<=18;j--,k++)
       {
           if(box[j][k]==flag)
           n2++;
           else
           break ;
       }
       if(n1+n2-1>=5)
       {
           return(1);
           break ;
       }
       return(0);
       break ;
    }
}
void main()
{
   int gdriver=VGA,gmode=VGAHI;
   clrscr();
   attention();
   initgraph(&gdriver,&gmode,"c:\\tc");
   /* setwritemode(XOR_PUT);*/
   flag=1 ;
   draw_box();
   do
    {
       step_x=0 ;
       step_y=0 ;
       /*draw_circle(step_x,step_y,8); */
       judgewho(step_x-1,step_y-1);
       do
       {
           while(bioskey(1)==0);
           key=bioskey(0);
           judgekey();
       }
       while(key!=SPACE&&key!=ESC);
    }
   while(key!=ESC);
   closegraph();
}
程序要求:1.由两个玩家分别下棋,当某一玩家五子相连,则赢。
2.界面要求:初始状态——显示棋盘,并显示两个玩家的操作键及初始玩家号;游戏进行状态——动态显示棋盘,
不同玩家的棋子用不同符号显示,屏幕上显示当前玩家号,结束时显示赢家号。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
java无忧网(http://www.javawyw.com),专业提供Java大作业,小作业,课程设计,毕业设计源码,答辩辅导,作业排错,bug修复,专业解答,远程部署运行项目等服务
本网站所有源码,保证能运行!
QQ:1399491757
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回顶部