`
在下个路口
  • 浏览: 111199 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

五子棋总结

阅读更多
     写了一天的代码了,但还是没实现该有的功能,有点累啊!想想来写篇博客吧,一个算是对前边的总结,一个用来放松放松。
      前些日子主要就做了一个五子棋的游戏,做的画面有点挫,而且最后一个人机对战现在都还没实现,主要是权值的的计算的问题,有点摸不清。

   
    问题:1当刚刚运行出来的时候,界面上的按钮只会出现一个按钮,只有把鼠标移到相应的位置上,按钮才会显示出来,但重绘已经实现了。
         2当鼠标监听悔棋及新游戏按钮时,因为当时是把棋子存储在一个可变大小的容器Aarrylist里面的,所以动作命令监听到command.equlas("悔棋")时,执行remove方法,但是remove方法好像没有执行。if(command.equals("悔棋")){
      int  a=list.size();
          list.remove(a);
        System.out.println("aaa");
       }
以上语句在代码段中根本没有运行。这两个是遇到的主要问题。

       五子棋游戏主要思路:1,游戏界面:实现游戏界面主要有两种方法,第一,创建一个面板,用darwline方法画出棋盘。第二,在网上找一张五子棋的棋盘图片,创建一个图片对象 private Image image = new ImageIcon("Images/hi.jpg").getImage();之后
在重绘方法里画出图片,g.drawImage(image,10,20,670,670,null);  其中drawImage方法中,一个六个参数,其分别为图片,图片开始画的横坐标,纵坐标,图片的长,高和imageobserver。个人认为后者可以使画面更为精美,而且方法也简单。
     2,填充棋子:填充棋子是用一个二维数组存储棋盘的各个交叉点的坐标,并且设置一个boolean值,当boolean值为true时,在棋盘上只能画白子,为flase时画黑子。并且将二维数组的下标值作为坐标值,将每个位置的棋子都标记。当数组值为1时,该位置为黑子,为-1时,该位置为白子,为0时则表明该位置没有棋子。代码如下:for(int i=50;i<=600;i=i+50){
  for(int j=50;j<=600;j=j+50){

  int x0 = i;
  int y0 = j;

 
  if(x1>x0-15 && x1<x0+15 && y1>y0-15 && y1<y0+15){
  x1= x0;
  y1 = y0;
  if(chesses [(i-50)/50][(j-50)/50]==0){//数组为0为该位置没有棋子

  //b用来判断只能下白棋或黑棋
  if(b==true){
  color = Color.white;
//   g.setColor(Color.white);
// //填充棋子
//   chesses [(i-50)/50][(j-50)/50]=-1;//数组为-1为该位置为白棋
  b=false;
  }
  else if(b==false){
  color = Color.black;
//   g.setColor(Color.black);
// //填充棋子
//   chesses [(i-50)/50][(j-50)/50]=1;//数组为1为该位置为黑棋
  b=true;
  }
  //创建一个棋子对象
  Chess c = new Chess(x1-15,y1-15,color);
  //绘制棋子
  c.draw(g);
  //保存棋子对象
  list.add(c);

            }
3,判断输赢:判断输赢分为判断四个方向,其分别为横向,纵向,左斜,右斜,细分的话,每个方向可以分为两个相反的方向。这里只说明判断横向,其代码为: //判断横向输赢
int i1=1;
  int j1 = 1;
  int count=1;//计相同棋子数

//判断从左向右
 
   while(chesses[(i-50)/50][(j-50)/50]==chesses[(i-50)/50+j1][(j-50)/50]){
j1++;

count++;

           }
//判断从右向左
   while((i-50)/50-i1>=0&&chesses[(i-50)/50][(j-50)/50]==chesses[(i-50)/50-i1][(j-50)/50]){
   i1++;
   count++;
}
是通过坐标与数组的联系,数组下标为坐标值,而数组值则标记了该位置的棋子颜色,所以当count值等于5时,代表相同的颜色在横向有五个棋子,则表明该颜色的棋子赢了。其余三个方向,都是通过坐标的变化来判断的,只是在上述代码中的判断条件里面相应的改变数组下标,即棋子坐标值即可。
      4,悔棋及新游戏:之前用了一个可变大小的容器来存储棋子,添加一个动作命令监听器,判断command的值,if(command.equals("悔棋")){
      int  a=list.size();
          list.remove(a);
               }
  新游戏和悔棋的思路大同小异,悔棋执行的是remove方法,而新游戏执行的是clear方法。      if(command.equals("新游戏")){

      list.clear();
     
       }
     5,人机对战:每下一颗棋子,遍历其周围四个方向,给每个坐标都设定权值,当遍历时,权值最大的即为电脑下棋子的地方。人机大战还有一些没有完成,就不多讨论了。

      收获:在接触java时间不长,基础不牢固的时候,这次的游戏让自己学到了很多,好像一切都是学到的新知识。比如说设置面板,在面板上画图片,画棋盘等等,这些小知识都是以前没怎么认真学习过的。但是最重要的是让自己学到了一点点编程的思想,用一个程序员的眼光去看待一个游戏。不积小流,无以成大海;不积跬步,无以至千里。一点一点的积累,相信以后不会太差。加油吧,孩子!

 
分享到:
评论

相关推荐

    五子棋社团工作计划总结总结.doc

    【五子棋社团工作计划与总结】文档主要涵盖了五子棋社团的工作计划和活动总结,旨在通过五子棋这项活动来提升学生的综合素质,包括智力、情操和团队合作能力等。 1. **指导思想**: 五子棋作为一门校本课程,旨在...

    【毕业设计】MATLAB实战应用案例小游戏(附MATLAB代码):围五子棋.zip

    《MATLAB实战应用案例:围五子棋游戏》 MATLAB,全称为“Matrix Laboratory”,是一种功能强大的数学计算软件,广泛应用于科学计算、数据分析、算法开发以及图形化界面设计等领域。在毕业设计中,MATLAB常常被学生...

    java_五子棋 实习报告

    【Java五子棋实习报告】主要探讨了使用Java编程语言设计和实现五子棋游戏的过程,包括人机对战和玩家间的联网对战功能。在报告中,作者详细阐述了五子棋游戏的背景和历史,以及选择Java作为开发语言的原因。Java因其...

    matlab-wuziqi.rar_matlab五子棋gui_五子棋_五子棋matlab_五子棋matlan_五子棋算法

    总结来说,这个项目提供了一个用MATLAB实现的五子棋游戏,其中的核心是五子棋的算法,包括棋盘状态的管理、合法落子的判断以及胜负的自动检测。通过GUI,用户可以直观地进行游戏,体验到与计算机或其他玩家的对弈。...

    Java五子棋设计报告.doc

    【Java五子棋游戏设计与实现】 五子棋游戏,源于中国古代,历史悠久,深受各年龄段玩家喜爱。在当今计算机普及的时代,将这种经典棋类游戏搬到电脑屏幕上,既能满足人们的娱乐需求,又能锻炼思维能力。本项目是晓庄...

    网络五子棋设计报告

    五子棋与其他三大棋类(围棋、中国象棋、国际象棋)的主要区别在于它没有“吃子”的概念,而是强调通过连续放置己方棋子以形成特定的排列来获胜,这种机制使得五子棋更加侧重于发展与限制的策略思想。 #### 算法...

    C语言五子棋实验报告.docx

    总结来说,这份实验报告详细阐述了一个C语言实现的五子棋游戏,涉及了图形界面开发、人机对战的AI算法实现,以及游戏设计的基本流程。通过这样的课程设计,学生不仅能深入理解C语言,还能接触到游戏编程领域的前沿...

    基于L inux的嵌入式五子棋游戏_ 6818开 发板五子棋,基于linux

    在本项目中,我们关注的是一个基于Linux的嵌入式五子棋游戏,它特别针对6818开发板设计。这个项目的核心是利用Linux操作系统的能力,在嵌入式硬件平台上实现一个可玩的五子棋游戏,允许玩家与计算机进行对弈。下面将...

    五子棋实训报告(c语言)

    本文档是关于大学本科课程实训的一个项目,是用c语言写的一个关于五子棋的实训报告,并且可视化

    MFC 五子棋 一个简单的五子棋游戏

    总结来说,这个基于MFC的五子棋游戏集成了基础的数据结构设计、高效的计算机对弈算法以及严谨的胜负判断机制,为玩家提供了一个良好的对战环境。通过深入理解这些核心内容,我们可以进一步改进游戏,例如引入更智能...

    模拟连五子棋游戏,五子棋经典算法

    总结,模拟五子棋游戏的开发涵盖了数据结构(如二维数组)、基础算法(如合法落子判断、Minimax和Alpha-Beta剪枝)、高级算法(如神经网络强化学习)以及用户界面设计等多个方面。通过这样的项目实践,开发者不仅能...

    五子棋grid布局五子棋

    总结来说,"五子棋grid布局五子棋"是一个结合HTML5、CSS和JavaScript技术的项目,通过HTML构建页面结构,CSS Grid实现棋盘布局,JavaScript处理游戏逻辑和用户交互。这种技术栈的运用展示了现代Web开发中静态页面的...

    python课程设计完整 五子棋

    在本项目中,"python课程设计完整 五子棋"是一个使用Python编程语言实现的五子棋游戏。这个课程设计旨在帮助学生掌握Python的基础知识,理解面向对象编程的概念,并通过实际项目来提升编程技巧和问题解决能力。以下...

    C#五子棋游戏示例

    总结来说,《C#五子棋游戏示例》展示了C#在游戏开发中的应用,涵盖了数据结构、算法、图形界面设计、用户交互和资源管理等多个重要领域。通过学习和分析这个项目,开发者可以加深对C#编程的理解,并提升在游戏开发...

    五子棋(网页版)

    总结,这个五子棋网页版项目不仅展示了JavaScript在游戏开发中的应用,也体现了开发者在HTML、CSS、逻辑设计以及性能优化方面的技能。通过学习这样的项目,我们可以深入了解网页游戏的开发流程,并掌握相关技术。

    vb五子棋_VB五子棋_源码

    总结来说,VB五子棋项目是一个很好的学习实践,它涵盖了基础的GUI编程、事件处理、数据结构、算法设计以及简单的游戏逻辑。对于初学者而言,这个项目可以帮助理解VB编程的基本概念,同时也能锻炼到问题解决和算法...

    Java五子棋设计报告.pdf

    从提供的文件内容来看,这是一个关于Java五子棋游戏设计的报告,内容中涉及了游戏的多个关键技术和实现细节。由于文档内容不完整且存在一些扫描错误,以下知识点将基于文档中可辨识的信息进行整理。 1. MVC设计模式...

    基于JAVA的升级版五子棋项目总结(PPT版)

    【标题】基于JAVA的升级版五子棋项目总结(PPT版) 在Java编程领域,五子棋项目是一个常见的教学实例,它可以帮助开发者巩固基础知识,理解面向对象编程、图形用户界面设计以及游戏逻辑的实现。这个升级版的五子棋...

    基于FPGA的五子棋算法

    **总结** 此项目提升了团队合作、FPGA 工程设计和时间管理的能力。在实践中,通过查阅资料、合作和请教老师,加深了对 Verilog 语言的理解,熟练掌握了工程软件的使用。实践证明,理论知识只有在实际应用中才能真正...

    五子棋AI python实现

    使用python写的基于两层博弈树的五子棋AI。加入了阿尔法贝塔剪枝。 python版本:3+,应该可以在命令行里直接跑。 电脑执黑,玩家执白。无禁手。 因为只有两层博弈树,请大家不要嫌他菜哈哈哈,仅供大家学习参考。 ...

Global site tag (gtag.js) - Google Analytics