Chinaunix首页 | 论坛 | 博客
  • 博客访问: 274983
  • 博文数量: 74
  • 博客积分: 1336
  • 博客等级: 中尉
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-02 09:33
文章分类

全部博文(74)

文章存档

2016年(6)

2015年(4)

2014年(20)

2013年(8)

2012年(16)

2010年(9)

2009年(11)

我的朋友

分类: C/C++

2016-11-13 16:08:44

#include
#include
#include
#include
#include
#include
#define up 'w'          //上 
#define down 's'        //下 
#define left 'a'        //左 
#define right 'd'       //右 
#define lz   'p'        //落子 
#define cls   'q'       //重新开始 
int player=1;//玩家 
int cx=21,cy=21;//当前的光标位置 
typedef struct stu//光标位置结构体 
{
int x,y;
}Weizhi;
Weizhi weizhi; 
int Q[20][20]={0};//记录玩家1当前位置已落子的情况 
int P[20][20]={0};//记录玩家2前位置已落子的情况 
int win1=0,win2=0;//玩家1和2的胜负情况,都0表示当前双方均未胜利 
void gotoxy(int x,int y)
{
COORD c;
c.X=2*x;
c.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);


}
void drawPain() //画棋盘 
{
int i,j;
system("cls");
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
printf("十");
}
printf("\n");
}
weizhi.x=0;
weizhi.y=0;
gotoxy(weizhi.x,weizhi.y);
}


void luozi()//玩家1落子 
{
    
if(Q[weizhi.x][weizhi.y]==0&&P[weizhi.x][weizhi.y]==0)
{
printf("●");
   player=2;
  Q[weizhi.x][weizhi.y]=1;


}

}
void cluozi()//玩家2落子 
{

if(Q[weizhi.x][weizhi.y]==0&&P[weizhi.x][weizhi.y]==0)
{

printf("○");
player=1;
P[weizhi.x][weizhi.y]=1;
}

}
void KeyPress(char press)
{
switch(press)
{
case up:    if(weizhi.y<=0){weizhi.y=19;} else weizhi.y--;        gotoxy(weizhi.x,weizhi.y);     break;
case down:  if(weizhi.y>=19){weizhi.x=0;} else weizhi.y++;       gotoxy(weizhi.x,weizhi.y);     break;
case left:  if(weizhi.x<=0){weizhi.x=19;} else  weizhi.x--;      gotoxy(weizhi.x,weizhi.y);     break;
case right: if(weizhi.x>=19){weizhi.x=0;} else weizhi.x++;      gotoxy(weizhi.x,weizhi.y);     break;
case lz:    if(1==player){luozi();}   else if(2==player){cluozi();}      break;
case cls:   drawPain(); player=1;  memset(Q,0,sizeof(char)*400); memset(P,0,sizeof(char)*400);   break;
   }
}
void checkWin()//检查胜利方 
{
int i,j;
for(i=0;i<20;i++)//遍历检查:行列,正斜边是否五子连成一线 
{
for(j=0;j<20;j++)
{
if(i+4<20&&j+4<20)
{
if(Q[i][j]==1&&Q[i+1][j]==1&&Q[i+2][j]==1&&Q[i+3][j]==1&&Q[i+4][j]==1)
{
win1=1;
}
else if(Q[i][j]==1&&Q[i][j+1]==1&&Q[i][j+2]==1&&Q[i][j+3]==1&&Q[i][j+4]==1)
{
win1=1;
}
else if(Q[i][j]==1&&Q[i+1][j+1]==1&&Q[i+2][j+2]==1&&Q[i+3][j+3]==1&&Q[i+4][j+4]==1)
{
win1=1;
   }
if(1==win1)
    {
    return;
    }
   if(P[i][j]==1&&P[i+1][j]==1&&P[i+2][j]==1&&P[i+3][j]==1&&P[i+4][j]==1)
{
win2=1;
}
else if(P[i][j]==1&&P[i][j+1]==1&&P[i][j+2]==1&&P[i][j+3]==1&&P[i][j+4]==1)
{
win2=1;
}
else if(P[i][j]==1&&P[i+1][j+1]==1&&P[i+2][j+2]==1&&P[i+3][j+3]==1&&P[i+4][j+4]==1)
{
win2=1;
   }
if(1==win2)
    {
    return;
    }
}
}
}
for(i=19;i>=0;i--)//检查反斜边 
{
for(j=0;j<20;j++)
  {
   if(i-4>=0&&j+4<200)
   {
    if(Q[i][j]==1&&Q[i-1][j+1]==1&&Q[i-2][j+2]==1&&Q[i-3][j+3]==1&&Q[i-4][j+4]==1)
    {
    win1=1;
    }
    if(1==win1)
    {
    return;
    }
    if(P[i][j]==1&&P[i-1][j+1]==1&&P[i-2][j+2]==1&&P[i-3][j+3]==1&&P[i-4][j+4]==1)
    {
    win2=1;
    }
    if(1==win2)
    {
    return;
    }
   }
  }
 
}
}


int main(void)
{
char press;
int winer=0;
    system("color 2f");
drawPain();
press=getch();
    while(1)
    {
    KeyPress(press);
        checkWin();
        if(1==win1)
        {
        gotoxy(5,20);
        printf("●方胜利!\n");
        break;
        //以下有bug 
        /*printf("是否要继续进行游戏! y or n\n");
press=getch();
if('y'==press) 
{
//将所有数据初始化为初始值 
player=1;
memset(P,0,sizeof(char)*400);
memset(Q,0,sizeof(char)*400);
win1=0;
win2=0;
cx=21;
cy=21;
drawPain();//重画地图 

}
else if('n'==press)
{
break;
}*/
        }
        if(1==win2)
        {
        gotoxy(5,20);
        printf("○方胜利!\n");
        printf("是否要继续进行游戏! y or n\n");
        break;
/*press=getch();
if('y'==press) 
{
player=1;
memset(P,0,sizeof(char)*400);
memset(P,0,sizeof(char)*400);
drawPain();
win2=0;
win1=0;
cx=21;
cy=21;

}
else if('n'==press)
{
break;
}*/
        }
  press=getch();
    }
    return 0;
}
阅读(757) | 评论(0) | 转发(0) |
0

上一篇:LPC1114开发板器件清单

下一篇:dl提取特征

给主人留下些什么吧!~~