一、个人任务简述
1.负责创建鱼相关的类,鱼的碰撞检测,团队博客的主要编写
2.完成的任务与功能:
序号 | 完成功能与任务 | 描述 |
1 | 创建鱼类 | 设置我方和敌方的鱼类属性 |
2 | 用户信息 | 储存用户信息,核对用户信息,创建用户类 |
3 | *鱼的碰撞检测 | 检测所在我方鱼所在矩形和敌方鱼所在矩形是否重叠,当矩形重叠时判断为碰撞。 |
4 | 编辑团队博客 | 整理团队项目,编辑组织语言,构建团队博客,发布博客 |
3.Git提交记录截图:
4.参考git地址或博客地址:
https://github.com/s-jm21/FeedingFrenzy
5.团队博客链接:
二、功能架构图
二、本人负责功能详解
-
*鱼的碰撞检测
获取鱼类绘制自身的矩形方法,检测所在我方鱼所在矩形和敌方鱼所在矩形是否重叠,当矩形重叠时判断为碰撞。当我方鱼的积分大于敌方鱼的积分,在控制台输出碰撞了,积分增加,敌方鱼消失;反之,我方鱼的积分小于敌方鱼,游戏结束并失败。
package fish;
//我方鱼与敌方鱼碰撞检测
if(myFish.getRec().intersects(enamy.getRec())) {
if(myFish.level>=enamy.type) {
System.out.println("碰撞了");
enamy.x=-200;
enamy.y=-200;
GameUtils.count=GameUtils.count+enamy.count;
}else {
state=2;
}
}
2.创建鱼类
创建我方鱼类:设置了我方鱼类的属性,即设置出现位置,移动速度,类型等。
创建敌方鱼类:设置敌方鱼类的属性,即设置左右两边的鱼随机出现位置,移动速度,分数等;设置敌方不同类型鱼的属性,例如boss鲨鱼出现的位置。
package fish;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
public class Enamy {
Image img;//定义图片
//定义物体坐标
int x;
int y;
int width;
int height;//定义物体坐标
int speed;//定义移动速度
int dir=1;//方向:从左向右是1,从右向左是-1
int type;//类型
int count;//分值
//绘制自身方法
public void paintSelf(Graphics g) {
g.drawImage(img, x, y, width, height,null);
}
//获取自身矩形用于碰撞
public Rectangle getRec() {
return new Rectangle(x,y,width,height);
}
}
//敌人boos属性
public class Enamy_Boss extends Enamy {
Enamy_Boss(){
this.x=-1000;
this.y=(int)(Math.random()*700+100);
this.width=340;
this.height=340;
this.speed=100;
this.count=0;
this.type=10;
this.img=GameUtils.bossing;
}
}
//左边移动敌方小鱼的属性
public class EnamyLeft extends Enamy{
EnamyLeft(){
this.x=-45;
this.y=(int)(Math.random()*700+100);//随机坐标
this.width=45;//宽
this.height=69;//高
this.speed=10;//速度
this.count=1;//分数
this.type=1;//类型
this.img=GameUtils.enamyl1;//图片
}
}
//右边移动敌方小鱼的属性
public class EnamyRight extends Enamy{
EnamyRight(){
this.x=1400;
dir=-1;
this.y=(int)(Math.random()*700+100);
this.width=45;
this.height=69;
this.speed=10;
this.count=1;
this.type=1;
this.img=GameUtils.enamyr1;
}
}
//省略其他地方子鱼类
3.用户信息
(1)储存用户信息
public static ArrayList<UserInfo> userInfoArrayList = new ArrayList<>();
{
userInfoArrayList.add(new UserInfo("hangman","123456"));
for (UserInfo userInfo : userInfoArrayList) {
System.out.println("用户信息:"+userInfo.getName()+" "+userInfo.getPaw());
System.out.println("--------------------------------------------");
}
}
(2)核对用户信息
public boolean contains(UserInfo userInfo){
//for增强
for (UserInfo rightuser : userInfoArrayList) {
//集合user
if (userInfo.getName().equals(rightuser.getName()) && userInfo.getPaw().equals(rightuser.getPaw())) {
//相同则通过进行下一步
return true;
}
}
return false;
}
(3)创建用户类
public class UserInfo {
private String name;
private String paw;
public UserInfo(String name, String paw) {
this.name = name;
this.paw = paw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPaw() {
return paw;
}
public void setPaw(String paw) {
this.paw = paw;
}
}
4.编辑团队博客
整理团队项目,编辑组织语言,构建团队博客,发布博客
三、课程设计感想
无法正确的使用多线程编程模型,导致程序运行缓慢或出现问题,对面向对象程序设计和编程思想不够深入。学习了Java的事件处理机制,了解了事件的分类等知识。学习了多线程模型,总结了很多经验。面对游戏逻辑的思考有很大的困难。在如何解决在使用github时经常无法进入页面的问题。查找了很多相关教学视频等的教程,仍然无法完全改善这个问题。在本次课程设计中,我深刻体会到了软件开发的整个流程,从需求分析到设计、编码、测试、调试等各个方面都需要认真的思考和努力实践。同时,我也深入理解了团队合作的重要性,学习了如何沟通、协商和分工,提高了代码协作和版本控制的能力。通过本次课程设计,我不仅加深了对 Java 编程语言的理解和掌握,更重要的是锻炼了自己的团队协作和问题解决能力,为今后的软件开发工作打下了坚实的基础。
四、展望
1.对多线程模型的使用比较困难,对游戏逻辑的思考有一定困难。
2.课设后想要进一步学习Java web技术,通过学习和练习更加熟悉Java面向对象编程的基础知识,加强Java对面向对象编程思想和设计模式等方面的知识。