前端围棋源码
‘壹’ 如何制作围棋动态棋谱
1、先到学棋网上注册一个用户,请用一个真实的邮箱注册。因为上传棋谱成功后,会有一封邮件发到您的注册邮箱;
2、然后上传棋谱。如果是在Tom、弈城、新浪上下棋,下完后的棋谱保存路径分别如下图所示:
7、春唯OK,大功告成!
‘贰’ C/C++、VC、Delphi、java、LISP、Perl语言
一、 跨平台特性
VB:无 ★
PB:WINDOWS家族, Solaris,Macintosh ★★★
C++ Builder/Dephi:WINDOWS家族,Linux ★★★
VC:无 ★
JAVA:所有能够运行JAVA虚拟机的操作系统 ★★★★
二、组件技术支持
VB:COM,ActiveX ★★★
PB:COM,JavaBean,Jaguar,UserObject使用:CORBA+Acti veX ★★★
C++ Builder/Dephi:COM, ActiveX CORBA(本身自带CORBA中间件VisiBroker,
有丰富向导) ★★★★★
VC:COM,ActiveX,CORBA(没有任何IDE支持,是所有C编译器的功能,
需要CORBA中间件支持) ★★★
JAVA:JavaBean,CORBA;ActiveX ★★★★
三、数据库支持级别
数据访问对象:
VB:DAO,ADO,RDO功能相仿; ★
PB:Transaction,DwControl,可绑定任何SQL语句和存储过程,数据访问
具有无与比拟的灵活性 ★★★★
C++ Builder/Dephi:具有包括DataSource,Table,Query,Midas,ADO在内
的二十多个组件和类完成数据访问 ★★★
VC:同VB,但有不少类库可供使用,但极不方便,开发效率很低 ★★
JAVA:JAVA JDBC API,不同的IDE具有不同的组件 ★★
数据表现对象:
VB:DBGriD,与数据库相关的数据表现控件只有此一种,只能表现简单表格
数据,表现手段单一 ★
PB:DataWindow对象(功能异常强大,其资源描述语句构成类似HTML的
另外一种语言,可在其中插入任何对象,具有包括DBGrid在内的数百种
数据表现方法),只此一项功能就注定了PB在数据库的功能从诞生的那
一天起就远远超过了某些开发工具今天的水平 ★★★★★
C++ Builder/Dephi:具有包括DBGrid,DBNavigator,DBEdit,
DBLookupListBox在内的15个数据感知组件,DecisionCube,
DecisionQuery在内的6个数据仓库组件和包括QRChart, QRExpr
在内的20多个报表组建,可灵活表现数据 ★★★
VC:同数据访问对象 ★
JAVA:不同的IDE具有不同的组件,比较着名的有Jbuilder,PowerJ,
VisualAge for Java ★★
语句执行方式:
VB:将一句SQL串绑定到一个命令对象中,结果返回到ResultSet对象
中自行拆取 ★
PB:是一种真正的4GL语言,可随意直接嵌套SQL语句返回值被赋值到
语句的变量中,支持语句级游标,存储过程和数据库函数,是一种类
似SQLJ的规范 ★★★★★
C++ Builder/Dephi:使用数据库组件或类完成SQL语句串的执行和提交 ★★
VC:同数据访问对象 ★
JAVA:SQLJ,JAVA JDBC API ★★★★
四、系统底层开发支持
VB:调用API需申明,调用不方便,不能进行DDK编程,不可深入Ring0编程,
不可嵌套汇编 ★
PB:调用API需申明,调用不方便,不能进行DDK编程,不可深入Ring0编程,
不可嵌套汇编 ★
C++ Builder/Dephi:直接调用API,可进行DDK编程,可深入Ring0编程,
可嵌套汇编 ★★★★★/★★
VC:直接调用API,可进行DDK编程,可深入Ring0编程,可嵌套汇编 ★★★★★
JAVA:推出了JINI规范但不能对不支持JINI的设备编程,眼下并不实用 ★
五、多媒体及图形图像开发支持
VB:可进行Direct Api编程;调用OpenGL很不方便;自带少量图形图像处理
控件,使用方便但功能一般;支持图像文件类型较少 ★★
PB:可进行Direct Api编程;调用OpenGL很不方便;图形图像处理不方便
但可调用API完成图形图像操作,也可借助控件开发;支持图像文件类型很多 ★
C++ Builder/Dephi:可进行Direct Api编程;调用OpenGL比较方便;
自带丰富的图形图像处理组件及类,使用很方便且功能强大;支持图像
文件类型一般 ★★★★★
VC:可进行Direct Api编程;调用OpenGL比较方便;自带丰富的图形图像
处理类,使用不方便但功能强大;支持图像文件类型较少 ★★★★
JAVA:很难调用Direct Api和OpenGL;自带相当丰富的图形图像处理组
件及类,使用不方便但功能强大;支持图像文件类型一般 ★★★★
六、网络或Web开发支持
VB:Asp,VBScript,具有编写DHTML的简单IDE,编写静态页面非常方便;
用于网络通讯的支持一般 ★★
PB:DynaSript, Web.PB;提供了较多动态生成Web页面的用户对象和服务
以及系统对象,非常适合编写服务端动态Web应用,有利于商业逻辑的封装;
用于网络通讯的支持不足;静态页面定制支持有限 ★
C++ Builder/Dephi:ISAPI,WININET API等各类网络或互联网API可自由
而方便的调用;提供了Server Socket,ClientSocket等三十余个组件及类,
用来处理网络通讯控制,流处理,Mail,Email,FTP,HTTP等应用协议处理以
及生成动态页面和商业逻辑的封装;功能强大,使用方便 ★★★★★
VC:SAPI,WININET API等各类网络或互联网API可自由而方便的调用;
提供CAsyncSocket等数量众多的类;功能强大但使用不太方便 ★★★
JAVA:不可直接调用API但内置非常多的网络及互联网功能;可利用
Servlet API,Java Bean API,以及JSP等协同开发功能强大的Web
应用;功能强大,对于某些IDE使用不太方便 ★★★★★
七、开发模式
VB:控件开发模式(OCX) ★★
PB:组件开发模式(User Object) ★★
C++ Builder/Dephi:源代码组件开发模式(VCL) ★★★★★
VC:应用程序框架开发模式(MFC) ★
JAVA:框架开发模式(JDK下)+组件开发模式(IDE下) ★★★
八、面向对象特性
VB:差 ★
PB:较好 ★★★
C++ Builder/Dephi:很好 ★★★★
VC:一般 ★★
JAVA:非常好 ★★★★★
九、开发效率
VB:较高 ★★★
PB:很高 ★★★★★
C++ Builder/Dephi:高 ★★★★
VC:低 ★
JAVA:高 ★★★★
十、代码执行效率
VB:一般 ★★
PB:较高 ★★★
C++ Builder/Dephi:很高 ★★★★★
VC:很高 ★★★★★
JAVA:低 ★
十一、帮助系统
VB:很好 ★★★★★
PB:较好 ★★★
C++ Builder/Dephi:差 ★
VC:好 ★★★★
JAVA:较好 ★★★
十二、易学程度
VB:非常好 ★★★★★
PB:好 ★★★
C++ Builder/Dephi:好 ★★★
VC:不好 ★
JAVA:不好 ★
十三、使用人数
VB:很多 ★★★★★
PB:较多 ★★★
C++ Builder/Dephi:较多 ★★★
VC:多 ★★★★
JAVA:不多 ★
十四、厂商财力
VB:非常强大 ★★★★★
PB:比较强大 ★★★
C++ Builder/Dephi:一般 ★★
VC:非常强大 ★★★★★
JAVA:强大 ★★★★
十五、发展潜力
VB:差 ★
PB:一般 ★★
C++ Builder/Dephi:一般 ★★
VC:好 ★★★
JAVA:非常好 ★★★★★
十六、基础语言广泛性
VB:很好 ★★★★
PB:一般 ★★
C++ Builder/Dephi:很好/差 ★★★★/★
VC:很好 ★★★★
JAVA:很好 ★★★★
结论:
VB:是新人开发与系统无关的综合应用程序的首选;容易使用和厂商财力很强
是其仅有的两点优势
PB:是开发大型MIS及各类数据库跨平台应用的首选;从数据库前端工具来讲甚至远远超过了Oracle的Develop系列等专门的工具;从通用语言角度来讲功能也与VB等不相上下;多媒体和网络功能与其他工具相比较弱
C++ Builder/Dephi:是唯一一套能够同时适用于开发数据库应用、网络及Web应用、分布式应用、可重用组件、系统软件、驱动程序、多媒体及游戏等所有软件的高效率开发环境;VCL源码基于Object Pascal是C++ Builder 唯一的缺憾,基础语言不够通用和开发系统软件功能不足是Dephi仅有的两点不足
VC:从功能上讲除了跨平台应用外什么都可开发;从开发效率角度讲只局限于开发windows系统应用、可重用组件及驱动程序
JAVA:适用于开发除了系统软件、驱动程序、高性能实时系统、大规模图像
处理以外所有的应用
综合评价:
VB:46
PB:53
C++ Builder/Dephi:67/61
VC:55
JAVA:59
‘叁’ 棋牌源码可以破解是真是假
假的。根据查询相关公开信息显示,网上还有许多骗子贩卖棋牌源码破解方法,下载后其实没有任何功能,而且还有盗号、木马的风险。棋牌是棋类和牌类娱乐项目让凯慎的总称,包括中国坦敬象棋、围棋、国际象棋、蒙古象棋孙兆、五子棋、跳棋、国际跳棋(已列入首届世界智力运动会项目)、军棋、桥牌、扑克、麻将等等诸多传统或新兴娱乐项目,也是一种传统文化。
‘肆’ 世界ai围棋大赛用的ai是用服务器跑吗
原来棋手正通过这些电子产品与外界同伙沟通,试图利用AI作弊。其衣扣上的微型相机实时拍摄棋局信息,负责接收的同伙利用AI技术分析棋盘局势,并将反馈结果传递到棋手的无线耳机中。
据了解,棋手所使用的AI技术正是由比利时程序员Gian-Carlo Pascutto(GCP)开发的AI项目Leela Zero,它是围棋领域为数不多的开源项目之一,所有人在Github上都可以下载使用。
由于裁判发现及时,棋手及同伙的作弊行为并未成功。不过,韩国棋院认为二人行为影响恶劣,触犯了“业务妨碍罪”,交由警察处理后,还委托律师拟定起诉书,对二人提起了刑事诉讼。
近日,韩国东部地方法院作出最终判决:嫌疑人A以职业定段为目的,与同伙B经过周密计划,利用智能技术违规比赛规则,严重破坏了比赛的公平、公正,性质非常恶劣。经认定,判处嫌疑人A一年有期徒刑,其同伙B一年有期徒刑,缓期一年执行,并提供120小时社会服务。”
至此,这场令人不齿的作弊事件算是以应有的惩罚收尾。不过,在事件的背后,有网友感叹,现在随便一个AI都可以战胜职业选手了吗?
还有网友调侃道,人工智能已经开始奴役人类了!
谈到AI在围棋中击败人类,大部分人可能首先想到的都是弊亏谷歌出品的AlphaGo。
2016年,AlphaGo以4:1战胜世界顶级职业选手李世石
2017年,AlphaGo Master再次以3:0战胜中国围棋甲级联赛主将柯洁
事实上,在此之后,AI在围棋领域的技术研发从未间断,经过四年的发展,能够战胜人类世界冠军水平的AI,也已经远不止AlphaGo一个。
作弊工具Leela Zero,战绩颇丰
熟悉围棋的朋友可能了解,Leela Zero 并不是一个名不见经传的AI棋手。它曾在第32、38、42届KGS计算机围棋大赛多次夺冠,在2008年计算机奥林匹克赛上获得九路围棋银牌和十九路围棋铜牌。
Leela Zero是GCP根据谷歌最强开源项目Alpha Zero扩展而来。如同Alpha Zero的发展路径,它不借助任何人类知识,完全从零开始训练。同时,租乎神它采用分布式计算,通过他人电脑生成的自对弈棋谱传送到服务器上进行训练,以此借助全球志愿者的力量为Leela Zero项顷蠢目提供算力支持。
据了解,Leela Zero的棋力正是通过神经网络权重的不断更迭而提升的(权重:表征神经网络内部联系的一系列参数)。当服务器对棋谱进行训练后,会产生新的网络权重,新的权重会与之前的最强权重对局,用以检验棋力,如果它在400局中胜率超过55%就会被更新为当前的最强权重。
现在每天有近600人为Leela Zero提供训练棋谱,在最近半年时间内,Leela Zero已经自我对弈700万局,经历128次权重更迭。
另外,Leela-Zero凭借出色的棋力已经成为了人类最佳围棋陪练师。它非常规性的打法、出其不意的布局,常常能够带给人类突破性的启发。因此很多围棋爱好者喜欢通过与它博弈或者复盘训练来提升自己的棋力。
一位微博网友还分享了他看Leela-Zero自战局的感受,特别赏心悦目。
中国棋士柯洁也发文表示:Leela Zero训练厉害了,我是不是也要攒钱买一台超级计算机来跑AI,现在学编程还来得及吗?
这款Leela Zero项目从2017年就在Github开源了,目前已经收割了4.1k星标。Github开源地址奉上,链接内含详细下载安装流程,按提示操作完成后,就可以与AI棋手在线博弈了。
AI碾压人类,轻轻松松
如柯洁所说现在国内外的AI棋手已经非常之多,而且能够打败世界级职业选手的也不再少数。如国内经典棋手腾讯绝艺。
在最近的2019年,绝艺第四次夺得了“世界智能围棋公开赛冠军”。它是腾讯AI Lab自研的一款围棋AI。从2016年发布首个版本到现在,已经在各大赛事中,先后战胜过柯洁,古力,朴廷桓等一百多位职业棋手。
不过,值得一提的是,这位AI围棋常胜将军却在2018年的世界人工智能围棋大赛中,败给了自家兄弟“PhoenixGo”。
PhoenixGo,俗称“金毛”(因比赛时的头像而得名),是微信翻译团队研发人工智能围棋程序。在这场世界级AI围棋大赛中,PhoenixGo一举夺冠,战胜了来自中、日、韩、欧美等国家和地区的一流AI围棋高手。如LeelaZero、TSGo、DolBaram(石子旋风)、Golois,HEROZ Kishi、Baki等。(Github开源地址)
说到国内比较出色的AI棋手,还有一位不得不提,它就是“星阵围棋”。在2018年,“贝瑞基因杯”世界人工智能围棋大赛人机大战中,星阵围棋执黑145手战胜柯洁,之后,在“让先三十番棋”挑战赛中,轮番对战职业选手时越、江维杰、崔哲瀚、元晟溱、周俊勋等世界冠军,最终以40:1的战绩夺冠,胜率达到97.6%。
更重要的是,星阵围棋是一款纯国产AI。其他AI棋手大部分都是师从谷歌论文,星阵是独创了自己的研发程序,而且它的对战策略也与谷歌明显不同。
谷歌算法更偏向胜率,为保持大局经常会选择暂时退让,而星阵的策略是强势进攻,把人类按在地上摩擦,能前进绝不退让。
据了解,星际围棋的前身是清华大学的“神算子”,后经过深客科技完成了后续的技术升级。该公司董事长金涬博士,在大数据、深度学习、人工智能领域深耕多年,是人工智能在围棋产业应用的重要推动者。
历数国外的围棋AI,除了谷歌的Alpha系列外,最出色的可能就是Facebook出品的ELF OpenGo了。这款AI围棋项目也于2018年在Github开源了。
研究团队表示,此次开放源代码是希望激励相关爱好者思考这项技术新的应用和研究方向。
在战绩方面,ELF OpenGo曾与Leela Zero在一场比赛中交手,最终以200:0的战绩获胜。此外,它还在与世界级职业选手的对战赛中,创造了14胜0负的记录。据官方介绍,在比赛中 OpenGo 使用单块 GPU 每步 50 秒的搜索时间(每步搜索 8 万个局面),而人类棋手并没有限制下棋思考的时间。
从围棋转战RTS
看到这里,AI在围棋界碾压人类顶级选手已经成为一个非常轻松的事儿。不过,AI研发的目的并不在此,围棋因其游戏规则和策略的复杂性被研究人员视为AI训练的最佳试验田,一方面,AI通过与人类的博弈对抗,可以快速提升其深度学习和思考能力。另一方面,其综合大数据而获得作战布局,也可以为人类带来更多的启发性思考。可以说二者在相互博弈同共同成长。
此外,围棋的复杂性已经不能满足AI的需求了。近些年,AI的训练场景已经逐步从围棋、德州扑克转向了更为复杂的RTS即时策略性游戏。作为经典RTS游戏,《星际争霸》因非完全信息、作战空间复杂、毫秒级决策等特点,而成为众多团队的研发目标。
目前,以谷歌为首的人工智能公司在该领域探索也取得了突破性进展。 去年10月,谷歌发表最新论文登上《Nature》杂志,论文指出其研发的AlphaStar在排行榜单上超越了 99.8%的活跃玩家,而且最高达到了星际争霸 2 人类对战天梯的顶级水平,并给出了对战影像资料。
此外,国内一家人工智能公司启元世界异军突起,其研发“星际AI”在最近的挑战赛中以2:0战胜了世界顶级职业选手。该研发团队表示,公司自成立之初便围绕《星际争霸》开展星际AI的研发工作,其目的一是在游戏行业,为玩家们提供更好的游戏体验,二是是通过AI智能体的训练,敲开通向通用人工智能(AGI)的大门。
‘伍’ 求五子棋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[i][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[i][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[i][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[i][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();
}
‘陆’ 如何用C语言绘出一个围棋盘
--
以怎么不用 MS VC++6 ??
编C语言一般都用啊
还有\xCD是C语言
Ascii代码 表示一个图形
用循环语句啊!
等我一下 晚上写出来 贴上哦
晚上10:00 上完课回来
呵呵 分给不给 随便 你的问题让我熟练了许多
分不重要了
我终于写出来了
调试了30分钟啊!
纯粹的循环 + 判断
-- 我就这点水平了 算法可能不好
如果有更好的告诉我 上QQ 或发网络消息给我
网络的显示有问题 最好
用源代码格式化工具格式化一下 网络有搜
#include <stdio.h>
void main()
{
int n,m,x,y,temp,j=0,i=0 ;
printf("输入棋盘的横格数,竖格数:\n");
scanf("%d,%d",&x,&y);
printf("%d,%d\n",x,y);
n=2*x+1 ;
m=2*y+1 ;
printf("%d,%d\n",n,m);
while(j<m)
{
j++;
temp=j%2 ;
i=0 ;
if(j==1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("\xC9");
continue ;
}
if(n==i)
{
printf("\xBB\n");
continue ;
}
if(i%2!=0)
{
printf("\xCB");
continue ;
}
if(i%2==0)
{
printf("\xCD\xCD\xCD");
continue ;
}
}
continue ;
}
if(m==j)
{
while(i<n)
{
i++;
if(i==1)
{
printf("\xC8");
continue ;
}
if(n==i)
{
printf("\xBC\n");
continue ;
}
if(i%2!=0)
{
printf("\xCA");
continue ;
}
if(i%2==0)
{
printf("\xCD\xCD\xCD");
continue ;
}
}
continue ;
}
if(temp==0)
{
while(i<n)
{
i++;
if(i%2!=0)
{
printf("\xBA");
if(n==i)printf("\n");
continue ;
}
if(i%2==0)
{
printf(" ");
continue ;
}
}
continue ;
}
if(temp!=0&&j!=1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("\xCC");
continue ;
}
if(n==i)
{
printf("\xB9\n");
continue ;
}
if(i%2!=0)
{
printf("\xCE");
continue ;
}
if(i%2==0)
{
printf("\xCD\xCD\xCD");
continue ;
}
}
continue ;
}
}
}
100%编译通过
可以画出任意大小的棋盘
如 5*3 5*5
只要你的屏幕能够显示
以上是用图像库画的棋盘
下面是用 __ 和 |
画的棋盘 其实很简单 替换一下就可以了
#include <stdio.h>
void main()
{
int n,m,x,y,temp,j=0,i=0 ;
printf("输入棋盘的横格数,竖格数:\n");
scanf("%d,%d",&x,&y);
printf("%d,%d\n",x,y);
n=2*x+1 ;
m=2*y+1 ;
printf("%d,%d\n",n,m);
while(j<m)
{
j++;
temp=j%2 ;
i=0 ;
if(j==1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("__");
continue ;
}
if(n==i)
{
printf("__\n");
continue ;
}
if(i%2!=0)
{
printf("__");
continue ;
}
if(i%2==0)
{
printf("__");
continue ;
}
}
continue ;
}
if(m==j)
{
while(i<n)
{
i++;
if(i==1)
{
printf("__");
continue ;
}
if(n==i)
{
printf("__\n");
continue ;
}
if(i%2!=0)
{
printf("__");
continue ;
}
if(i%2==0)
{
printf("__");
continue ;
}
}
continue ;
}
if(temp==0)
{
while(i<n)
{
i++;
if(i%2!=0)
{
printf("|");
if(n==i)printf("\n");
continue ;
}
if(i%2==0)
{
printf(" ");
continue ;
}
}
continue ;
}
if(temp!=0&&j!=1)
{
while(i<n)
{
i++;
if(i==1)
{
printf("__");
continue ;
}
if(n==i)
{
printf("__\n");
continue ;
}
if(i%2!=0)
{
printf("__");
continue ;
}
if(i%2==0)
{
printf("__");
continue ;
}
}
continue ;
}
}
}
‘柒’ 求围棋的VB源代码~
来~加 我 的QQ405557154 我做了一个,还有一同学做的,还有一是网上的朋友做的呵呵
Private Sub Timer1_Timer()
Dim ms As Boolean
Dim Info, temp As String
Dim p, p1, p2, i As Integer
Dim Ch
' Begin of Time Show Process
If ModemState <> LOGIN And SocketState <> CONNECTED Then
'it is not a multiusers game
Exit Sub
Else
If (S_R = 1) And (TURN = BLACKP) Then
Black_Time = Black_Time + Time - Start_Time
TimeB.Caption = CDate(Black_Time / 200)
Else
If (S_R = 1) And (TURN = WHITEP) Then
White_Time = White_Time + Time - Start_Time
TimeW.Caption = CDate(White_Time / 200)
Else
If (S_R = 0) And (TURN = WHITEP) Then
Black_Time = Black_Time + Time - Start_Time
TimeB.Caption = CDate(Black_Time / 200)
Else
If (S_R = 0) And (TURN = BLACKP) Then
White_Time = White_Time + Time - Start_Time
TimeW.Caption = CDate(White_Time / 200)
End If
End If
End If
End If
End If
'End If
' End of Time Show Process
'Begin of winsockt process
If SocketState = CONNECTED And Begin_Flag = 1 Then
ms = Net.Message_Exist
If ms = False Then
Exit Sub
End If
Info = Net.WaitForValue(Chr$(26), 5)
If g_ErrorCode = 1 Then
'Some error such as Timeout occured
Exit Sub
End If
p1 = InStr(Info, "B")
p2 = InStr(Info, "E|;")
If p1 = 0 Or p2 = 0 Then
Exit Sub
End If
temp = Mid$(Info, p1 + 1, p2 - p1 - 1)
ParseLine (temp)
Msg(Msg_No).No = CInt(ParseArray(1))
Msg(Msg_No).Color = CInt(ParseArray(2))
If IsNumeric(ParseArray(3)) Then
Msg(Msg_No).X = CInt(ParseArray(3))
Msg(Msg_No).Y = CInt(ParseArray(4))
Else
Msg(Msg_No).X = ParseArray(3)
Msg(Msg_No).Y = ParseArray(4)
End If
If Msg(Msg_No).Color = GIVEUP Then
Beep
MsgBox ("对方已经认输了")
Net.Winsock1.SendData ("R_O" + Chr$(26))
Pause 3
Call Begin_Click
Exit Sub
End If
If Side = BLACKP Then
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, WHITEP)
Record(Step).Color = WHITEP
step_show.Cls
step_show.Print Step
TURN = BLACKP
Else
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, BLACKP)
Record(Step).Color = BLACKP
step_show.Cls
step_show.Print Step
TURN = WHITEP
End If
Record(Step).X = Msg(Msg_No).X
Record(Step).Y = Msg(Msg_No).Y
Step = Step + 1
S_R = 1
R_R = 0
p = Count_All_Gas
If (Msg(Msg_No).X > 0 And Msg(Msg_No).Y > 0 _
And Msg(Msg_No).X < 20 And Msg(Msg_No).Y < 20) Then
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = True
Refresh_Board
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = False
End If
Msg_No = Msg_No + 1
Pause 1
Net.Winsock1.SendData ("R_O" + Chr$(26))
Exit Sub
End If
'End of process of winsocket
'Begin of modem process
If ModemState <> LOGIN Or R_R <> 1 Then
'It isn't a Inter_Modem Game
Exit Sub
End If
ms = Modem_F.Exist_Msg
If ms = False Then
'IO Port don't have any message
Exit Sub
End If
Info = Modem_F.WaitForValue(Chr$(26), 5)
'Wait a playing message
If g_ErrorCode = 1 Then
'Some error such as Timeout occured
Exit Sub
End If
p1 = InStr(Info, "B")
p2 = InStr(Info, "E|;")
If p1 = 0 Or p2 = 0 Then
Exit Sub
End If
temp = Mid$(Info, p1 + 1, p2 - p1 - 1)
ParseLine (temp)
Msg(Msg_No).No = CInt(ParseArray(1))
Msg(Msg_No).Color = CInt(ParseArray(2))
If IsNumeric(ParseArray(3)) Then
Msg(Msg_No).X = CInt(ParseArray(3))
Msg(Msg_No).Y = CInt(ParseArray(4))
Else
Msg(Msg_No).X = ParseArray(3)
Msg(Msg_No).Y = ParseArray(4)
End If
Modem_F.Comm1.InBufferCount = 0
'Clear Buffer
If Msg(Msg_No).Color = LOGOUT Then
Beep
MsgBox ("对方已经退出了")
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Cls
Step = 0
Start_Time = Time
Black_Time = 0
White_Time = 0
Exit Sub
End If
If Msg(Msg_No).Color = FINISHED Then
Beep
Ch = MsgBox("对方要求结束比赛,可以吗?", vbYesNo)
Modem_F.Comm1.InBufferCount = 0
If Ch = 6 Then
Modem_F.Comm1.Output = "YESR_O" + Chr$(26)
Else
Modem_F.Comm1.Output = "NOR_O" + Chr$(26)
Exit Sub
End If
PlayState = FINISHED
Count_Area.Enabled = True
End If
If Msg(Msg_No).Color = GIVEUP Then
Beep
MsgBox ("对方已经认输了")
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Call Begin_Click
Exit Sub
End If
If Msg(Msg_No).Color = TALK Then
Beep
MsgBox (Modem_F.His_Name.Text & "说: " & Msg(Msg_No).X)
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Exit Sub
End If
If Msg(Msg_No).Color = UNDO Then
Step = Step - 1
Beep
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
Draw_Board
Ini_Board
For i = 1 To Step - 1
Board(Record(i).X, Record(i).Y).Current = False
p = Draw_Point(Record(i).X, Record(i).Y, Record(i).Color)
step_show.Cls
step_show.Print Step
p = Count_All_Gas
Next i
Board(Record(Step - 1).X, Record(Step - 1).Y).Current = True
Refresh_Board
Board(Record(Step - 1).X, Record(Step - 1).Y).Current = False
S_R = 1
R_R = 0
TURN = Side
Exit Sub
End If
Modem_F.Comm1.InBufferCount = 0
Modem_F.Comm1.Output = "R_O" + Chr$(26)
If Side = BLACKP Then
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, WHITEP)
Record(Step).Color = WHITEP
step_show.Cls
step_show.Print Step
Else
p = Draw_Point(Msg(Msg_No).X, Msg(Msg_No).Y, BLACKP)
Record(Step).Color = BLACKP
step_show.Cls
step_show.Print Step
End If
Record(Step).X = Msg(Msg_No).X
Record(Step).Y = Msg(Msg_No).Y
Step = Step + 1
S_R = 1
R_R = 0
p = Count_All_Gas
If (Msg(Msg_No).X > 0 And Msg(Msg_No).Y > 0 _
And Msg(Msg_No).X < 20 And Msg(Msg_No).Y < 20) Then
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = True
Refresh_Board
Board(Msg(Msg_No).X, Msg(Msg_No).Y).Current = False
End If
Msg_No = Msg_No + 1
End Sub
Private Sub Timer2_Timer()
ShowS.Cls
ShowS.Print " :-):-):-):-):-) " + Show_String(C1) + " (:-(:-(:-(:-(:-"
C1 = C1 + 1
If C1 = 10 Then
C1 = 0
End If
Game_Time.Cls
Game_Time.Print " 现在时间: " & Time
End Sub
Private Sub Set_Hand(h As Integer)
'设置让子(1-9)
Dim p As Integer
If h <= 1 Then
'Not a Handicap game
Exit Sub
End If
部分代码。。
‘捌’ 围棋java源代码
就给你一个吧,只不过没有添加棋子,盯宏宽你自己搞吧。import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class ChessPad extends Panel implements MouseListener,ActionListener
{int x=-1,y=-1,棋子颜色=1;
Button button=new Button("重新开局");
TextField text_1=new TextField("请绝举黑棋下子"),
text_2=new TextField();
ChessPad()
{setSize(440,440);
setLayout(null);setBackground(Color.pink);
addMouseListener(this);add(button);button.setBounds(10,5,60,26);
button.addActionListener(this);
add(text_1);text_1.setBounds(90,5,90,24);
add(text_2);text_2.setBounds(290,5,90,24);
text_1.setEditable(false);text_2.setEditable(false);
}
public void paint(Graphics g)
{for(int i=40;i<凯亮=380;i+=20)
{g.drawLine(40,i,400,i);
}
g.drawLine(40,400,400,400);
for(int j=40;j<=380;j+=20)
{g.drawLine(j,40,j,400);
}
g.drawLine(400,40,400,400);
g.fillOval(97,97,6,6);g.fillOval(337,97,6,6);
g.fillOval(97,337,6,6);g.fillOval(337,337,6,6);
g.fillOval(217,217,6,6);
}
public void mousePressed(MouseEvent e)
{if(e.getModifiers()==InputEvent.BUTTON1_MASK)
{x=(int)e.getX();y=(int)e.getY();
ChessPoint_black chesspoint_black=new ChessPoint_black(this);
ChessPoint_white chesspoint_white=new ChessPoint_white(this);
int a=(x+10)/2,b=(y+10)/2;
if(x/20<2||y/20<2||x/20>19||y/20>19)
{}
else
{
if(棋子颜色==1)
{this.add(chesspoint_black);
chesspoint_black.setBounds(a*20-7,b*20-7,16,16);
棋子颜色=棋子颜色*(-1);
text_2.setText("请白棋下子");
text_1.setText("");
}
else if(棋子颜色==-1)
{this.add(chesspoint_white);
chesspoint_white.setBounds(a*20-7,b*20-7,16,16);
棋子颜色=棋子颜色*(-1);
text_1.setText("请黑棋下子");
text_2.setText("");
}
}
}
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void actionPerformed(ActionEvent e)
{this.removeAll();棋子颜色=1;
add(button);button.setBounds(10,5,60,26);
add(text_1);text_1.setBounds(90,5,90,24);
text_2.setText("");text_1.setText("请黑棋下子");
add(text_2);text_2.setBounds(290,5,90,24);
}
}
class ChessPoint_black extends Canvas implements MouseListener
{ChessPad chesspad=null;
ChessPoint_black(ChessPad p)
{setSize(20,20);chesspad=p;addMouseListener(this);
}
public void paint(Graphics g)
{g.setColor(Color.black);g.fillOval(0,0,14,14);
}
public void mousePressed(MouseEvent e)
{if(e.getModifiers()==InputEvent.BUTTON3_MASK)
{chesspad.remove(this);
chesspad.棋子颜色=1;
chesspad.text_2.setText("");chesspad.text_1.setText("请黑棋下子");
}
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e)
{if(e.getClickCount()>=2)
chesspad.remove(this);
}
}
class ChessPoint_white extends Canvas implements MouseListener
{ChessPad chesspad=null;
ChessPoint_white(ChessPad p)
{setSize(20,20);addMouseListener(this);
chesspad=p;
}
public void paint(Graphics g)
{g.setColor(Color.white);g.fillOval(0,0,14,14);
}
public void mousePressed(MouseEvent e)
{if(e.getModifiers()==InputEvent.BUTTON3_MASK)
{chesspad.remove(this);
chesspad.棋子颜色=-1;
chesspad.text_2.setText("请白棋下子");chesspad.text_1.setText("");
}
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e)
{if(e.getClickCount()>=2)
chesspad.remove(this);
}
}
public class Chess extends Frame
{ChessPad chesspad=new ChessPad();
Chess()
{setVisible(true);
setLayout(null);
Label label=new Label("单击左键下子,双击吃子,右击棋子悔棋",Label.CENTER);
add(label);label.setBounds(70,55,440,26);
label.setBackground(Color.orange);
add(chesspad);chesspad.setBounds(70,90,440,440);
addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{System.exit(0);
}
});
pack();setSize(600,550);
}
public static void main (String args[])
{Chess chess=new Chess();
}
}
‘玖’ 急求井字游戏的编程源代码(MFC格式)
“井字棋”游戏(又叫“三子棋”),是一款十分经典的益智小游戏,想必很多玩家都有玩过。“井字棋”的棋盘很简单,是一个3×3的格子,很像中国文字中的“井”字,所以得名“井字棋”。“井字棋”游戏的规则与“五子棋”十分类似,“五子棋”的规则是一方首先五子连成一线就胜利;“井字棋”是一方首先三子连成一线就胜利。
井字棋(英文名Tic-Tac-Toe)
井字棋的出现年代估计已不可考,西方人认为这是由古罗马人发明的;但我们中国人认为,既然咱们都发明了围棋、五子棋,那发明个把井字棋自然是不在话下。这些纯粹是口舌之争了,暂且不提。
想起小时候上课喜欢玩井字棋,只要一张草稿纸、一支笔、同桌两人就可以玩了。上体育课,也可以拿着树枝在沙坑里玩。但一直感觉这游戏太简单了,后来接触了五子棋,着迷了一阵,但水平总是很差,便也不玩了。
一字棋游戏极小极大分析法
设有九个空格,由MAX,MIN二人对弈,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子构成“三子成一线”(同一行或列或对角线全是某人的棋子),谁就取得了胜利。
用叉号表示MAX,用圆圈代表MIN。
比如右图中就是MIN取胜的棋局。
为了不致于生成太大的博弈树,假设每次仅扩展两层。估价函数定义如下:
设棋局为P,估价函数为e(P)。
(1) 若P对任何一方来说都不是获胜的位置,则e(P)=e(那些仍为MAX空着的完全的行、列或对角线的总数)-e(那些仍为MIN空着的完全的行、列或对角线的总数)
(2) 若P是MAX必胜的棋局,则e(P)=+∞。
(3) 若P是B必胜的棋局,则e(P)=-∞。
比如P如右图示,则e(P)=6-4=2
要注意利用棋盘位置的对称性,在生成后继节点的位置时,下列博弈结局
都是相同的棋局(在博弈中,一宇棋的分枝系数比较小起初是由于对称性,而后是由于棋盘上未布子的空格减少所致)。图3.15画出了经过两层搜索生成的博弈树,静态估值记在端节点下面,倒推值记在圆圈内。
由于右图所示位置具有最大的倒推值,它应当选取为MAX的第一步(正好是MAX的最好的优先走步)。
现在我们假设MAX走了这一步,而MIN的回步是直接在X上方的空格里放上一个圆圈(对MAX来说这是一步坏棋,他一定没有采用好的搜索策略)。下一步,MAX又在新的格局下搜索两层,产生如图3.16所示的搜索图。
现在图中MAX有两个可能“最好的”优先走步,假设MAX走了图上指明的那一步。而MIN为了避免立即败北被迫走了另一步,从而产生如下棋局:MAX再次搜索,产生如图3.17所示的树。
在这棵树中某些端节点(例如其中一个标记着A)代表MIN获胜,因此它们的估值为—∞。当这些估值被倒推回去时,可看到MAX的最好的也是唯一能使他避免立即失败的一个走步。现在,MIN可以看出MAX必然在他的下一走步中获胜,因此,MIN只好认输。
按极大极小算法编程下一字棋的演示(右图,可以点击操作)...
我们就利用Visual Basic编写一个“井字棋”的小游戏。
【设计思路】
首先,我们要知道,“井字棋”游戏是一款典型的棋类游戏,游戏时一方式是电脑,另一方是玩家。所以,这类游戏在开始时有两种方式:一种是玩家先走;另一种是电脑先走。这是我们要考虑的第一个问题。
其次,由于与玩家对战的是计算机,所以我们要编写一个过程(Chuqi),它可以使程序模拟人的思维与人下棋(其实就是“人工智能”的体现),这个Chuqi过程也是本游戏软件的关键。此外,我们还要编写两个过程(Lianxian和Shuying),Lianxian过程用来时刻判断棋盘中是否有三个棋子连成一线;Shuying过程用来判断如果有三个棋子连成一线,是哪一方连成一线的,即判断哪一方获胜。
以上几个问题就是该“井字棋”游戏实现的关键思路。....