实现人人五子棋简单的java程序

一、问题概述

五子棋又称FIR(Five in a  row )。意思是连续五个棋子在一条线上。这是一种两方对弈形式的一种益智游戏。任何一方都可以选择先开局、悔棋、重新开局和退出的基本功能游戏。获胜的标准就是任何一方先达到五个连续的棋子在一条线(包括横线、直线或者斜线)上。

二、需求分析和流程设计

1、需求分析

人人对战五子棋主要的需求包括:

(1)界面友好易于操作。

(2)选择合适的控制结构、控制玩家轮流下棋。

(3)动态地生成黑白棋子。

(4)添加简单的悔棋、重新开始等基本功能。

(5)判断输赢。

2、流程图设计

wKioL1NKVl_zzve6AADjEtvhCUs795.jpg

三、软件开发模型

采用边做边改模型

原因如下:

1、程序设计功能相对简单。

2、程序开发周期短。

3、程序设计开发难度低。

基于上述几点,本程序采用边做边改的模型,有助于减少设计阶段的代价。

四、功能模块化设计。

(1)、良好的界面设计

为了给用户一个友好的游戏界面设计,直接关系到用户的体验,所以一个良好的合适的游戏界面设计是一个非常重要的第一步。这一步我利用java语言中Graphics画出简洁大方的五子棋棋盘界面。

代码设计:

利用Graphics中的drawLine方法分别画出行和列的网格形状。背景图片利用常用棋盘添加到面板中。

for (int i = 0; i <= Rows; i++)

g.drawLine(Margin, Margin + i * Grid_Span, Margin + Cols

* Grid_Span, Margin + i * Grid_Span);

for (int j = 0; j <= Cols; j++)

g.drawLine(Margin + j*Grid_Span, Margin, Margin + j * Grid_Span,

Margin + Rows * Grid_Span);

(2)、画出形象的黑白棋子

同样用Graphics2D方法在棋盘上画出棋子,棋子落在网格交叉点上.即棋子落下的坐标。

代码设计:

 int xPos=chessList[i].getX()*Grid_Span+Margin;//获得棋子落下额坐标

  int yPos=chessList[i].getY()*Grid_Span+Margin;

  g.setColor(chessList[i].getColor());//设置颜色

  colortemp=chessList[i].getColor();

  if(colortemp==Color.black){  

              RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.Diameter/2+25, yPos-Point.Diameter/2+10, 20, new float[]{0f, 1f}  

              , new Color[]{Color.WHITE, Color.BLACK});  

              ((Graphics2D) g).setPaint(paint);  

              ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);  

              ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);  

          }  

          else if(colortemp==Color.white){  

              RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.Diameter/2+25, yPos-Point.Diameter/2+10, 70, new float[]{0f, 1f}  

              , new Color[]{Color.WHITE, Color.BLACK});  

              ((Graphics2D) g).setPaint(paint);  

              ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);  

              ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);  

          }

(3)、判断输赢

判断输赢是五子棋里面最核心的部分。五子相连算法有很多种类。这里采用用的是从8个方位进行遍历的来判断五子是否相连。这八个方位即东、东南、西、西南、南、北、西北、东北。

代码设计:

建一个棋子类Point ,在该类中创建一个color属性,便于算法在遍历的时候根据颜色进行相应的统计。不会出现统计混乱。

private int x;

private int y;

private Color color;

遍历算法主要根据鼠标点击的后,获得棋子的坐标,然后根据棋子的坐标进行8个方位的遍历,只要其中一个遍历成功。就会退出遍历(在下棋中有可能会出现一个子会出现两条五子两连的情况)。这样将有利于算法的效率提高。

其中一个方向的遍历代码设计:

for(int x=xIndex-1;x>=0;x--){

  Color c=isBlack?Color.black:Color.white;

  if(getChess(x,yIndex,c)!=null){

  continueCount++;

  }else

  break;

  }

(4)、悔棋功能

这里需要借助一个棋子数组chessLsit。chesslist用来统计一共有多少以下棋子,每当悔一步棋时,就从chesslist减掉一个棋子。因为这里的chesslist采用的是先进后出的数据结构。所以每次减掉棋子都是最新下的棋子。减掉棋子的将会要求重新下棋。

代码设计:

  if(chessCount==0)

  return ;

  chessList[chessCount-1]=null;

  chessCount--;

  if(chessCount>0){

  xIndex=chessList[chessCount-1].getX();

  yIndex=chessList[chessCount-1].getY();

  }

  isBlack=!isBlack;

  repaint();

五、测试和运行结果

测试平台:windows+myeclipse10

测试结果如下图:

wKiom1NKgajxg4m4AAMHbYoRxdc941.jpg

本文出自 “鹰之眸” 博客,转载请与作者联系!

你可能感兴趣的:(java语言,软件开发,界面设计,java程序,程序开发)