二、个人负责模块或任务说明

GUI设计

游戏界面类、地图类的实现(实现与Player类的交互)

阿里巴巴扫描纠错

团队博客编写

三、自己的代码提交记录

四、自己负责模块或任务详细说明

1.地图Field类

public class Field extends JPanel {

private static final long serialVersionUID = 1L;

int n = 1;

/**存储地图的15*12个方格*/

Box[][] boxes = new Box[15][12];

/**初始化地图面板*/

public Field(int n)

{

this.n = n;

this.setLayout(null);

this.setBounds(0, 0, 1200, 960);

}

/**覆盖add方法,添加新参数x,y*/

public void add(Box b, int x, int y)

{

//将box添加进地图

this.add(b);

//保存box

boxes[x][y] = b;

}

/**返回x,y坐标处的box值*/

public Box getBoxbyLocation(int x, int y)

{

return boxes[x][y];

}

/**设置地图*/

public void setField()

{

// 读取编号为n的地图文件

File file = new File("map/" + n + ".txt");

try {

// 构造一个BufferedReader类来读取文件

BufferedReader br = new BufferedReader(new FileReader(file));

String s = null;

int j = 0;

while ((s = br.readLine()) != null) {

String[] arr = s.split("\\s+");

int i = 0;

for (String ss : arr) {

int ctemp = Integer.parseInt(ss);

if (ctemp == 0) {

Box temp = new Box(i, j);

this.add(temp, i, j);

//0为空地

}

// 1~5表示此处为可破坏的实体

if (1 <= ctemp && ctemp <= 5)

{

Box temp = new Box(i, j, n, ctemp, true);

//Box继承自Jlabel,初始化时会根据传参设置好该box的大小和位置

this.add(temp, i, j);

}

// 6~10表示此处为不可破坏的实体

if (6 <= ctemp && ctemp <= 10)

{

Box temp = new Box(i, j, n, ctemp, false);

this.add(temp, i, j);

}

i++;

}

j++;

}

br.close();

} catch (Exception e) {

e.printStackTrace();

}

}

/**使图片自适应label标签大小*/

public void setIcon(String file, JLabel com)

{

ImageIcon ico = new ImageIcon(file);

//ico.getImage();

Image temp = ico.getImage().getScaledInstance(com.getWidth(), com.getHeight(), Image.SCALE_DEFAULT);

//获得一个适应于传入label大小的图片,此处传参是宽和高,还有缩放的方式,这里选择默认的方式

ico = new ImageIcon(temp);

com.setIcon(ico);

}

}

Box类中的构造方法:

public Box(int x, int y, int n, int index, boolean canDestroy)// *存在*

{

this.canDestroy = canDestroy;

// 设置该box大小、位置

this.setBounds(80 * x, 80 * y, 80, 80);

// 根据传入的参数设置图片

setIcon("images/" + n + "/" + index + ".png", this);

// 如果该box可以破坏

if (canDestroy)

{

// 设置该box内藏的宝物

setTreasure();

}

}

/**不存在*/

public Box(int x, int y)

{

// 设置该box为不存在

isExist = false;

// 设置该box大小、位置

this.setBounds(80 * x, 80 * y, 80, 80);

// 设置该box处图片为默认的图片(透明)

setIcon("images/default.png", this);

}

2.游戏界面GameFrame类

放入组件:

//取消默认布局

gameScreen.setLayout(null);

//设置地图面板大小、位置

map.setBounds(20,20,1200,960);

//取消默认布局

map.setLayout(null);

//设置面板背景为透明

map.setOpaque(false);

//生成地图

thismap=new Field(n);

//设置面板背景为透明

thismap.setOpaque(false);

//地图中加入玩家一

thismap.add(player1);

//地图中加入玩家二

thismap.add(player2);

//加载地图

thismap.setField();

//将加载好的地图加入map面板

map.add(thismap);

//将map面板加入主面板

//设置窗体大小,启动玩家移动线程

int width = Toolkit.getDefaultToolkit().getScreenSize().width;

int height = Toolkit.getDefaultToolkit().getScreenSize().height;

int windowsWidth = 1500;

int windowsHeight= 1050;

gameFrame.setBounds((width - windowsWidth) / 2,(height - windowsHeight) / 2-25, windowsWidth, windowsHeight);

setSize(windowsWidth,windowsHeight);

background.getImage();

Image temp=background.getImage().getScaledInstance(this.getWidth(),this.getHeight(),Image.SCALE_DEFAULT);

background=new ImageIcon(temp);

JLabel label = new JLabel(background);

label.setBounds(0, 0, this.getWidth(), this.getHeight());

gameScreen.add(label);

gameFrame.add(gameScreen);

gameFrame.setSize(windowsWidth, windowsHeight);

gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

gameFrame.setVisible(true);

moveThread1 m1 = new moveThread1();

m1.start();

moveThread2 m2 = new moveThread2();

m2.start();

玩家移动线程:

private class moveThread1 extends Thread {

@Override

public void run() {

while (player1.isalive) {

if(stopSign)

break;

if(pause){

player1.move();

colisionDetection(player1);

if(player1.thisbomb!=null)

{

//判断玩家是否在当前炸弹上(一旦离开玩家当前放置的炸弹,便不可再次站上去)

if(player1.thisbomb.isExistPlayer)

{

player1.onTheboom();

}

}

}

}

}

}

使用while循环实现持续监听,加入判断线程结束标志,当重新开始、返回主界面时,线程能够及时停止,避免再次启动的时候出现bug

碰撞检查

public static void colisionDetection(Player pl)

{

int x = 1120;

int y = 880;

//出地图边境

if(pl.getX()<0||pl.getX()>x||pl.getY()<0||pl.getY()>y)

{

pl.back();

return;

}

int w = 15;

int h = 12;

for(int i=0;i

for(int j=0;j

{

try {

Box temp=thismap.getBoxbyLocation(i,j);

//碰撞检查

if(temp.getRect().intersects(pl.getRect())&&temp.isExist)

{

//遇到箱子

if(!temp.isdestroyshowT)

{

pl.back();

return;

}

//遇到宝物

else{

switch(temp.treasureIndex){

case 1:

pl.pla.plusspeed();

break;

case 2:

pl.pla.plusbombnum();

break;

case 3:

pl.pla.pluspower();

break;

case 4:

//无敌状态

pl.invincible();

break;

case 5:

pl.pla.pluslive();

break;

default:

break;

}

//设置当前方格为[不存在]

temp.isExist=false;

//将当前方格设置为隐藏

setIcon("images/default.png",temp);

}

}

//遇到炸弹

if(temp.isExistBomb&&!temp.isExistPlayer&&temp.getRect().intersects(pl.getRect()))

{

pl.back();

return;

}

} catch (NullPointerException e) {

}

}

}

}

借助Rectangle类中的intersects方法来检测2个矩形是否相交,实现碰撞检查,再通过判断玩家前往的box的类型来判断下一步操作。

五、总结:

本次课设是多人组队课设,每个人负责一个模块,进度比一个人要来的快,遇到问题也能通过讨论得到合理解决。但在各模块交互,自己负责模块添加功能时也遇到了很多问题,自己的一点修改会影响这个项目的运行,作为组长,让我意识到不仅需要自己埋头写代码,更多需要和组员配合,了解进度,制定下一个目标,对我而言是一次宝贵的经验。比较遗憾的是,在界面和游戏本身的完成花了较多的时间,没有去尝试通过网络实现多人同台对战。

java泡泡堂教程_JAVA面向对象编程课程设计——泡泡堂(个人博客)相关推荐

  1. 消灭泡泡糖游戏java编程_JAVA面向对象编程课程设计——泡泡堂

    ###一.成员介绍 姓名|任务分配|个人博客链接 --|:--:|--: 张一弛(组长)|GUI设计.游戏界面相关类实现.阿里巴巴扫描纠错.团队博客编写|在做了,在做了,下次一定 王江鸿|Box类.B ...

  2. 斗地主Java课程设计_JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记录 注:这里只有部分提交记录,详细的提交记录在团队 ...

  3. 笔记本电脑java版下载教程_Java面向对象编程笔记本 PDF 下载

    主要内容: Ⅰ.语法基础 //导入 java.util 包下的 bai Scanner 类,导入后才能使用它.(放在 public class 之前) //Scanner 类的对象的定义形式 //从键 ...

  4. java设计五子棋_JAVA课程设计+五子棋(团队博客)

    JAVA课程设计 利用所学习的JAVA知识设计一个五子棋小游戏 1.团队名称.团队成员介绍(菜鸟三人组) 杨泽斌[组长]:201521123049 网络1512 叶文柠[组员]:20152112305 ...

  5. 动态网站开发课程设计——K.X的博客

    文章目录 写在前面 开发环境 说明 技术栈 功能模块图 效果展示 项目源码: K.X的博客开发过程种遇到问题及解决方法 问题一. 问题二. 问题三. 问题四. 问题五. 写在前面 又是一个学期又是一个 ...

  6. java汽车油耗计算_JAVA面向对象编程-试卷B

    JAVA面向对象编程-试卷B 所属分类:其他 开发工具:Java 文件大小:15KB 下载次数:1 上传日期:2017-11-10 20:39:45 上 传 者:弑神唐三 说明:  定义一个交通工具类 ...

  7. java课设 五子棋_Java课程设计 ————五子棋 (个人博客)

    JAVA课程设计 五子棋(博客个人版) •团队课程设计博客链接 •个人负责模块或任务说明 1.主框架类:设置棋盘窗体,颜色等 2.isWin方法:判断胜负 •自己的代码提交记录截图 •自己负责模块或任 ...

  8. java设计五子棋_JAVA课程设计(五子棋)--个人博客

    JAVA课程设计(五子棋)--个人博客(李金妲) 1.题目及我负责的内容 1.1题目:五子棋 1.2负责内容:游戏界面的GUI设计.背景音乐功能.趣味对战算法实现 2.本人负责的主要功能展示与代码截图 ...

  9. java贪吃蛇博客带图片_java课程设计--贪吃蛇小队博客

    一.团队名称.团队成员介绍.任务分配,团队成员课程设计博客链接(以表格形式呈现) 学号 班级 姓名 任务 201721123103 网络1714 凌俊霄(组长) 蛇体.排行榜(数据库).排错.整体代码 ...

最新文章

  1. 贝叶斯统计的无信息先验和共轭先验
  2. 六周第四次课(5月2日)
  3. DataGridView删除、修改方法封装
  4. jQuery获取或设置元素的宽度和高度
  5. dos窗口输入 pip 显示不是内部或外部命令
  6. MVC in MFC or WTL - yinxufeng - 博客园
  7. 动态调整线程池_调整线程池的重要性
  8. WordPress 查询数据库 操作数据库
  9. iperf测试带宽linux,iperf3-网络带宽性能测试工具
  10. perl 循环删除指定文件夹下所有满足条件的文件,不包含文件夹
  11. [luoguP2147] [SDOI2008]Cave 洞穴勘测(并查集 || lct)
  12. 数学建模竞赛题目 学校食堂就餐问题
  13. 从零开始配置vim(22)——lsp简介与treesitter 配置
  14. Unity竖排文字的实现(2019以上新版本可用)
  15. 日常办公,无特殊要求者怎么选择显示器?
  16. A tale of two viewports — part one
  17. 第6周作业2-IF语句大显身手之成绩判断(网络131黄宇倩)
  18. 计算机系统的位的描述性定义,计算机系统中,“位(bit)”的描述性定义是()
  19. 蓝牙(Bluetooth)设备通讯,并连接WIFI
  20. 嘉兴碧桂园云栖里土拍价格_奥山深耕嘉兴,再下一城!以总价5.73亿元竞得王店镇宅地...

热门文章

  1. 获取当前上市公司基本信息——tushare库及基本使用
  2. wireMock伪造请求结果
  3. 事务部分昨日延续----锁
  4. APP爬虫| 逆向神器 frida 初试
  5. 利用python函数,求正方形的面积
  6. Framework7 Vue 教程 入门 学习
  7. 如何从TI官方网站导入例程
  8. 关于 jQuery 的八卦
  9. SQL_菜鸟教程_unique、primary key、foreign key
  10. 【复旦】【金融】且谈复旦大学金融系——送给想报考复旦或是复旦经济学院的同学们【zz】