用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中运行。。
- 用c语言来实现井字棋
- c语言来实现c++
- 用telnet来发邮件并用C语言实现
- Linux下用C语言来实现简单的进度条
- 使用栈来实现符号平衡----c语言实现
- linux用c语言来遍历目录
- 用C语言来分割字符串
- 用C语言来实现的类似C++函数的重载特性-----void*指针闲谈
- <Win32_15>用纯C语言来实现WP8中磁贴动态翻转的功能
- linux下用/proc/stat文件来计算cpu的利用率-c语言实现
- linux下用/proc/stat文件来计算cpu的利用率-c语言实现
- 怎么用c语言实现读取一个txt文件里的数据 要按行读出来
- c语言 2个整数的交换 用两个变量来实现
- 如何使用标准c语言来实现图像验证码
- [C语言]利用stdarg.h来实现可变参数列表
- F2812中用C语言来实现中断的说明
- C语言学习:通过数组来实现栈
- 链表的实现(C语言)__一步一步来
- 研究android系统架构层次
- 【STL源码剖析读书笔记】自己实现priority_queue之MyPriorityQueue
- 浅谈iOS面对对象之继承
- java文件读取全了解
- [实用技巧] 永久改键软件SharpKeys, 超级好用
- 用c语言来实现井字棋
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- SGU119 Magic Pairs
- 十二周——多态性——阅读项目(2)
- java线程中run和start方法的区别
- Internal Sorting: Natural Two-way Merge Sort: Sorting by Merging
- Hadoop学习笔记(五)---HDFS shell操作
- C# web实现文件下载
- Climbing Worm