我有一个五子棋棋谱源程序不懂,谁能帮我读一下

4、C++语言五子棋源程序_文库下载
1亿文档 免费下载
当前位置: &
& 4、C++语言五子棋源程序
4、C++语言五子棋源程序
C++语言五子棋源程序
C++语言五子棋源程序 (利用坐标确定棋子位置)
************************************************************** C++语言五子棋源程序
* 运行环境:TC3.0 (vc6.0不支持画图函数,无法画出棋盘和棋子)
*************************************************************
#define backcolor CYAN
#define defaultcolor BLACK
#define linecolor MAGENTA
#define player1_color RED
#define player2_color WHITE
#define error_color RED
#define winner_color RED
const int left=40;
const int top=390;
const int d=30;
const int line_num=9;
const int turn=0;
const int r=d/3;
const int j=10;
int x,y,k=1,step=(line_num+1)*(line_num+1);
union REGS regs1,regs2;
class player1;
class player2;
class qipan{
~qipan(){};
void init_qipan();
Word文档免费下载:(下载1-13页,共13页)
c++五子棋 14页 2下载券 五子棋C语言源代码 11页 免费 C语言五子棋源代码...§1.2 设计时间 设计时间 2 周,集中上机,同学利用上机时间查阅资料,编制程序,...4、C++语言五子棋源程序 13页 免费 五子棋 vc++ 源程序 3页 1下载券 ... //p 表示人,c 表示电脑 Scan scanp=new Scan();//person Scan scanc=new...五子棋-C语言程序 4页 1财富值喜欢此文档的还喜欢 C++五子棋程序 4页 免费 c++五子棋 14页 5财富值 C++五子棋源代码 4页 2财富值 C++实现五子棋程序――...Page No.1 WordsFromSlide C 语言综合编程训练 WordsFromNotePage 1 Page No.2 ...五子棋棋盘 两位玩家交替行棋 五子相连判定赢棋 查看源程序 WordsFromNotePage 5 ...C语言游戏之五子棋源代码... 5页 免费五子棋源程序 暂无评价0人阅读0次下载举报文档 五子棋源程序...4、C++语言五子棋源程序 13页 免费 五子棋 vc++ 源程序 3页 1下载券 ... 五子棋的编写代码,是用C语...c语言程序代码五子棋游戏源... 6页 5财富值 c#游戏之五子棋程序 7页 免费 C#语言开发五子棋游戏的程... 11页 20财富值 五子棋游戏程序设计 31页 2财富...计算机程序设计基础(C 语言)课程设计 题目:简易五子棋软件设计 院(系、部) 信息工程学院:姓名: 张卓 班级: 自103 学号: 2 年 7 月 5 日?北京 ...C++编写五子棋游戏代码_调查/报告_表格/模板_实用文档。RT,完美通过编译... C语言五子棋游戏源代码 12页 3下载券 用C语言编写的五子棋游戏... 11页 ...关键语句写注释。 测试程序,写出测试报告。 在实验报告写出综合设计心得。 二、实验内容在此次大作业中,我学习设计一个五子棋游戏的程序,源代码及分析如下: #...2012人阅读
程序人生(18)
简易五子棋的详细制作
&&&五子棋是我们日常经常玩的游戏,带给我们无无穷的乐趣。本文将详细的介绍简易五子棋的制作过程,五子棋虽然玩着简单,但要是制作的完美也需要很多耐心和技巧。
关键字&五子棋&制作
1&基本论述
&&&首先要说明一下,本五子棋设计除了计算机下子部分是参考了有关文献后,其余全部是自己独立完成,详细源代码可见附录。&
编写五子棋程序,在设计的初期,应该思考这样几个问题
(1)画棋盘和棋子。下棋时需要我们点击屏幕,一点击就要出现棋子,看似简单,但对于计算机来说,必须告诉它何时画,如何画,画哪里。
(2)对于落子的位置的准确判断,我们点击的时候,在我们想下子的那个地方,会有一小块区域,我们必须保证在该区域点击时棋子都能落在那个中心点上。这个过程有两个方法。一个是通过设计虚框;另一个就是对于边界的判断。
(3)解决落子问题后,对于棋手走的每一步,我们都需要判断胜负问题。最简单的办法就是穷举,虽然看似不巧妙,但是简单易操作。而且对于五子棋的设计,也不会花费太多的时间。
(4)以上问题可以解决人人对弈,我们还有实现人机对战,这就需要判断计算机应该在什么地方落子才合适。
&&&以上是制作五子棋需要重点考虑的问题,可以让我们从宏观上把控我们要制作的东西。
2&详细设计
2.1界面设计
&&&&frame=new&JFrame("五子棋--李亚勇");
&&&&&&&panel1=new&MyPanel();
&&&panel2=new&JPanel();
&&&frame.setLayout(null);
&&&frame.setSize(615,720);
&&&panel2.setLayout(null);
panel2.setSize(580,580);
panel2.setBackground(Color.orange);
panel2.add(panel1);
panel1.setLocation(10,10);
frame.add(panel2);
panel1.setSize(570,570);
panel1.setBackground(Color.ORANGE);
panel2.setLocation(10,70);
以上代码是对面板的设计,由于我对内容窗格的知识把握不好,因此面板的布局是任意布局,自己设定面板的大小,以及在框架中出现的位置和颜色。这个过程中我使用了两块面板,其中一块是自己定义类的对象,这样做的目的是为了更好的绘制棋盘和棋子,使它们不受其他因素的影响。
接下来是菜单栏的设计。看截图:
我的菜单条中有三个菜单,Choice是让用户选择对战模式;Set功能尚没有添加;About是版权信息。
JMenuBar&menubar=new&JMenuBar();
frame.setJMenuBar(menubar);
以上这段代码是将菜单条添加到界面中
JMenu&menu1=new&JMenu("Choice");
JMenuItem&m1=new&JMenuItem("人人对战");
m1.addActionListener(new&M1());
JMenu&m2=new&JMenu("人机对战");
JRadioButtonMenuItem&m21=new&JRadioButtonMenuItem("简单",true);
m21.addActionListener(new&M21());
JRadioButtonMenuItem&m22=new&JRadioButtonMenuItem("中等");
m22.addActionListener(new&M22());
JRadioButtonMenuItem&m23=new&JRadioButtonMenuItem("困难");
m23.addActionListener(new&M23());
m2.add(m21);
m2.add(m22);
m2.add(m23);
ButtonGroup&group=new&ButtonGroup();
group.add(m21);
group.add(m22);
group.add(m23);
JMenuItem&m3=new&JMenuItem("退出");
m3.addActionListener(new&M3());
menu1.add(m1);
menu1.add(m2);
menu1.addSeparator();
menu1.add(m3);
以上这段代码是给Choice添加三个菜单,人人对战,人机对战,退出。其中人机对战中又包括三个子菜单,是难度的选择,注意,这里的三个子菜单需要用到互斥菜单项,通过将它们分在一个组里实现。这样保证每次只能选择一个选项,而且设定默认选择状态。在退出上面,还加入一条分隔横线,menu1.addSeparator();这样使我们感觉非常有条理。样子设计出后&,我们要对每个功能菜单进行响应,这样才能实现我们想要的功能。其中,界面截图如下:
&&&&&&&&&&
JMenu&menu3=new&JMenu("About");
JMenuItem&m31=new&JMenuItem("关于我");
menu3.add(m31);
m31.addActionListener(new&Menu3());
对于About菜单,其中只有一个菜单,点击这个菜单时,可以弹出一个消息框,说明我的信息,响应函数如下:
public&class&Menu3&implements&ActionListener{
public&void&actionPerformed(ActionEvent&e)&{
//dialog.setVisible(true);
JOptionPane.showMessageDialog(frame,&"此五子棋版权属于李亚勇\n武汉理工大学-软件工程1001班\nQQ:");
效果截图如下:
frame.setResizable(false);这句代码的意思固定游戏面板的边框,使用户不能通过拖动实现边框的扩大与缩小,而且也不能实现最大化的效果。
2.2&绘制棋盘和棋子
这里需要说明一个问题,计算机中的一些画面,其实都是一种假象,它通过近
似来欺骗我们的眼睛。比如我们看一条直线,其实并不是直的,只有像素点足够小,就会给我们的眼睛造成假象。对于五子棋的棋盘时很容易画的,但是对于棋子,因为每次都需要我们点击时绘画,这就需要我们响应鼠标事件。但是Java中,单击鼠标的响应函数中,不能直接用绘图函数来实现,因此,我在此设计中使用的方法是,建立一个和棋盘一样大小的整型二维数组,每个元素的值为0时代表无棋子,1表示棋手1,2表示棋手2或计算机,这样,我们单击鼠标时,就对对应元素进行赋值。然后调用绘图函数,将棋盘,棋子重新绘制,从而给人一种点击落子的效果。
protected&void&paintComponent(Graphics&e)
super.paintComponent(e);
for(int&js=0;js&=560;js+=40)
&&&&e.drawLine(0,js,560,js);
&&&&&&&&&&&&for(int&js=0;js&=560;js+=40)
&&&&e.drawLine(js,0,js,560);
e.setColor(Color.black);
e.fillOval(115,115,10,10);
e.fillOval(435,115,10,10);
e.fillOval(115,435,10,10);
e.fillOval(435,435,10,10);
e.fillOval(275,275,10,10);
以上这段代码是画棋盘,其中还包括四个小黑点。
for(i=0;i&15;i++)
for(j=0;j&15;j++)
&&&&&&&&draw(e,i,j);
以上这段代码是对整个棋盘数组的检查,每个元素都传递给draw函数,对于非0的元素,经过坐标变化,在棋盘上画点。这里要注意,每次落子时,对相应的元素进行赋值,然后调用repaint(),就会实现棋子的绘制。
&&&&&&&&public&void&draw(Graphics&g,&int&i,&int&j){
if(chessmap[i][j]==1){
&&&&g.setColor(Color.black);
&&&&g.fillOval(40*i-20,40*j-20,40,40);&}
if(chessmap[i][j]==2){
g.setColor(Color.white);
g.fillOval(40*i-20,40*j-20,40,40);}}
上面的代码是画黑白棋子,这里要注意的是二维数组和面板上坐标的对应。
2.3&落子的判断
对于落子边界的判断,这里通过比较来实现,很简单
private&int&bj[]={0,40,80,120,160,200,240,280,320,360,400,440,480,520,560};这个数组中的每个元素值都是棋盘中网格线的坐标,点击棋盘的坐标可以通过函数e.getX()和e.getY()可以获取,然后和数组进行比较,由于每个方格的边长是20,只要它们之间的距离的绝对值小于20,说明就落在了用户想要的位置,非常简单,一下就是函数的具体代码:
int&pdbj(int&xx){
for(i0=0;i0&15;i0++)
if(((xx-bj[i0])&20)&&((xx-bj[i0])&-20))
xx=bj[i0];
return(xx/40);}
2.4&出子问题
由于对战的方式有多种,因此需要模式标记。当模式为人人对战时,需要设定棋手1和棋手2,一个棋手下完子,将下子权交给另一个,以此实现轮流落子的问题。具体代码如下:
else&if(gamemodel==1){
&&&x=pdbj(e.getX());
&&&y=pdbj(e.getY());
&&&if(chessmap[x][y]!=0){}
&&if(qsjh==1){
&&&&&&&&&chessmap[x][y]=1;
&&&&&&&&&qsjh=2;&}
&&&&&&else&if(qsjh==2){
&&&&&chessmap[x][y]=2;
&&&&&qsjh=1;}&}
&&&repaint();
&&&pdsy();}
qsjh是代表棋手的选择权,chessmap是棋盘数组,pdsy()是对棋盘进行扫描,进行胜负判断,后面会详细介绍。
对于计算机落子,比较复杂。虽然本例中有简单,中等,困难三种选择,但实际上只实现了一种下棋模式。核心算法就是对整个棋盘进行扫描。空白位置是我们可能落子的位置,因此我们要计算该空白子的地方,周围是否有棋子,如果有,要判断是人还是计算机的子,接着要看同子的数目。得出后进行比较。如果用户下子的连续数大于计算机,说明此时应该进行防守,在对自己有利的空白位置落子。反之,则进攻,在自己连续数最多的地方落子。判断了落子位置,调用绘图函数,即可实现落子。代码如下:
void&jsjcq(){
int&max_black,max_white,max_temp,max=0;
int&x=0,y=0;
for(int&i=0;i&15;i++){
&&&&for(int&j=0;j&15;j++){
&&&&&&&&if(chessmap[i][j]==0){
&&&&&&&&&&&max_white=checkMax(i,j,2);
&&&&&&&&&&&max_black=checkMax(i,j,1);
&&&&&&&&&&&max_temp=Math.max(max_white,max_black);
&&&&&&&&&&&if(max_temp&max){
&&&&&&&&&&&&&&max=max_
&&&&&&&&&&&&&&x=i;
&&&&&&&&&&&&&&y=j;&}}}}
&&&&&&&&&&&&chessmap[x][y]=2;}
对于棋盘的扫描,由于代码比较多,只取其中的两段,判断左边和右边
int&checkMax(int&x,&int&y,int&black_or_white){
&&&&int&num=0,max_num,max_temp=0;
int&x_temp=x,y_temp=y;
int&x_temp1=x_temp,y_temp1=y_
&&&&//judge&right
for(int&i=1;i&5;i++){
x_temp1+=1;
if(x_temp1&14)
if(chessmap[x_temp1][y_temp1]==black_or_white)
&&&&//judge&left
&&&&x_temp1=x_
&&&&for(int&i=1;i&5;i++){
&&&&x_temp1-=1;
&&&&if(x_temp1&0)
&&&&break;
&&&&if(chessmap[x_temp1][y_temp1]==black_or_white)
&&&&&&&num++;
&&&&break;
&&&max_temp=
2.5&胜负判断
对于胜负的判断,这里采用的方法很简单。对这个棋盘的四个方向进行扫描,需要用到六个for循环
if(chessmap[i00][j00]==0){
&&&&pk1=0;
&&&&pk2=0;
else&if(chessmap[i00][j00]==1){
if(pk1==5){
&&&if(gamemodel==1)
&&&&&&JOptionPane.showMessageDialog(frame,&"黑棋胜!!!");
&&&else&&&JOptionPane.showMessageDialog(frame,&"恭喜!!!您胜了");
else&if(chessmap[i00][j00]==2){
if(pk2==5){
if(gamemodel==1)
JOptionPane.showMessageDialog(frame,&"白棋胜!!!");
else&&&JOptionPane.showMessageDialog(frame,&"Sorry!您输了");
对于每个元素,如果为0,对标记号进行归0,直接下一个,对于有数的,判断是哪一方,然后相应的加1,每次检查连续子数是否达到了5,一旦达到,即判断胜负。这里要注意,对应不同的模式。对于人人对战,应该显示哪一种棋色的棋子获胜,对于人机对战,应该提示是用户获胜还是计算机获胜。
其实这里还有一个小问题需要解决,就是当棋子提示胜负后,取消消息框,这时的棋盘应该不能再落子,所以这时用pk11和pk22这两个整型数来标记棋盘中是否有达到5的连续棋子,在没有的情况下,才可以进行落子,绘制棋子的操作。如图:
一些效果截图:
3&课程体会
本学期通过对软件开发工具的学习,是我对Java语言设计有了更深刻的体会,也激发了我对该语言的学习兴趣。在设计中我最大的体会就是,编程要从小做起,不能一下子把整个东西做出来。我每做一个小块,都会遇到很多错误,由于规模小,我很快就能发现错误,然后改正运行,这使我非常有信心做下去,当后面的代码增多,我也不会感到害怕,因为前面的代码都已经熟悉,而且没有错误,只改后面的错误就可以了。在编程中,一定要养成好的习惯。尽管eclipse软件的功能非常强大,但我们仍要注意,行之间的层次,这样可以使我们很快的找出错误。在编程过程中,不要迷信提示信息,不一定准确,也不要害怕错误很多,因为往往有时候很多的错误信息,其实就是因为你少加了一个括号造成的。同时,编程要有耐心。虽然当我们看到自己的产品做出来时很有成就感,但是制作过程是很枯燥和艰难的,我们一定要克服这个困难才可以。
除了书本知识,老师还教会我们许多做人求学问题的道理。人生在世,就要追求真知,剔除伪知。我们要不断的反省自己,思考自己以后的人生,未来的发展方向。计算机是一门伟大的科学,涉及了数学,哲学的思想,对我们的自身素养也是有极大地提高。
通过导师的讲解,我对计算机的由来,以及它的工作原理有了更深的认识。也通过该课程我接触到了数据库这个让我非常感兴趣的知识块。我会认真反思老师所讲,把软件这门学科学的扎扎实实。
4&读大学体会
&&&&我读大学的这三年,一直在反思大学是让我们来干什么的。我一直认为,大学和技校的性质是一样的,都是让人掌握技能,出去挣钱。但是大学里面有丰富的资源,有好的机遇,这是技校所不能给予的。我们在大学里,应该疯狂的掌握本专业的知识,努力的充实自己,不停的反思自己的不足,不断的去改进自己,这样,自己以后的人生才会辉煌。因此说,大学是我们人生中的一个重大机遇,把握好了,终身受益;荒废度日,日后只会空有遗憾。对于我们软件专业,我觉得应该多加练习编程,多学习有关编程方面的课程。再次也建议学院,能够多开设程序语言方面的课程,多布置编程作业,比赛,强化我们的基础,提高我们队程序的兴趣。
5&参考文献
【1】《Java程序设计》&辛运帏&饶一梅&马素霞&&清华大学出版社
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:74079次
积分:1033
积分:1033
排名:千里之外
原创:132篇
转载:21篇
(2)(1)(1)(1)(1)(1)(4)(1)(4)(8)(5)(6)(1)(3)(1)(1)(4)(3)(104)(1)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'一个下五子棋程序源代码的有关问题,
编辑:www.fx114.net
本篇文章主要介绍了"一个下五子棋程序源代码的有关问题,",主要涉及到一个下五子棋程序源代码的有关问题,方面的内容,对于一个下五子棋程序源代码的有关问题,感兴趣的同学可以参考一下。
一个下五子棋程序源代码的有关问题,一个下五子棋程序源代码的问题,求助!!大家好,
& 我在看《C语言速成3.0》中,有一个现成的五子棋源代码例程,我有些看不懂,希望大家指点一下,谢。 & 代码如下:
/**********************************************************/
& 本程序在Turbo & C或Borland & C下编译通过 &
& 源程序在光盘 & \source\ & 目录下 &
& 文件名: & afive.c &
/**********************************************************/
/**********************************************************/
/* & 程序中用到的库函数所在头文件应用 & #include & 命令包含进来 & */
#include &
#include &
#include &
#include &
#include &
/**********************************************************/
/* & 定义符号常量 &
/*定义画棋盘所需的制表符*/
#define & CROSSRU &
& /*右上角点*/
#define & CROSSLU &
& /*左上角点*/
#define & CROSSLD &
& /*左下角点*/
#define & CROSSRD &
& /*右下角点*/
#define & CROSSL &
& /*左边*/
#define & CROSSR &
& /*右边*/
#define & CROSSU &
& /*上边*/
#define & CROSSD &
& /*下边*/
#define & CROSS &
& /*十字交叉点*/
/*定义棋盘左上角点在屏幕上的位置*/
#define & MAPXOFT &
#define & MAPYOFT &
/*定义1号玩家的操作键键码*/
#define & PLAY1UP &
& 0x1157/*上移-- 'W '*/
#define & PLAY1DOWN &
& 0x1f53/*下移-- 'S '*/
#define & PLAY1LEFT &
& 0x1e41/*左移-- 'A '*/
#define & PLAY1RIGHT &
& 0x2044/*右移-- 'D '*/
#define & PLAY1DO &
& 0x3920/*落子--空格键*/
/*定义2号玩家的操作键键码*/
#define & PLAY2UP &
& 0x4800/*上移--方向键up*/
#define & PLAY2DOWN &
& 0x5000/*下移--方向键down*/
#define & PLAY2LEFT &
& 0x4b00/*左移--方向键left*/
#define & PLAY2RIGHT &
& 0x4d00/*右移--方向键right*/
#define & PLAY2DO &
& 0x1c0d/*落子--回车键Enter*/
/*若想在游戏中途退出, & 可按 & Esc & 键*/
#define & ESCAPE &
/*定义棋盘上交叉点的状态, & 即该点有无棋子 & */
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:君,已阅读到文档的结尾了呢~~
MFC课程设计报告-一个简单的五子棋游戏,mfc五子棋源代码,java五子棋课程设计,简单五子棋,五子棋开题报告,mfc简单实例,简单的mfc程序,mfc简单计算器,五子棋,五子棋技巧
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
MFC课程设计报告-一个简单的五子棋游戏
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 五子棋棋谱 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信