课程设计-单机版五子棋游戏-Java

news/2024/10/17 20:20:33/

一. 项目简介:   

    五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。五子棋的玩法是:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。五子棋的棋具与围棋通用,是一种传统的棋种。五子棋容易上手,老少皆宜,而且趣味横生,引人入胜:它不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

   以下是我们用Java语言写出的单机版五子棋游戏的简单介绍。本次课程设计是

二.功能需求分析

 1. 游戏的简单流程:

      

 

三.思路分析

    四个类:
       Chess-棋子类

       DrawPanel-画棋盘类

       FiveFrame-窗口类

       TestMain-测试类(主类)

六个模块:

      主窗口模块 画棋子模块 棋盘构造模块 按钮模块 鼠标按下模块 判断胜负模块 

      其中我负责的是 主窗口模块 画棋子模块 和 按钮模块

      接下来给大家展示

1.主窗口模块:      

public class FiveFrame extends JFrame{private JPanel toolBar;//工具栏里有三个按钮private JButton startButton,backButton,exitButton;private DrawTest drawTest;//棋盒的面板private JMenuBar menuBar;private JMenu sysMenu;private JMenuItem startMenuItem,backMenuItem,exitMenuItem;private MyListener listener;

 首先,创建一个类FiveFrame为窗口类。

 再创建一个Jpanel类的toolbar,即面板容器类的工具栏,再创建按钮类的开始,悔棋和退出,即startbutton,backbutton,exitbutton。

  再创建一个面板drawtest,再创建jmenubar即菜单栏,创建菜单,创建开始,悔棋,退出键,创建一个监听器。

this.setJMenuBar(menuBar);	//设置窗口菜单栏menuBar.add(sysMenu);sysMenu.add(startMenuItem);sysMenu.add(backMenuItem);sysMenu.add(exitMenuItem);toolBar.add(startButton);toolBar.add(backButton);toolBar.add(exitButton);this.setLayout(new BorderLayout());this.add(toolBar,BorderLayout.NORTH);this.add(drawTest,BorderLayout.CENTER);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);

设置一个菜单栏,将sysmenu添加进去,后将三个按钮添加至sysmenu;

同理将三个按钮添加到工具栏;

用setlayout()布局管理器自动调整组件的摆放位置,注意将drawtest置于中间,将toolbar置于上方。

设置关闭窗口时,程序运行自动停止,以及不可自由改变窗口大小。

2.画棋子模块

public class Chess {private int x;//棋盘中x的索引值private int y;private Color color;public static final int DIANETER=30;public Chess(int x, int y, Color color) {super();this.x = x;this.y = y;this.color = color;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}

创建一个chess类,设置变量x,y为棋子位置的索引值,设置颜色变量,设置常量直径为30。

添加一个get方法,再加一个构造方法。

for(int i=0;i<chessCount;i++) {int xPos=chessList[i].getX()*GRID_SPAN+MARGIN;int yPos=chessList[i].getY()*GRID_SPAN+MARGIN;g.setColor(chessList[i].getColor());g.fillOval(xPos-Chess.DIANETER/2, yPos-Chess.DIANETER/2, Chess.DIANETER, Chess.DIANETER);//最后一颗棋子上画红色框if(i==chessCount-1) {g.setColor(Color.red);g.drawRect(xPos-Chess.DIANETER/2, yPos-Chess.DIANETER/2, Chess.DIANETER, Chess.DIANETER);}	}

得到x的下标,y的下标,得到颜色,画出。

如果棋子是最后一颗,即刚画出的那一颗,则画上红色框。

 

3.按钮模块

public void init() {listener=new MyListener();this.setTitle("单机版五子棋游戏");toolBar=new JPanel();startButton=new JButton("开始");startButton.addActionListener(listener);backButton=new JButton("悔棋");backButton.addActionListener(listener);exitButton=new JButton("退出");exitButton.addActionListener(listener);drawTest=new DrawTest();menuBar=new JMenuBar();sysMenu=new JMenu("系统");startMenuItem=new JMenuItem("开始");startMenuItem.addActionListener(listener);backMenuItem=new JMenuItem("悔棋");backMenuItem.addActionListener(listener);exitMenuItem=new JMenuItem("退出");exitMenuItem.addActionListener(listener);

设置按钮,并且给他们加上监听。

按钮的功能中,悔棋:

public void goback() {//棋盘中没有棋子不能悔棋if(chessCount==0) {return;}chessList[chessCount-1]=null;chessCount--;if(chessCount>0) {x_index=chessList[chessCount-1].getX();y_index=chessList[chessCount-1].getY();}isBlack=!isBlack;this.repaint();}

若棋盘中没有棋子,则不能悔棋,return;

若棋盘中有棋子,则让最后下的棋子等于null,且让当前棋子的x,y的索引值等于上一个棋子的索引值,将颜色相反,重画。

重新开始:

//重新开始游戏的方法public void restartGame() {//清除棋子for(int i=0;i<chessList.length;i++) {chessList[i]=null;}//恢复游戏相关的变量isBlack=true;gameOver=false;chessCount=0;this.repaint();}

将已有的棋子都等于null,将游戏相关变量恢复,重画。

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 


http://www.ppmy.cn/news/563047.html

相关文章

五子棋人机对弈代码——java版

算法是穷举递归法&#xff0c;只不过用java重新写了一遍 import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.Mou…

c++五子棋人机版

五子棋游戏人机版&#xff1a; 电脑实现了阻挡对方连续的棋子 #include<iostream> #include<iomanip> using namespace std; #include<stdlib.h> #include<time.h> /*class PerPlayer { public:int m;int n;int person(); }; PerPlayer pp;class CompP…

五子棋程序设计实现技术文档

五子棋程序设计实现文档 文章目录 五子棋程序设计实现文档前言一、运行截图二、基本思路1.实现过程2.落子3.悔棋4.人机对战的实现1.机器人落子逻辑**2.改进胜负判断方法3.计算目标点的权值(白棋ai使用)4.计算目标点的权值(黑棋ai使用)** 4.扩展功能1.智能“提示”功能 前言 博…

Windows平台下C++五子棋项目实战开发

1. 项目目标 2. 效果演示 3. 创建项目 4. 项目框架设计 4.1 设计项目框架 4.2 根据设计框架创建类 5. 给类添加主要接口 5.1 设计棋盘类Chess的主要接口 5.2 设计AI类的主要接口 5.3 设计Man类的主要接口 5.4 设计ChessGame的主要接口 5.5 添加各个接口的具体实现 6. 实…

基于java的五子棋游戏设计

技术&#xff1a;Java、JSP等摘要&#xff1a;随着互联网迅速的发展&#xff0c;网络游戏已经成为人们普遍生活中不可或缺的一部分&#xff0c;它不仅能使人娱乐&#xff0c;也能够开发人的智力&#xff0c;就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程…

用Java实现五子棋对弈

目录 题目展示 题目分析 代码实现 结果展示 题目展示 1.使用二维数组存储五子棋棋盘 如下图 2.在控制台通过Scanner输入黑白棋坐标( 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子。 如下图: 输入后重新输出棋盘如下图: 白棋输入后如下图&#xff1a; 黑白棋…

C++实现基于博弈树的5x5一子棋人机对战

基于博弈树的5x5一子棋人机对战 919106840637实验2 这是智能计算三个课程实验的第二个实验&#xff0c;即博弈树搜索 。我之前对博弈树的了解不多&#xff0c;所以实现起来比较的简略&#xff0c;仅仅是基本达到了要求 实验语言 C 实验内容 实践博弈树搜索——“5x5格子的一…

Java五子棋(人机版),昨天买的棋子今天就用不上了

Java五子棋&#xff0c;老程序员也花了3天 作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性&#xff0c;喜欢跟广…