(www.la home.co)
等 级:
#1楼 得分:0
回复于:2002-10-15 16:13:41
int main(void)
{ void huaqipan(int midx,int midy); void xiazi(int x,int y,int flag); void recovery(int x,int y); int move(int *px,int *py,int a[15][15],int flag); int judge(int *px,int *py,int a[15][15]); int *px=NULL,*py=NULL; int midx,midy,i,j,k=2,flag; int date[15][15]; char key= 'y ' int gdriver = DETECT, gmode, errorcode; initgraph(&am gdriver, &am gmode, ); errorcode = graphresult(); if (errorcode != grOk) { printf( Graphics error: %s\n , grapherrormsg(errorcode)); printf( Pre any key to halt: ); getch(); exit(1); } for(;key!= ' ' ) { cleardevice(); for(i=0;i 15;i++) /*初始化棋盘状态*/ { for(j=0;j 15;j++) { date[i][j]=k; } } midx=getmaxx()/2; midy=getmaxy()/2; px= py= huaqipan(*px,*py); /*画出棋盘*/ setcolor(RED); circle(*px,*py,radius); /*画出最初光标*/ for(i=2,j=0;i!=1;j++) { flag=j%2; /*当前使用者*/ move(px,py,date,flag); /*移动光标并确定落子*/ xiazi(*px,*py,flag); /*画出棋子*/ i=judge(px,py,date); /*进行判断,有人胜出(即i==1)跳出循环*/ } if(flag==0) outtextxy(0,10, Wi er is WHITE ); if(flag==1) outtextxy(0,10, Wi er is GREEN ); outtextxy(0,30, Replay: y/n? ); key=getch(); /*输入n时退出循环,输入非n字符则继续新的一盘游戏*/ } free(px); free(py); closegraph(); return 0;
(www.la home.co)
等 级:
#2楼 得分:0
回复于:2002-10-15 16:17:53
还只能两个人对挑,人机对挑的算法,我还不明白,还请高手指点。
(小耗子)
等 级:
#3楼 得分:0
回复于:2002-10-15 16:39:27
能写出两个人对挑的程序已经很不简单了
我以前也写过 不过每写完 机器的相对人对战么难一些
主要是下面么注意的要解决这个问题,我们引入‘今后几步预测法’,具体方法是这样的: 首先, 让电脑分析一个可能的点,如果在这儿下子将会形成对手不得不防守的棋型(例如:‘冲四’、‘活三’);那么下一步对手就会照您的思路下子来防守您,如此一来便完成了第一步的预测。这时再调用模块4对预测后的棋进行盘面分析,如果出现了‘四三’、‘双三’或‘双四’等制胜点,那么己方就可以获胜了(当然对黑棋而言‘双三’、‘双四’是禁手,另当别论);否则照同样的方法向下分析,就可预测出第二步、第三步……
等一等,要是盘面上没有对手必须防的棋型,哪该怎么办呢?进攻不成的话就得考虑防守了,将自己和对手调换一下位置,然后用上面的方法来预测对手的棋,这样既可以防住对手巧妙的攻击,又能侍机发动反击,何乐而不为呢!
但是必须告诉大家的是:预测法的运算量相当之大,据我的经验,用Pentium-100预测3步的走法平均需要15秒以上时间,所以建议预测量在5步以内。可别小瞧了这5步,有时它甚至会走出让您拍手叫绝的妙着呢!
(蓝boy)
等 级:
#4楼 得分:0
回复于:2002-10-15 16:39:56
我在tc下运行了下,怎么说找不到egavga.bgi????
(追梦人)
等 级:
#5楼 得分:0
回复于:2002-10-15 16:41:48
向你学习!!!
收藏ing
(另一个空间)
等 级:
#6楼 得分:0
回复于:2002-10-15 16:42:19
( inoza)
等 级:
#7楼 得分:0
回复于:2002-10-15 17:09:20
对楼主致敬!
(www.la home.co)
等 级:
#8楼 得分:0
回复于:2002-10-15 17:15:31
to: asvaboy1980(蓝boy) 我是原原本本COPY过来的,在我的机器上编译运行均没有问题,不过如果把可执行程序拷到非TC目录或者不含有EG***GA,BGI这个文件的时候也会出现同样的问题,有人跟我说过把EG***GA.BGI这个文件编译成OBJ文件就可以解决在非TC目录下不能运行的问题。可惜偶比较笨还不能领会他的意思,一直都搞不定,希望看到的高手能顺便详细地说说解决办法,谢谢:)
等 级:
#9楼 得分:0
回复于:2002-10-15 17:48:32
我做过,我的人机对战的机器智能和我的棋艺在同一水平线上。
主要思想:如果当前点为空,则考虑棋子下到当前点后的分数。然后根据分数多少来决定电脑到底下到哪里。
评论:
1、代码太乱
2、编程风格差
3、建议用面向对象的思想来实现。
4、可以建立一连表的数据结构来实现悔棋和存储的功能。
(仗剑天涯)
等 级:
#10楼 得分:0
回复于:2002-10-15 18:49:25
================================================================
CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!
★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。 ★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! ★ 支持在线检测程序升级情况,可及时获得程序更新的信息。
★★ 签名 ● 可以在您的每个帖子的后面自动加上一个自己设计的签名哟。
Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
(风之子)
等 级:
#11楼 得分:0
回复于:2002-10-15 19:01:52
(华山猛男刀)
等 级:
#12楼 得分:0
回复于:2002-10-15 19:07:23
学习。、、、、、、
(华仔)
等 级:
#13楼 得分:0
回复于:2002-10-15 19:17:50
对于EG***GA.BGI我以前也碰到过,分析后,我找到了解决办法
只要将TC目录下的EG***GA.BGI复制,将其和应用程序放在一个文件夹中就可以了
(www.la home.co)
等 级:
#14楼 得分:0
回复于:2002-10-15 19:36:04
我目前解决找不到EG***GA。BGI这个文件的解决方法也是跟楼上的一样。不过,感觉这样做实在太麻烦了,只是治标不治本。有那为高手知道解决方法啊。期待ing
(www.la home.co)
等 级:
#15楼 得分:0
回复于:2002-10-15 19:42:40
to:ccnuxjg() 很感谢前辈的指点
以后会注意这些方面的:)
(天行健)
等 级:
#16楼 得分:0
回复于:2002-10-15 20:08:10
解决EG***GA问题,跟我来:
1。EG***GA.BGI转化成EG***GA.OBJ文件。用命令 E:\TC\BGI BGIOBJ EG***GA.BGI 即可。EG***AG.OBJ文件将在当前目录中生成(BGIOBJ应该在TC文件夹中找到, 我的TC有一个BGI目录,BGI和BGIOBJ.bgi都在里面)
2。将EG***GA.OBJ和GRAPHICS。LIB进行连接。命令 E:\TC tlib lib\graphics.lib + EG***GA.OBJ
3。以后在程序中initgraph()函数调用前用registerbgidriver()进行登记,比如registerbgidriver(EG***GA_driver); 明白了吗?如有疑问尽可提出来。
(成为诗人,是我的梦想)
等 级:
#17楼 得分:0
回复于:2002-10-15 20:11:52
学习中
(一个梦)
等 级:
#18楼 得分:0
回复于:2002-10-15 20:12:14
我要学习!!!
(天行健)
等 级:
#19楼 得分:0
回复于:2002-10-16 14:56:45
设置填充类型的函数: setfillstyle(int style,int color);
第一个参数表示填充模式(值为0-12,12为自定义填充模式),比如用用背景色填充,单色填充,用 - 线填充,用 /// 线填充等;
第二个参数表示填充颜色(值为0-15);
它一般和下面这个函数一起用;
对任意封闭图形填充的函数: void far floodfill(int x,int y,int color);
x,y是封闭图形中任意一点,color是封闭图形的边框颜色.
注意:
a. 若(x,y)点位于封闭图形边界上,则不进行填充.
b. 若填充的不是封闭图形,则会填到别的地方,即溢出.
c. 若(x,y)在封闭图形外,将对封闭图形外填充.
d. 由参数color指出的颜色必须与封闭图形的轮廓线颜色一致,否则会填到别的地方去.
比如可将xiazi(int x,int y,int flag)改为:
void xiazi(int x,int y,int flag)
int c = getcolor();
if( flag == 0)
setcolor(WHITE);
setfillstyle(1,WHITE);
circle(x,y,radius);
floodfill(x,y,WHITE);
else if( flag == 1)
setcolor(GREEN);
setfillstyle(1,GREEN);
circle(x,y,radius);
floodfill(x,y,GREEN);
setcolor(c);
另外程序少了棋盘填满情况的判断.
(www.la home.co)
等 级:
#20楼 得分:0
回复于:2002-10-17 11:35:53
to:waYeah(僧)
很感谢你告诉我这两个函数的用法,并指出我的不足:)
今天我试了一下你所说的,如何将egavga.bgi编译成obj文件。
还是不行啊。我的bgiobj.exe和egavga.bgi文件都是在TC目录下
d:\turboc2 bgiobj egavga.bgi出现以下信息
unknow source filename 'egavga.bgi '.
please correct, or ecify full source filename and public name.
输入bgiobj获取帮助得到下面的信息
Examples: BGIOBJ GOTH BGIOBJ /F CGA BGIOBJ HERC.BGI HERCDRV _HERC_fdriver HERC_TEXT
于是我模仿第三个例子输入
BGIOBJ EG***GA.BGI EG***GADRV _HERC_fdriver EG***GA_TEXT
出现5363 bytes form 'egavga.bgi ' converted into 'egavgadr.obj
在TC目录下生成了EG***GADR.obj
对EG***GADR。OBJ进行链接的时候
tlib lib\graphics.lib + EG***GADR.OBJ
出现警告
warning: results are safe in file 'libtmpAA.AAE '
DOS-reported error:Permi ion denied
renaming 'LIB\GRAPHICS.LIB ' TO 'LIB\GRAPHICS.BAK '
我在TC目录下找到了LIBTMPAA.AAE,在LIB目录下也找到了GRAPHICS.BAK
弄到这里我就没辙了……
我觉得好奇怪怎么会这样子,ft~~~
(www.la home.co)
等 级:
#21楼 得分:0
回复于:2002-10-17 11:46:44
( inoza)
等 级:
#22楼 得分:0
回复于:2002-10-17 17:07:50
c:\program files\microsoft visual studio\myprojects\kobe1\kobe1.c (329) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.
是什么意思?!!
(天行健)
等 级:
#23楼 得分:10
回复于:2002-10-19 18:59:04
当对GRAPHICS.LIB文件进行修改时,系统会自动备份未修改前的GRAPHICS.LIB文件,保存为GRAPHICS.BAK。出现错误可能是你的文件已损坏。请留下你的e_mail,我把我的GRAPHICS.LIB文件发给你(大约93k)。
(www.la home.co)
等 级:
#24楼 得分:0
回复于:2002-10-22 17:08:34
wjh0823@163.com
谢啦:)
(半桶水)
等 级:
#25楼 得分:0
回复于:2002-10-22 20:35:36用C语言编写的五子棋游戏
用C语言编写的五子棋游戏
当前离线
600 主题
176 精华
725 威望
125 金币
11943 阅读权限
200 性别
男 来自
辽宁 在线时间
232 小时 注册时间
2009-6-14 最后登录
2011-7-26 帖子
600 主题
176 威望
125 金币
11943 来自
辽宁 在线时间
232 小时 最后登录
2011-7-26 跳转到
字体大小:
发表于 2009-9-9 11:18
用C语言编写的五子棋游戏
这个五子棋游戏是站长刚学C语言两个月时所写!!
C语言制作五子棋
五子棋游戏是一个深受人们喜爱的游戏,通常是人机对弈,本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连。按键盘上的方向键可以移动光标,回车键可以摆放棋子。
一、 设计目的
这个程序是对编程基本功的一个训练,将分支、循环、数组、函数综合应用,而不仅限于编制独立的小程序,通过游戏过程增加编程的兴趣,提高编程水平。编制该程序我对以下的知识点进行的巩固和掌握:1.数组元素为结构体的数组应用。2.全局变量应用。3.按键的处理。4.数组元素与蛇、食物的对应关系。5.图形方式等等。虽然该程序是一个普通而又简单的程序,但是对于一C语言初级阶段的学生来说,是一个很好的锻炼甚至可以说是一个很好的提高。
二、 设计思路
棋盘设计为19×19格,初始状态光标在棋盘的中央,白棋先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋)。当游戏一方胜利后显示胜利信息,提示信息利用汉字点阵输出。
从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表白棋,2代表黑棋。这样程序的主要工作是接收棋手按键操作,棋手1用Up、Down、Left、Right控制光标移动,回车键表示落子。棋手2用W、S、A、D控制光标移动,空格键表示落子。一旦接收到回车键或空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠落子。落子成功后,马上判断以该位置为中心的八个方向:上、下、左、右、左上、左下、右上、右下是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的信息。如果想退出游戏,可以按Esc键。
三、程序设计
1.定义全局变量
int game eed=5000;
int i,j,key;
struct Sor
int y;/*x,y表示当前光标的位置*/
int yes[N][N];/* 0表示无棋子,1表示白色棋子,2表示黑色棋子*/
int kao;/* 1表示白棋准备落子,2表示黑棋落子*/
int ok;/*1表示白棋胜出,2表示黑棋胜出*/
复制代码
2.Main()主函数
按照语法规则,首先定义使用到的常数、全局变量、函数原型说明。棋盘状态用数组yes[20][20],初值为0,表示空格。函数的实体比较简单,调用图形驱动、画棋盘、人人对弈等自定义函数,一旦游戏结束后,关闭图形驱动,程序结束。
3.drawqp()画棋盘函数
背景颜色设为黑色,从坐标(100,100)开始每隔20个单位用绿色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。画线函数line()的参数为线的起点和终点坐标,注意要计算正确。函数setfillstyle()可以设置填充模式和填充颜色,fillelli e(int x,int xradius,int yradius)以x和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,则画出的是圆,用它表示棋子。
4.win()判断是否胜出函数
本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息(如:红方获胜),否则继续落子。
5.Gameplay()双人对战函数
这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下:
(1) 按Esc键程序可以随时结束。
(2) 按上下左右光标键,则改变棋子移动的坐标值。
(3) 按回车键后判断:
1) 如落子的位置已经有棋则无效,继续按键。
2) 如落子位置是空格,可以将棋子落入格内,调用win()函数。
3) 如果棋子变化后,棋盘已下满了棋子,则游戏结束。显示平局信息。
(4) 重复上述步骤,直到游戏结束。
6.Xandy()显示光标纵横坐标函数
该函数的作用是在每次移动光标后,在屏幕左下角显示出光标的纵横坐标。
7.图形功能函数
以下函数原形都在graphics.h中。
(1)registerbgidriver():
(2)initgraph(int *driver, int *mode, char *path):用于初始化图形系统,并装入相应的图形驱动器。该函数把由driver所指向的图形驱动器代码装入内存。如果图形驱动器未装入内存,图形函数将不能操作。图形函数所用的屏显模式由mode所指向的整数值确定。最后,图形驱动器的路径是由path所指向的字符串给出。如果没有指定路径,就在当前工作路径上寻找。
(3)rectangle(int left,int top,int right,int bottom):函数rectangle()用当前画出由坐标left,top及right,bottom所定义的矩形。
(4)setcolor(int color):把当前画线颜色设置为color所指定的颜色。每个图形显示卡的有效颜色由setpalette()提供。
(5)closegraph():该函数使图形状态失效,并且释放用于保存图形驱动器和字体的系统内存。当你的程序既用到图形输出又用到非图形输出时,应该用此函数。该函数还把系统屏显模式返回到调用initgragh()前的状态。
通过编制该程序我对以下的知识点进行的巩固和掌握:
1.数组元素为结构体的数组应用。
2.全局变量应用。3.按键的处理。4.图形方式等等。虽然该程序是一个普通而又简单的程序,但是对于一C语言初级阶段的学生来说,是一个很好的锻炼甚至可以说是一个很好的提高。由于个人能力的限制该程序还有许多的缺陷,若要进一步的完善还需要对C语言更深一步的学习。
程序运行部分截图:
才可以下载或查看附件。没有帐号?
人生中的许多事情就像程序员在设计程序。于是,我爱上了程序,而网络为我提供了学习他人经验的一个桥梁,这是一个捷径,使我很快学会了很多知识和技巧。所以,我也想通过网络把我的一点经验献给那些需要它的人。这简直太奇妙了!!
当前离线
66 帖子
709 主题
46 精华
710 威望
6249 阅读权限
50 性别
男 来自
广东 在线时间
122 小时 注册时间
2009-6-29 最后登录
2010-6-14 帖子
709 主题
46 威望
6249 来自
广东 在线时间
122 小时 最后登录
2010-6-14 发表于 2009-9-9 11:52
两个月,不错不错,我相信等我两个月之时,我也能写一个出来
当前离线
10 帖子
2223 主题
131 精华
2246 威望
23 金币
193306 阅读权限
150 性别
女 在线时间
457 小时 注册时间
2009-6-15 最后登录
2011-3-5 帖子
2223 主题
131 威望
23 金币
193306 在线时间
457 小时 最后登录
2011-3-5 发表于 2009-9-18 14:29
站长就是站长啊……
看来学编程的确需要天赋啊。。。
当前离线
414 帖子
244 主题
23 精华
249 威望
932 阅读权限
30 性别
男 在线时间
30 小时 注册时间
2009-10-10 最后登录
2010-10-27 帖子
244 主题
23 威望
932 在线时间
30 小时 最后登录
2010-10-27 发表于 2009-10-28 13:38
人机对弈更难啊……
当前离线
529 帖子
452 主题
39 精华
453 威望
5642 阅读权限
30 性别
男 来自
上海 在线时间
56 小时 注册时间
2009-11-3 最后登录
2010-4-26 帖子
452 主题
39 威望
5642 来自
上海 在线时间
56 小时 最后登录
2010-4-26 发表于 2009-11-3 12:56
站长就是站长啊……
当前离线
557 帖子
41 主题
41 威望
311 阅读权限
10 在线时间
4 小时 注册时间
2009-11-7 最后登录
2010-12-5 帖子
41 主题
311 在线时间
4 小时 最后登录
2010-12-5 发表于 2009-11-7 14:27
哇哈哈,这个厉害,偷走了。。。嘿嘿。
当前离线
1404 帖子
262 阅读权限
10 性别
男 在线时间
1 小时 注册时间
2010-4-17 最后登录
2010-4-19 帖子
262 在线时间
1 小时 最后登录
2010-4-19 发表于 2010-4-17 11:36
vc里好像没有graphics.h啊,楼主是在tc里写的吧?
当前离线
3370 帖子
2 阅读权限
10 在线时间
0 小时 注册时间
2011-3-11 最后登录
2011-3-11 帖子
2 在线时间
0 小时 最后登录
2011-3-11 发表于 2011-3-11 21:34
支持成功者!
当前离线
3431 帖子
0 阅读权限
10 在线时间
0 小时 注册时间
2011-3-19 最后登录
2011-3-19 帖子
0 在线时间
0 小时 最后登录
2011-3-19 发表于 2011-3-19 18:56
支持成功者!
当前离线
3508 帖子
21 主题
21 威望
428 阅读权限
10 性别
男 来自
浙江金华 在线时间
4 小时 注册时间
2011-3-29 最后登录
2011-6-29 帖子
21 主题
428 来自
浙江金华 在线时间
4 小时 最后登录
2011-6-29 发表于 2011-3-29 16:19
这个厉害了
GMT+8, 2011-7-28 06:08,
Proce ed in 0.067442 second(s), 6 queries, Gzip enabled
Powered by
2001-2009信息提示
您的同一ip请求过于频繁,如果希望继续访问,请输入验证码:
Copyright 1998 – 2010 Tencent. All Rights Reserved.