c五子棋实验报告doc.docx

上传人:b****3 文档编号:13264372 上传时间:2023-06-12 格式:DOCX 页数:11 大小:19.43KB
下载 相关 举报
c五子棋实验报告doc.docx_第1页
第1页 / 共11页
c五子棋实验报告doc.docx_第2页
第2页 / 共11页
c五子棋实验报告doc.docx_第3页
第3页 / 共11页
c五子棋实验报告doc.docx_第4页
第4页 / 共11页
c五子棋实验报告doc.docx_第5页
第5页 / 共11页
c五子棋实验报告doc.docx_第6页
第6页 / 共11页
c五子棋实验报告doc.docx_第7页
第7页 / 共11页
c五子棋实验报告doc.docx_第8页
第8页 / 共11页
c五子棋实验报告doc.docx_第9页
第9页 / 共11页
c五子棋实验报告doc.docx_第10页
第10页 / 共11页
c五子棋实验报告doc.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c五子棋实验报告doc.docx

《c五子棋实验报告doc.docx》由会员分享,可在线阅读,更多相关《c五子棋实验报告doc.docx(11页珍藏版)》请在冰点文库上搜索。

c五子棋实验报告doc.docx

c五子棋实验报告doc

c五子棋实验报告

篇一:

五子棋对战实验报告

  实验项目五子棋网络对战和聊天实验日期XX0406实验报告要求:

  一、实验目的:

  学习和使用socket编程,熟练软件开发

  二、实验原理:

  使用socket进行网络通信,java作为编程语言

  三、实验要求:

  编写五子棋程序可以实现联机网络对战,并且可以进行聊天

  四、实验步骤、结果(程序+注释+截图)及分析:

  首先拟定编程语言与开发方案,选择java语言,考虑到java可以跨平台运行,

  然后决定把这个程序拆分为客户端、服务器两个部分,每个部分再分成5个小的部分实现不同功能。

  1、然后考虑使用java的swing包,创建ClientChessPanel类负责棋盘部分,包括判断输赢,使用数组chesses[i][j]记录棋盘上棋子的分布,对数组进行不同的赋值表示网格节点上无棋、黑棋、白棋;使用playChessHandler作为鼠标单击事件,单击事件调用Clientskt中的函数传送棋子坐标以及输赢信息。

drawChess函数画棋子,drawGrids画网格,gameOver判断棋盘棋子分布,输赢情况。

  importjavax.swing.*;

  importjava.awt.*;

  ;

  importChatOneToOneClient.Clientskt;

  classClientChessPanelextendsJPanel{

  privatestaticfinallongserialVersionUID=1L;

  privateintspace=20;//网格间的距离

  privateintgrids=30;//棋盘的网格数

  privateintradius=space/2;//棋的半径

  Clientsktskt;

  //当chesses[i][j]=0,表示网格节点(i,j)上无棋

  //当chesses[i][j]=1,表示网格节点(i,j)上放白棋

  //当chesses[i][j]=2,表示网格节点(i,j)上放黑棋

  privateint[][]chesses=newint[grids+1][grids+1];

  privateintcurrColor=1;//当前棋的颜色

  privateMouseListenerplayChessHandler=newMouseAdapter(){

  publicvoidmouseClicked(MouseEvente){

  if(skt.reMouseGo()){

  intx=e.getX();

  inty=e.getY();

  //放一颗棋子

  if(x=0&&y=0)

  if(chesses[round(x)][round(y)]==0){

  chesses[round(x)][round(y)]=currColor;

  repaint();//刷新图形

  skt.dataout("x:

"+String.valueOf(round(x)));

  skt.dataout("y:

"+String.valueOf(round(y)));

  skt.setMouseGo(false);

  if(gameOver(currColor)){

  skt.dataout("g:

你输了");

  ClientMyDialog(skt.chat,"你赢了");

  ;

  }

  currColor=currColor==1?

2:

1;//切换棋子的颜色

  }

  }

  }

  };

  publicintround(floata){//获得接近a的网格节点坐标

  floatf=a/space;

  returnMath.round(f);

  }

  publicClientChessPanel(intspace,intgrids,Clientsktskt){

  this.space=space;

  this.grids=grids;

  this.radius=space/2;

  this.skt=skt;

  setBackground(Color.BLUE);

  setSize(space*grids,space*grids);

  addMouseListener(playChessHandler);

  startChess();

  }

  publicvoidstartChess(){

  clearGrids();//清空棋盘

  currColor=1;

  repaint();//刷新图形

  }

  privatevoidclearGrids(){

  for(inti=0;i  for(intj=0;j  chesses[i][j]=0;

  }

  //画一颗棋子

  privatevoiddrawChess(Graphicsg,intx,inty,intcolor){

  g.setColor(color==1?

Color.GREEN:

Color.BLACK);

  g.fillOval(x*space-radius,y*space-radius,radius*2,radius*2);

  }

  //画网格

  privatevoiddrawGrids(Graphicsg){

  g.setColor(Color.DARK_GRAY);

  for(inti=0;i  g.drawLine(0,i*space,grids*space,i*space);

  g.drawLine(i*space,0,i*space,grids*space);

  }

  }

  //接收对方下的棋坐标

  publicvoidpaintChess(intx,inty){

  if(x=0&&y=0){

  if(chesses[x][y]==0){

  chesses[x][y]=currColor;

  currColor=currColor==1?

2:

1;//切换棋子的颜色

  skt.setMouseGo(false);

  skt.setMouseGo(true);

  repaint();//刷新图形

  }

  }

  }

  //判断游戏是否结束

  publicbooleangameOver(intgameOver){

  intfive=0;//用于判断是否有连续5个子

  for(inti=0;i  for(intj=0;j  if(chesses[i][j]==gameOver){

  five++;

  for(in(本文来自:

小草范文网:

c五子棋实验报告)tk=1;k  if(chesses[i][j+k]==gameOver){

  five++;

  if(five==5){

  returntrue;

  }

  }

  else{

  five=1;

  k=5;

  }

  }

  for(intk=1;k  if(chesses[i+k][j]==gameOver){

  five++;

  if(five==5){

  returntrue;

  }

  }

  else{

  five=1;

  k=5;

  }

  }

  for(intk=1;k  if(chesses[i+k][j+k]==gameOver){

  five++;

  if(five==5){

  returntrue;

  }

  }

  else{

  five=1;

  k=5;

  }

  }

  for(intk=1;k4;k++){//左斜向比较

  if(chesses[i+k][j-k]==gameOver){

  five++;

  if(five==5){

  returntrue;

  }

  }

  else{

  five=1;

  k=5;

  }

  }

  }

  }

  five=0;

  }

  returnfalse;

  }

  publicvoidpaintComponent(Graphicsg){//覆盖paintComponent()方法

  super.paintComponent(g);//必须先调用父类的方法

  drawGrids(g);//画网格

  for(inti=0;i  for(intj=0;j  if(chesses[i][j]!

=0)

  drawChess(g,i,j,chesses[i][j]);//画棋子

  }

  }

  2、ClientComponentPopupMenu类主要负责聊天的部分,使用JTextField并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。

  importjava.awt.*;

  ;

  ;

  importjavax.swing.*;

  ;

  publicclassClientComponentPopupMenuextendsJPopupMenuimplementsMouseListener,ActionListener{

  privatestaticfinallongserialVersionUID=1L;

  publicstaticClientComponentPopupMenusharedInstance=null;

  publicstaticvoidinstallToComponent(JTextComponentc){

  if(cinstanceofJTextArea&&!

(cinstanceofJPasswordField)){

  c.addMouseListener(ClientComponentPopupMenu.getSharedInstance());

  }

  elseif(cinstanceofJTextField&&!

(cinstanceofJPasswordField)){

  c.addMouseListener(ClientComponentPopupMenu.getSharedInstance());

  }

  }

  publicstaticvoiduninstallFromComponent(JTextComponentc){

  if(cinstanceofJTextArea&&!

(cinstanceofJPasswordField)){

  c.removeMouseListener(getSharedInstance());

  }

  elseif(cinstanceofJTextField&&!

(cinstanceofJPasswordField)){

  c.removeMouseListener(getSharedInstance());

  }

  }

  JMenuItemcutItem,copyItem,pasteItem,deleteItem,selectAllItem,printItem;

  //构造器

篇二:

五子棋课程设计实验报告

  西南交通大学

  程序语言综合课程设计

  五子棋游戏

  课程《程序语言综合课程设计》学院信息科学与技术学

  专业软件工程

  姓名

  学号XX9050

  日期XX年月日

  目录

  第一章课程设计的目的和要求..............................................................3

  1.1课程设计的目的...........................................................................3

  1.2课程设计的要求...........................................................................3

  1.3课程设计的实验环境...................................................................3

  第二章功能描述.......................................................................................4

  第三章总体设计.......................................................................................5

  3.1功能模块设计...............................................................................5

  3.1.1任务执行流程图..................................................................5

  3.1.2下棋函数流程图..................................................................6

  3.2数据结构设计...............................................................................7

  3.2.1定义结构体..........................................................................7

  3.2.2定义数组..............................................................................7

  3.2.3全局变量..............................................................................7

  3.3函数功能描述...............................................................................7

  第四章程序实现.......................................................................................8

  4.1源码分析.........................................................................................8

  4.2运行结果及界面介绍..................................................................22

  第五章后记.............................................................................................27

  第一章课程设计的目的和要求

  1.1课程设计的目的

  1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;

  2.熟练掌握流程图的绘制、程序设计文档的书写;

  3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;

  4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。

  1.2课程设计的要求

  1、编写程序代码,调试所写程序使其能够正确运行;

  2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;

  3、能够实现悔棋、存档和读档等附加功能

  1.3课程设计的实验环境

  该课程设计在设计与实验过程中需要在windowsXP系统/windowsXX以上系统中进行,程序设计要求在visualC++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。

本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:

  硬件:

Cpu:

2.1GHZ,内存,2GB,硬盘:

320GB,操作系统:

windowsxp软件环境:

安装VC++6.0

  第二章功能描述

  本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。

程序能实现界面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。

  

(1)显示欢迎界面。

在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;

  

(2)初始化功能。

程序初始化屏幕和棋盘,默认玩家先行。

  (3)下棋操作。

利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。

  (4)人机智能对战功能。

电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。

  (5)悔棋功能。

玩家可以有三次悔棋机会。

  (6)胜负判断功能。

程序能对下棋的结果进行判断,分出胜负。

并显示获胜方。

  (7)读档、存档功能。

游戏中途退出会提示是否存档,如果存档,则下次开始的时候会提示是否读档继续上次的游戏。

  第三章总体设计

  3.1功能模块设计

  3.1.1任务执行流程图

篇三:

五子棋源码实验报告及人机对战说明

  1.五子棋对战说明

  2.实验报告

  3.源代码

  五子棋

  作品特点:

C语言程序五子棋

  作品功能:

五子棋人机对战,人人对战。

  目录:

1五子棋介绍。

  2五子棋棋型介绍。

  3人人对战的实现。

  4电脑下子的实现。

  5棋型价值的计算。

  6胜利及棋型的判断。

  7补充说明

  1五子棋介绍。

  五子棋是一种两人对弈的纯策略型棋类游戏。

只要任意一方在棋盘上且同一个回合上连为五子为胜。

还有禁手规则,在本程序中不作讨论。

  2五子棋棋型介绍。

  本程序中的棋型均为本人自定义。

本程序总共设计35种棋型。

●表示玩家的棋子,◎表示电脑的棋子。

以下称电脑方为己方,玩家方为对方。

从一空点向某一方向判断该方向的棋型。

某一方向指1-8方向从右顺时针开始数。

  

(1)空棋型。

从一空点向一方向看连续2个为空的棋

  型。

空棋型共1种。

  如图,从左端的空点向右看会发现

  有连续2个空点。

  

(2)活棋型。

2端无挡的棋型为活棋型。

活棋型共8

  种:

己方4种,对方4种。

  左图为己活3。

从左端的空点

  向右看会发现己方有连续的3个子,且右端无挡。

  该点的1方向为己活3。

  左图为对活2

  (3)冲棋型。

1端无挡的棋型为冲棋型。

冲棋型共9

  种:

己方4种,对方4种,边界1种。

  左图为边界冲棋型。

空点的右端为边界。

  或左图为己冲2。

从左

  端的空点向右看会发现己方有连续的2个子,且右端

  有挡(此处有挡表示有对方的子或为边界)。

故该点的

  1方向为己冲2。

  左图为对冲4。

  (4)空活棋型。

从一空点向一方向看有1个空点,继

  续看有己方或对方的活棋型。

空活棋型共8种:

  己方4种,对方4种。

  左图为己空活2。

从左端的空点

  向右看有1个空点,继续看会发现己方有连续的2个

  子,且右端无挡。

故该点的1方向为己空活2。

  左图为对空活1。

  (5)空冲棋型。

从一空点向一方向看有1个空点,继

  续看有己方或对方或边界冲棋型。

空冲棋型共9

  种:

己方4种,对方4种,边界1种。

  左图为边界空冲棋型。

空点的右端为空点再

  右看为边界。

  或左图为己空冲2。

  从左端的空点向右看有1个空点,继续看会发现己方

  有连续的2个子,且右端有挡。

故该点的1方向为己

  空冲2。

  3人人对战的实现。

  双方玩家轮流下子,直到一方形成五连即判为胜方。

下子时输入棋盘上显示的对应坐标。

如果某方需要悔棋,则输入1515即可。

悔棋只能悔一步。

在人机对战中亦可悔棋。

  4电脑下子的实现。

  人机对战中电脑下子是通过AI(int*p,int*q)这个函数实现的。

用p、q返回下子的坐标。

先历遍棋盘上所有点,如发现一个空点则调用函数value(intp,intq)计算该空点的价值。

每个点又由8个方向的棋型组成。

调用函数qixing(intn,intp,intq)判断空点pq在n方向上的棋型号。

对每种棋型进行赋值,然后对各个方向的棋型进行分析。

最后计算出该空点的价值。

如此找到棋盘上价值最大的空点,则电脑在该处下子。

  5棋型价值的计算。

  棋型价值的计算是通过函数value(intp,intq)实现

  的。

先调用函数qixing(intn,intp,intq)判断空点pq在n方向上的棋型号。

n为1-8方向从右顺时针开始数。

对8个方向的棋型进行分析后给出该点的价值。

各种棋型的价值存在数组a[2][4][4]中。

本程序将两相反方向的棋型进行合在一起进行分析。

本程序分为六类进行讨论。

  ①空棋型and其他。

  ②边界冲棋型and其他。

  ③边界空冲棋型and其他。

  ④己活己活己活己冲对活对活对活对冲。

  ⑤己活对活己活对冲己冲对活己冲对冲。

  ⑥其他棋型。

  ⑦

  6胜利及棋型的判断。

  胜利及棋型的判断都调用了函数yiwei(intn,int*i,int*j)。

在n方向上对坐标ij移位。

n为1-8方向从右顺时针开始数。

  胜利的判断:

每下一次子从该点向1方向移位,移位后判断新点是否与下的子相同。

如相同则继续移位判断,否则转向判断即n+=4;如转向后仍然没五连,则换下一个方向判断即n-=3;直到出现五连则胜利,如果8个方向判断完都没有五连则返回0,表示还未胜利。

  棋型的判断:

棋型的判断主要运用switch语句。

在某一方向移位后判断该点的状态。

最后得出该方向上的棋型号。

  7补充说明

  1.在WIN7环境下用VC++运行棋盘之间有空隙,影响美观。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2