用c语言来实现井字棋

来源:互联网 发布:淘宝积分查询 编辑:程序博客网 时间:2024/05/16 19:16

    这是我大一的课设的一个题目!

现在我把源代码show 出来!

井字棋有图形界面

/* Note:Your choice is C IDE */
#include <stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<bios.h>
#include<conio.h>/*头文件*/
#define UP 0x4800/*上移--方向键up*/
#define DOWN 0x5000/*下移--方向键down*/
#define LEFT 0x4b00/*左移--方向键left*/
#define RIGHT 0x4d00/*右移--方向键right*/
#define SPACE 0x3920/*落子--空格键*/
#define ESC 0x011b/*退出----结束键*/
#define X ((getx()-75)/50)+1 /*把接收到的x坐标转化成二维数组的行下标*/
#define Y  ((gety()-75)/50)+1 /*把接收到的y坐标转化成二维数组的列下标*/
#define N 4 /*由于数组的下标是由0开始的。为了方便计算。我就选用了4*4的二维数组*/
int a[N][N];/*二维数组定义成静态的*/


 void white() /*在当前位置画白棋*/
{
setcolor(7);
setfillstyle(1,7);
circle(getx(),gety(),20);/*获得光标的位置。并以光标所在为置画一个半径为20的园*/
floodfill(getx(),gety(),7);/*对所画的园的颜色的填充。这里选7,7代表的是白色*/
}
 
 void  blue() /*补棋盘的颜色*/
{
setcolor(BLUE);
setfillstyle(1,BLUE);
circle(getx(),gety(),20);
floodfill(getx(),gety(),BLUE);
}
 
 
void picture()
{  
    cleardevice();
     setbkcolor(BLUE);
   
     setfillstyle(1, 2); /*绿色以实填充*/
    setcolor(YELLOW);
 rectangle(50,50,200,200);
   floodfill(50, 50, 14);
   setcolor(12);
  setfillstyle(1, 2); /*设置填充方式*/
    setcolor(WHITE); /*设置白色作图*/
  ;
  line(50,100,200,100);
  line(50,150,200,150);
  line(100,50,100,200);
  line(150,50,150,200);
  line(50,50,200,50);
  moveto(75,75);
}
void pwan()

 if((a[1][1]==1&&a[1][2]==1&&a[1][3]==1)/*判断是否赢了*/ 
||(a[2][1]==1&&a[2][2]==1&&a[2][3]==1) 
||(a[3][1]==1&&a[3][2]==1&&a[3][3]==1) 
||(a[1][1]==1&&a[2][1]==1&&a[3][1]==1) 
||(a[1][2]==1&&a[2][2]==1&&a[3][2]==1) 
||(a[1][3]==1&&a[2][3]==1&&a[3][3]==1) 
||(a[1][1]==1&&a[2][2]==1&&a[3][3]==1) 
||(a[1][3]==1&&a[2][2]==1&&a[3][1]==1))
  
  
   outtextxy(300,300,"you win..");
 else 
   if(
   (a[1][1]==20&&a[1][2]==20&&a[1][3]==20)
||(a[2][1]==20&&a[2][2]==20&&a[2][3]==20) 
||(a[3][1]==20&&a[3][2]==20&&a[3][3]==20) 
||(a[1][1]==20&&a[2][1]==20&&a[3][1]==20) 
||(a[1][2]==20&&a[2][2]==20&&a[3][2]==20) 
||(a[1][3]==20&&a[2][3]==20&&a[3][3]==20) 
||(a[1][1]==20&&a[2][2]==20&&a[3][3]==20) 
||(a[1][3]==20&&a[2][2]==20&&a[3][1]==20)
)
 
 outtextxy(300,300,"you lost...");
 
 if(a[1][1]!=0&&a[1][2]!=0&&a[1][3]!=0&&a[2][1]!=0&&a[2][2]!=0&&a[2][3]!=0 
&&a[3][1]!=0&&a[3][2]!=0&&a[3][3]!=0 )
    outtextxy(300,300,"pingju...");
 
 
   
}


void drawline(int x,int y)
{  
  a[x][y]=20;
 setcolor(15);
 x=(x-1)*50+75;
 y=(y-1)*50+75;
 line(x+10,y+10,x-10,y-10);
 line(x-10,y+10,x+10,y-10);
 
 pwan();
 }
void computer()

 int i,j;
 
 
for(i=1;i<4;i++)/*横向判断*/ 
if(a[i][1]+a[i][2]+a[i][3]==40) 
for(j=1;j<4;j++) 
if(a[i][j]==0) 

  drawline(i,j); 
  return;
}
for(i=1;i<4;i++)/*横向判断*/ 
if(a[i][1]+a[i][2]+a[i][3]==2) 
for(j=1;j<4;j++) 
if(a[i][j]==0) 

 drawline(i,j); 
 return ; 

for(i=1;i<4;i++)/*竖向判断*/ 
if(a[1][i]+a[2][i]+a[3][i]==40) 

for(j=1;j<4;j++) 
if(a[j][i]==0) 

  drawline(j,i); 
  return; 


for(i=1;i<4;i++)/*竖向判断*/ 
if(a[1][i]+a[2][i]+a[3][i]==2) 

for(j=1;j<4;j++) 
if(a[j][i]==0) 

  drawline(j,i); 
return; 


 
if(a[1][1]+a[2][2]+a[3][3]==40)/*左上角到右下角判断*/ 

for(i=1;i<4;i++) 
if(a[i][i]==0) 

  drawline(i,i); 
return; 


else if(a[1][1]+a[2][2]+a[3][3]==2) 
for(i=1;i<4;i++) 
if(a[i][i]==0) 

  drawline(i,i); 
return; 
}
if(a[3][1]+a[2][2]+a[1][3]==40)/*右上角到左下角判断*/ 

for(i=1;i<4;i++) 
if(a[i][4-i]==0) 

 drawline(i,4-i); 
 return ; 


else if(a[3][1]+a[2][2]+a[1][3]==2) 
for(i=1;i<4;i++) 
if(a[i][4-i]==0) 

drawline(i,4-i); 
return ; 

for(i=1;i<4;i++)/*随便找到空位填上去*/ 
for(j=1;j<4;j++) 
if(a[i][j]==0) 

drawline(i,j); 
return;

 
}
void play()
{
 
switch(bioskey(0))
{   
  case ESC: {closegraph(); exit(0);}/*如果按键为ESC就退出游戏*/
  case SPACE:/*落子*/
   if(a[X][Y]==0) {a[X][Y]=1;white();pwan(); computer();play();}
     else play();
  case LEFT: /*向左移*/
      if(getx()==75) moveto(175,gety());else
      moverel(-50,0);white();
     if(a[X][Y]==1)white();
    else if(a[X][Y]==20)
    {delay(100);blue();drawline(X,Y);}
    else
        {delay(400);blue();} play ();
  case RIGHT: /*向右移*/
 if(getx()==175) moveto(75,gety()); else moverel(50,0);white();
  if(a[X][Y]==1)white();
    else if(a[X][Y]==20)
    {delay(100); blue();drawline(X,Y);}
    else{delay(400);blue();} play ();
  case UP: /*向上移*/
   if(gety()==75) moveto(getx(),175);else moverel(0,-50);white();
   if(a[X][Y]==1)white();
    else if(a[X][Y]==20)
    {delay(100); blue();drawline(X,Y);}
    else
        {delay(400);blue();}play ();
  case DOWN: /*向下移*/
    if(gety()==175) moveto(getx(),75);else moverel(0,50);white();
   if(a[X][Y]==1)white();
    else if(a[X][Y]==20)
    {delay(100);blue();drawline(X,Y);}
    else{delay(400);blue();}  play();
  default: computer();                         
}
}
void main()
{   int j,k;
   int gdriver,gmode;
   detectgraph(&gdriver,&gmode);
   initgraph(&gdriver,&gmode,"C:\\JMSOFT\\DRV");
   picture();
   
 for(k=1;k<4;k++)
 for(j=1;j<4;j++)
 a[k][j]=0; 
   while(1)
   { 
    play();  
   }   
}
在tc中运行。。



0 0