Hello 大家好!我们今天来尝试用java来编写一个斗兽棋的小游戏

可能有些人对斗兽棋比较陌生,这里简单的介绍一下。
https://baike.baidu.com/item/斗兽棋/896091?fr=aladdin

斗兽棋从写法上就比五子棋要复杂的多了
开始编程

第一步还是一样,import所需要的类库

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
`斗兽棋还是继承JPanel父类
public class 斗兽棋 extends JPanel{定义一些变量
private static final long serialVersionUID=1l;private final int rows=7;private final int cols=9;private final int BLOCKWIDTH=50,BLOCKHEIGHT=50;//这个说明一下,这是一个列表,给每一个动物赋值,后面用来判断吃子private static HashMap<String,Integer> power; private int clickcount;//这个表示你要走的棋子private MyIcon movingpiece;//这个表示该哪一方走棋
private static String sidetomove;//这里用的不是普通的JLabel,而是他的一个子类MyLabelprivate static MyLabel[][] labels;
( 呈上MyLabel class import javax.swing.JLabel;public class MyLabel extends JLabel{private static final long serialVersionUID = 1L;//这里给MyLabel赋予两个参数,一个行数,一个列数。protected int row;protected int col;public MyLabel(String a,int b) {super(a,b);}
})//表示大本营是否被占据
private boolean campoccupied;//表示movingpiece所在的labelprivate MyLabel movinglabel;还有一个变量,因为要知道设计斗兽棋的棋盘是需要外部的一些图片的,所以我们需要知道所有图片的地址,以便于需要的时候可以随时引用。
至于图片,大家可以自己从网上下,也可以引用我的。我会把图片单独传上来。//这里就是一个装有所有图片地址的array
private static String[] paths= {"C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本1.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本10.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本11.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本12.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本13.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本14.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本15.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本2.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本3.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本4.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本5.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本6.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本7.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本8.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本9.png","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本16.jpg","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/timgG78XVZO0_副本.jpg","C:/Users/Lenovo/eclipse-workspace/xiaoyouxi/src/斗兽棋/dsq_副本.jpg"};一共19张图片,分别是双方的八个棋子--鼠、猫、狗、狼、豹、虎、狮、象,加上小河,兽穴和陷阱接下来是 class constructorpublic 斗兽棋() {sidetomove="red";this.clickcount=0;labels=new MyLabel[rows+1][cols+1];this.setLayout(null);power=setpower();(生成power这个HashMap)initlabels();}//八只动物按从小到大的顺序赋值0-7
private HashMap<String,Integer> setpower(){HashMap<String,Integer> answer=new HashMap<>();answer.put("mouse", 0);answer.put("cat", 1);answer.put("dog", 2);answer.put("wolf", 3);answer.put("leopard", 4);answer.put("tiger", 5);answer.put("lion", 6);answer.put("elephant", 7);return answer;}然后是非常重要的一个函数initlabels(),斗兽棋的棋盘设计的复杂程度应该仅次于军棋了吧!上硬菜了private void initlabels() {for(int i=0;i<rows;i++) {for(int j=0;j<cols;j++) {MyLabel jl=new MyLabel("",JLabel.CENTER);jl.row=i;jl.col=j;jl.setBounds(i*BLOCKWIDTH, j*BLOCKHEIGHT, BLOCKWIDTH, BLOCKHEIGHT);jl.setBorder(BorderFactory.createLineBorder(Color.BLACK));jl.setOpaque(true);jl.setBackground(Color.WHITE);完成常规设定之后就开始设置摆放棋子if(i==0&&j==0) {jl.setIcon(new MyIcon(paths[0]));}if(i==6&&j==0) {jl.setIcon(new MyIcon(paths[10]));}if(i==1&&j==1) {jl.setIcon(new MyIcon(paths[1]));}if(i==0&&j==2) {jl.setIcon(new MyIcon(paths[8]));}if(i==2&&j==2) {jl.setIcon(new MyIcon(paths[9]));}if(i==5&&j==1) {jl.setIcon(new MyIcon(paths[11]));}if(i==4&&j==2) {jl.setIcon(new MyIcon(paths[12]));}if(i==6&&j==2) {jl.setIcon(new MyIcon(paths[13]));}if(i==0&&j==6) {jl.setIcon(new MyIcon(paths[14]));}if(i==2&&j==6) {jl.setIcon(new MyIcon(paths[3])); }if(i==4&&j==6) {jl.setIcon(new MyIcon(paths[4]));}if(i==6&&j==6) {jl.setIcon(new MyIcon(paths[5]));}if(i==1&&j==7) {jl.setIcon(new MyIcon(paths[2]));}if(i==5&&j==7) {jl.setIcon(new MyIcon(paths[6]));}if(i==0&&j==8) {jl.setIcon(new MyIcon(paths[15]));}if(i==6&&j==8) {jl.setIcon(new MyIcon(paths[7]));}一直到这里,我们总算把所有的动物都摆上了!!!接下来是陷阱,兽穴和小河(按顺序的)if(((i==2||i==4)&&(j==0||j==8))||(i==3&&(j==1||j==7))) {jl.setIcon(new MyIcon(paths[16]));}if(i==3&&j==0||(i==3&&j==8)) {jl.setIcon(new MyIcon(paths[18]));}      if((i==1||i==2||i==4||i==5)&&(j==3||j==4||j==5)) {jl.setIcon(new MyIcon(paths[17]));}棋盘设计好了之后就把它加到我们的“斗兽棋”里面this.add(jl);    this.labels[i][j]=jl; 还要加上监听器jl.addMouseListener(new MouseAdapter() {     public void mouseClicked(MouseEvent e) {if(e.getButton()==MouseEvent.BUTTON1){ move(jl);             }      }      });  }}}    刚才我们在加监听器的时候用到了move()这个函数,这又是一个非常变态的函数,不过我们先不急着写这个函数,而是先把一些辅助函数完成好。先是returnsize(),还是负责计算所需JFrame的大小
private int[] Returnsize() {int[] a = {cols * BLOCKWIDTH + 70, rows * BLOCKHEIGHT + 20};return a;}然后我们要给每一个元素(动物,小河,陷阱,兽穴)取上名字,这里的参数是图片。为了简单起见,这里没有区分势力,i.e.双方的老鼠都叫做“mouse” 等等private static String getname(MyIcon icon) {if(icon.getPath()==paths[0]||icon.getPath()==paths[7]) {return "lion";}if(icon.getPath()==paths[1]||icon.getPath()==paths[6]) {return "dog";}if(icon.getPath()==paths[5]||icon.getPath()==paths[8]) {return "mouse";}if(icon.getPath()==paths[4]||icon.getPath()==paths[9]) {return "leopard"(豹);}if(icon.getPath()==paths[3]||icon.getPath()==paths[12]) {return "wolf";}if(icon.getPath()==paths[2]||icon.getPath()==paths[11]) {return "cat";}if(icon.getPath()==paths[10]||icon.getPath()==paths[15]) {return "tiger";}if(icon.getPath()==paths[13]||icon.getPath()==paths[14]) {return "elephant";}if(icon.getPath()==paths[16]) {return "trap"(陷阱);}if(icon.getPath()==paths[17]) {return "river";}if(icon.getPath()==paths[18]) {return "camp";}//没有图片,没有名字return "";}虽然我们刚才没有区分势力,但是现在,我们还是需要些一个函数,来搞清楚这一点。我们把每一方的八只动物,归为一类,分为红、蓝双方private String getside(MyIcon icon) {if(icon.getPath()==paths[0]||icon.getPath()==paths[1]||icon.getPath()==paths[8]||icon.getPath()==paths[9]||icon.getPath()==paths[10]||icon.getPath()==paths[11]||icon.getPath()==paths[12]||icon.getPath()==paths[13]) {return "blue";}if(icon.getPath()==paths[2]||icon.getPath()==paths[3]||icon.getPath()==paths[4]||icon.getPath()==paths[5]||icon.getPath()==paths[6]||icon.getPath()==paths[7]||icon.getPath()==paths[14]||icon.getPath()==paths[15]) {return "red";}return "";}

在这里大家可能并不知道MyIcon和getPath()指的是什么,我来给大家说明一下。由于Icon本身很难被直接比较,所以我们就去比较它们的地址。
MyIcon是ImageIcon的一个子类。在上面判断动物种类和所处势力的两个函数中我就是通过比较地址来间接地比较Icon的。
代码呈上

import javax.swing.ImageIcon;public class MyIcon extends ImageIcon{private static final long serialVersionUID = 1L;private String pathname;表示Icon的地址protected boolean istrapped;表示棋子是否进入陷阱public MyIcon(String str) {super(str);this.pathname=str;    设置上它的地址}public String getPath() {return pathname;}}

那么今天就先写到这里,我们下次要写重头戏了,是游戏的规则和走法。

用java编写斗兽棋相关推荐

  1. 用java编写斗兽棋2之规则与走法

    今天我们来写斗兽棋的规则和走法 首先介绍一下斗兽棋的一些规则: 动物的实力按照鼠.猫.狗.狼.豹.虎.狮.象从小到大排列,实力大的动物可以吃掉实力比自己小的以及和自己实力相当的动物.老鼠虽小,却能反杀 ...

  2. 斗兽棋java程序,Java 斗兽棋算法 帮优化一下解决办法

    Java codeimport java.io.*; import java.util.*; public class AnimalFight { /** * @param args */ publi ...

  3. 斗兽棋概要设计说明书

    概要设计说明书 1.引言........................................................................................ ...

  4. 【Unity连载】斗兽棋—棋类游戏开发演示(1)

    序言 "黄梅时节家家雨,青草池塘处处蛙.有约不来过夜半,闲敲棋子落灯花." "象棋终日乐悠悠,苦被严亲一旦丢.兵卒坠河皆不救,将军溺水一齐休.马行千里随波去,象入三川逐浪 ...

  5. 【Unity连载】斗兽棋-棋类游戏开发演示(2)

    第四章 游戏操作与指令 如同养育一个婴儿,父母总会一步步引领孩子成长,从蹒跚学步到来去如风:我们对游戏功能的开发,也无疑应当从走出第一步棋开始.现在,我们已经构建出了棋盘.棋子等基本的游戏逻辑对象:那 ...

  6. 斗兽棋 java_AnimalGame 一个简单的斗兽棋代码实现,基本功能 现了,支持人人对战 JavaScript 238万源代码下载- www.pudn.com...

    文件名称: AnimalGame下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 2257 KB 上传时间: 2015-01-26 下载次数: 0 提 供 者: 盛 ...

  7. 斗兽棋测试计划说明书

    测试计划 一.引言       1. 编写目的 本测试计划文档作为指导此测试项目循序渐进的基础,帮助我们安排合适的资源和进度,避免可能的风险.本文档有助于实现以下目标: 1) 确定现有项目的信息和应测 ...

  8. 小游戏之斗兽棋(uniapp)

    前言 最近学习数据结构与算法,但是平常自己要么刷题,要么看书,很是无聊.就想着游戏中一般都会运用大量的算法,所以就开始写游戏来锻炼自己算法这方面的小能力.后面还会持续做其他小游戏,并发布说说自己做的过 ...

  9. 玩吧斗兽棋的一些攻略 同级子谁胜负问题

    抗疫期间喜欢上了玩吧的斗兽棋,一把游戏几分钟就能下完,不仅要有策略,更要有运气,运气不好,再好的局面都会被逆风翻盘. 其中有一种局面,就是双方各执同样级别的棋子时,到底谁会赢,尝试分析了一下 玩吧斗兽 ...

  10. 动物棋c语言程序,斗兽棋游戏手机版|斗兽棋游戏下载 v0.2C 安卓版_最火软件站...

    斗兽棋android手机版,动物对战棋,回味童年的棋牌休闲游戏,登陆android手机,整个游戏画面是分为两块区域,中间有河流分割两块区域,有桥梁可以让彼此的动物过河,要取得胜利,必须占领那一边动物的 ...

最新文章

  1. 733.图像渲染(主讲题意)
  2. Java - 线程安全的 HashMap 实现方法及原理
  3. 主板模式的两项通用性接口
  4. .NetCore 2.1以后的HttpClient最佳实践
  5. [2020.11.27NOIP模拟赛]中位数之中位数【二分,树状数组】
  6. 让java的多重继承成为现实!
  7. 真正拿大厂offer的人,都赢在这一点
  8. Poker2 的爱与愁-入手两周,小小体会
  9. 萤石云视频PC客户端v2.6.14.0官方最新版
  10. 处理器的排名_齐齐哈尔LPCVD尾气处理器排名推荐
  11. Flash:动画实例--球体弹跳
  12. c语言中怎样写入百分号,C语言中如何用printf函式输出百分号?
  13. 两个服务共用一个微信支付
  14. MATLAB数学建模(二):评估股票的价值和风险
  15. 使用install安装应用的时候出现INSTALL_FAILED_SHARED_USER_INCOMPATIBLE问题的解决方法
  16. c语言如何读出字符串中的数据,如何把数据存在字符串中
  17. 提拔!知名教授,副部长级
  18. 《中国金融市场大变局》
  19. Linux中进程的基本知识以及静态调用方法ps的使用
  20. Office 2010 正式版相关资源

热门文章

  1. 高等数学知识点总结——导数定义及性质、微积分、泰勒展开、洛必达法则、函数单调性判断
  2. Tomcat,Servlet,JSP之间是什么关系?
  3. 序:我的多旋翼飞控学习之路
  4. Qt水波进度条Demo
  5. RTMP(2):Chunk 和 Message
  6. Vue3.0 directive的使用说明
  7. TPshop项目步骤(二)
  8. 监听电源键的单击或长按事件
  9. Python如何换pip的源(阿里云或清华云等源)
  10. ubuntu 下的 dnw 下载安装和使用