javaSwing超级玛丽游戏

一、摘要

摘要
近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。
“超级玛丽”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。开发了一款超级玛丽游戏,该游戏主要分为窗体类、场景类、马里奥类、敌人类、障碍物类等几个类。在主程序运行的线程中,用户控制的超级玛丽随方向键的操作而移动,并且可以实现马里奥游戏中的一些基本功能,例如踩死敌人或者顶掉砖块。本游戏采用双缓存技术,解决了游戏过程中的闪屏问题。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本文在介绍Java相关技术和国内外发展现状的基础上,对“超级玛丽”游戏的整个生命周期的各个开发阶段进行了详细地介绍。为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。

二、系统运行环境及开发软件:

开发环境:Windows 7;
(2)开发工具:eclipse;
(3)编程语言:Java语言;

三、可行性的分析

可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。要达到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。

1 技术可行性

本游戏是在Windows 7环境下开发的,一般的机器配置就可以了,对机器本身没有太高的要求,一般当前学校或个人电脑完全可满足要求,环境只需装上jdk 1.4或以上版本就行了,Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机。NeatBeans IDE 5.5是SUN公司开发的Java可视化集成开发工具,是目前最优秀的Java集成开发工具之一。

2 经济可行性

由于本系统使用到的工具一般机器都具备,使用环境也很简单,开发成本低,本课题研究的内容是涉及网络的游戏对战。当今形式下网络游戏俨然已经成为年轻人最时兴的消费方式之一,JAVA一直以来由于其可以“跨平台”以及“一次编译,到处运行”等特点,许多人直接它为网络编程语言,且由于JAVA游戏一般来说简单有趣,并且对用户硬件要求极小,所以JAVA游戏通常对85%的计算机用户都有吸引力。且政府态度和政策都是一种信号,表明2005年对本土网络游戏的扶持力度将加大;国内游戏厂商将可获得发展的核心技术平台;政策有利于保护中国游戏软件的自主知识产权;这为网络游戏发展创造了良好的政策环境。

3 操作可行性

由于在整个系统的开发过程中从操作简便、界面美观、灵活实用的用户要求为出发点,界面设计时充分考虑玩家的感受,界面比较直观,交互性很好,所以操作起来简单明了。

四、需求分析

所谓系统分析,就是指在整个系统开发工程中,解决“做什么”的问题,把要解决哪些问题,满足用户哪些具体的信息需求调查分析清楚,从逻辑上或是说从信息处理的功能需求上提出系统的方案,即逻辑模型,为下一阶段进行物理方案设计,解决怎么办提供依据。

1 用户需求分析

超级玛丽这款游戏是很多人童年经典的回忆,是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱。并且随着社会的快速发展,人们的生活节奏越来越快,人们对于童年的美好已经不愿意仅仅停留在回忆阶段。所以利用java语言开发一款超级玛丽游戏正是人们迫切需要的。

2功能需求分析

本系统主要是完成超级玛丽游戏的基本操作。本系统需要满足以下几点要求:
(1) 在开始界面按空格键进入游戏。
(2) 利用方向键来控制马里奥的运动。
(3) 碰撞检测:
A.马里奥在运动的过程中如果碰到障碍物则停止运动,在移动到悬崖上方是会掉下去,并失去一条生命。
B.对于有些敌人,如果马里奥跳到敌人头顶上,则敌人消失,否则马里奥失去一条生命。
(4)马里奥顶到金币会增加分数,当马里奥失去3条生命时游戏结束。

3.界面设计需求分析

  1. 选取和谐Q版的图片,使画面色彩和谐自然。
  2. 固定游戏界面大小与初始显示位置。
  3. 游戏采用900600像素显示,对于马里奥和障碍物选用6060像素的正
    方图片,对于较大的障碍物分割成多个60*60的小正方形。

五、系统概要设计

1系统模块设计

首先在对于系统的需求进行了分析,因为设计者的最初是要做一款游戏,所以窗体类必不可少。接下来继续分析,游戏中还需要背景类、障碍物类、敌人类、马里奥类这及格类。其次为了游戏的流畅以及游戏中图片调用的方便,专门为此再设计一个初始化类。

2.窗体类

该类主要用于存放游戏的场景以及其他各类,并且实现KeyListener接口,用于从键盘的按键中读取信息。该类中的一些属性主要包括了用于存放所有场景的list集合 allBG,马里奥类 mario,当前的场景 nowBG以及其他一些游戏中需要的标记等。而且在该类中,运用双缓存的技术使得游戏的流畅度更高,解决了游戏中出现的闪屏问题。

Myframe

  • allBG:List
  • mario:Mario
  • nowBG:BackGround
  • main():void
  • paint():void
  • keyPressed():void
  • kerReleased():void

2初始化类

用于存放游戏所需要的所有静态文件,在游戏开始的时候将所有文件导入,提高游戏的运行速度。并且在该类中将所有需要用到的图片进行分类,分为障碍物类,马里奥类,敌人类以及背景图片。当游戏运行时可以直接调用这些集合中的图片进行遍历,在调用的时候更加方便,而且可以使马里奥或者敌人在移动的时候产生动态效果。

StaticValue

  • allMarioImage:List
  • startImage:BufferedImage
  • init():void

3背景类

该类表示马里奥及障碍物和敌人所处的场景,并且将障碍物和敌人绘制到场景中。在该类中包括用于存放敌人和障碍物的list集合,以及当敌人或者障碍物被消灭后用于存放已经消失的敌人和障碍物的集合,这样做是为了在马里奥死亡时重置场景所用的。其次在该类中还使用了控制敌人移动的方法,是为了在程序之初控制敌人静止,然后在玩家点击空格以后在使得敌人开始移动。

BackGround

  • bgImage:BufferedImage
  • isOver:boolean
  • isDown:boolean
  • allEnemy:List
  • removeEnemy:List
  • enemyStartMove():void
  • reset():void

4.马里奥类

用来控制马里奥的行动,并且在该类中加入碰撞检测,判断马里奥是否与障碍物或者敌人发生碰撞。该类中的属性主要定义了马里奥所在的场景,马里奥的移动和跳跃的速度,以及马里奥在移动过程中需要显示的图片。另外该类中还定义了玩家的生命值和所获得的分数。并且在run()方法中还定义了当马里奥到达最后一关的旗子时,玩家将失去对马里奥的控制,剩下的由程序控制走到城堡,完整全部游戏。

Mario

  • x:int
  • y:int
  • xmove:int
  • ymove;int
  • life:int
  • isDead:boolean
  • leftMove():void
  • leftStop():void
  • jump():void
  • down():void
  • dead():void

5障碍物类

绘制场景中所需要的障碍物,例如地面、砖块、水管等等。该类中的属性包括了障碍物的坐标,障碍物所需要显示的图片等。并且在该类中也定义了障碍物类的重置方法,当马里奥死亡时,场景类会调用该方法。

Obstruction

  • x:int
  • y:int
  • type:int
  • starttype:int
  • showImage:BufferedImage
  • reset():void
  • setImage():void

6敌人类

该类中主要设置了两种敌人,一种是蘑菇怪,可以被马里奥踩死,另一种是食人花,不能被踩死。该类中的属性包括了敌人的坐标,敌人的初始坐标,需要显示的图片,以及敌人的移动方向和移动范围等。敌人的初始坐标主要是为了当敌人执行重置方法后将敌人的位置还原。

Enemy

  • x:int
  • y:int
  • startx:int
  • starty:int
  • showImage:BufferedImage
  • upMax:int
  • downMax:int
  • reset():void
  • dead():void

7.设计流程

在这里插入图片描述

六、程序截图

请添加图片描述
请添加图片描述

七、部分代码

gaamaCreature.java

import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.List;class GameCreature extends GameObject
{protected int XSPE=10,YSPE=10;protected int xspe,yspe,xadd,yadd=3;protected List<GameObject> objs=null;public boolean draw = false;GameCreature(int x,int y,GameClient gc){super(x,y,gc);}public void draw(Graphics g){setObjs(gc.obj_map.objs);super.draw(g);
//		setAvailable();
//		getHasrun();
//		touchWithHero(gc.player1);
//		move();
//		action();}protected void setAvailable() {if(available==false) return;if(getRectangle().intersects(new Rectangle(0,0,GameClient.F_W,GameClient.F_H))){this.draw=true;}else if(x<=-GameClient.F_W/2){draw=false;available=false;}}public void move(){super.move();}protected void xMove(){}protected void yMove(){}protected void disappear(){if(draw==true){draw=false;available=false;}else return;}public void touchWithHero(Hero hero){super.touchWithHero(hero);}protected void action(){super.action();}public void setObjs(List<GameObject> objs) {this.objs = objs;}public Rectangle getRectangle(){return new Rectangle(x,y,all_w,all_h);}public Rectangle getARectangle(int x,int y,int w,int h){return new Rectangle(x,y,w,h);}public Rectangle getNextRectangle(){return new Rectangle(x+xspe,y+yspe,all_w,all_h);}

Hero.java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.List;
import java.util.Map;class Hero 
{protected static final int XSPE=12,YSPE=27;public int spe_add=2,xspe=0,yspe=0,spe1=0,rub_add=1,g_add=3,y_add=17,j_time=0,j_lim=2,die_t=0;public int hero_w=25,hero_h=40;public int x,y,x1,y1,x2,y2,hasrun_x=0;public final static int LIM_X1=0,LIM_X2=550;protected boolean march,can_j=true,finish=false;protected boolean b_l,b_u,b_r,b_d;public boolean live = true;public Action act = Action.UNSTAND;public Action touch = Action.STAND;public Action last_t = Action.UNSTAND;protected Dirction add_dir=Dirction.STOP;protected Dirction move_dir=Dirction.STOP;protected Dirction face_dir=Dirction.R;private List<GameObject> objs=null;protected static Map<String,Image> hero_img = new HashMap<String,Image>();public boolean big=false;protected GameClient gc=null;public Hero(int x, int y,GameClient gc) {this.x = x;this.y = y;this.gc = gc;}public void draw(Graphics g){move();Color c = g.getColor();g.setColor(Color.black);g.fillOval(x,y,5,5);g.fillOval(x,(y+hero_h),5,5);g.fillOval(x+hero_w,y,5,5);g.setColor(c);if(this.live==true){this.setMarch();setObjs(gc.obj_map.objs);touchWithObjs();}}private void setHasrun() {if(x+xspe>=LIM_X2){hasrun_x+=xspe;}}public void setObjs(List<GameObject> objs) {this.objs = objs;}public void keyPressed(KeyEvent e) {if(live==false||finish==true) return;int key=e.getKeyCode();if(key==KeyEvent.VK_LEFT) b_l=true;else if (key==KeyEvent.VK_UP) b_u=true;else if (key==KeyEvent.VK_RIGHT) b_r=true;else if (key==KeyEvent.VK_DOWN) b_d=true;}public void keyReleased(KeyEvent e) {if(finish==true) return;int key=e.getKeyCode();if(key==KeyEvent.VK_LEFT) b_l=false;else if (key==KeyEvent.VK_UP) b_u=false;else if (key==KeyEvent.VK_RIGHT) b_r=false;else if (key==KeyEvent.VK_DOWN) b_d=false;//else if (key==KeyEvent.VK_F1) relive();}public void relive() {if(live==false){big=false;live=true;finish=false;x=50;y=100;xspe=0;yspe=0;die_t=0;}}public void reset(){hasrun_x=0;relive();//System.out.println("big "+big+" march "+march);}protected void setDir(){if(xspe>0) move_dir=Dirction.R;if(xspe<0) move_dir=Dirction.L;if(xspe==0) move_dir=Dirction.STOP;}protected void setMarch(){if(move_dir==add_dir) march=true;else march=false;if(finish==true) march=true;//�������ʱ���ߵ�״̬}protected void setFacedir(){if(add_dir!=Dirction.STOP)face_dir=this.add_dir;}protected int getXAdd(){if(finish==true) return 0;int add = 0;if(b_l==false&&b_r==false) {add=0;add_dir=Dirction.STOP;}else if(b_l==true) {add=(-spe_add);add_dir=Dirction.L;}else if(b_r==true) {add=spe_add;add_dir=Dirction.R;}return add;}protected int get_rub_Add(){if(live==false||finish==true) return 0;int rub = 0;if(xspe!=0) {if(move_dir==Dirction.R) rub=(-rub_add);else if(move_dir==Dirction.L) rub=(rub_add);}if(touch==Action.LTOUCH||touch==Action.RTOUCH){rub=0;}return rub;}protected void jump(){if(can_j&&act==Action.STAND){yspe-=y_add*1.3;b_u=false;}else if(can_j==true&&act==Action.UNSTAND){	yspe=-y_add*1;b_u=false;}if(yspe<=-YSPE){yspe=-YSPE;can_j=false;}j_time++;act=Action.UNSTAND;//��Ծ����new GameAudio("ˮ��").start();}public void move(){if(y>gc.F_H+100) return;xMove();yMove();setHasrun();if(y>600){if(die_t==0)die();}if(x>gc.F_W&&finish==true){xspe=0;yspe=0;live=false;gc.d_game=false;gc.d_menu=true;}}protected void die(){//������������live=false;die_t++;act=Action.UNSTAND;touch=Action.UNTOUCH;		xspe=0;yspe=-YSPE;hasrun_x=0;System.out.println("die");//ʧ����Чnew GameAudio("ʧ��").start();}public void finish(){if(finish==false){finish=true;xspe=XSPE;//������Чnew GameAudio("��ף").start();}}private void yMove() {if(b_u==true&&can_j==true&&j_time<j_lim){jump();b_u=false;}else if (act==Action.STAND&&yspe>0){can_j=true;j_time=0;yspe=1;}else if (act==Action.UNSTAND){yspe+=g_add;}int g_add1=g_add;if(touch==Action.UNTOUCH){g_add=g_add1;}else if(touch==Action.LTOUCH){yspe=0;//g_add=0;}else if(touch==Action.RTOUCH){yspe=0;//g_add=0;}else if(touch==Action.BUNT){yspe=0;}y+=yspe;}private void xMove() {this.setFacedir();this.setDir();int xadd=this.getXAdd();int radd=this.get_rub_Add();spe1+=(xadd+radd);if(touch==Action.UNTOUCH){rub_add=1;}//��ײ�󵯻�else if(touch==Action.LTOUCH){//xspe=-xspe/2;x+=hero_w/2;rub_add=3;b_l=false;if(b_l==false){xspe=0;}}else if(touch==Action.RTOUCH){//xspe=-xspe/2;x-=hero_w/2;rub_add=3;b_r=false;if(b_r==false){xspe=0;}}if(-XSPE<spe1&&spe1<XSPE){xspe=spe1;}else{spe1=xspe;}if((x+xspe>LIM_X2||x+xspe<LIM_X1)&&finish==false)//δ���յ���Խ���߽�ʱ{x=x1;}else{x+=xspe;x1=x;}}public Rectangle getRectangle(){return new Rectangle(x,y,hero_w,hero_h);}public Rectangle getARectangle(int x,int y,int w,int h){return new Rectangle(x,y,w,h);}public Rectangle getNextRectangle(){return new Rectangle(x+xspe,y+yspe,hero_w,hero_h);}protected void touchWithObjs() {if(live==false) return;GameObject obj1=null;GameObject obj2=null;for(int i=0;i<objs.size();i++){GameObject obj=null;obj = objs.get(i);if((x>obj.x&&x<obj.x+obj.all_w&&y>obj.y&&y<obj.y+obj.all_h)||(x+hero_w>obj.x&&x+hero_w<obj.x+obj.all_w&&y>obj.y&&y<obj.y+obj.all_h))//��Խ������1{if(obj.y>=y-hero_h) {y=obj.y-hero_h;yspe=1;System.out.println("Hero��Խ������1�˳�");return;}if(xspe>=0){x=obj.x-hero_w;}else{x=obj.x+obj.all_w;}act=Action.UNSTAND;System.out.println("Hero��Խ������1");}if((obj.draw==true&&getNextRectangle().intersects(obj.getRectangle())==true&&(obj!=obj1&&obj!=obj2))||obj.throughCheck(this)){if(obj.throughCheck(this))//��Խ������2{if(obj.y>=y) return;x-=xspe;y-=yspe;System.out.println("Hero��Խ������2");}if(obj1==null){obj1=obj;//System.out.println("obj1  "+obj.getRectangle());}else if(obj1!=null){obj2=obj;//System.out.println("obj2  "+obj.getRectangle());}if(obj1!=null&&obj2!=null){//System.out.println("������Ҫһ���µ�obj��   "+obj.getRectangle()+" obj1 "+obj1.getRectangle()+" obj2 "+obj2.getRectangle());}}}if(obj1!=null&&obj2==null)//ֻ��һ��������mario�Ӵ�ʱ{if(y<=obj1.y){y=obj1.y-hero_h;act=Action.STAND;}else{act=Action.UNSTAND;}if(x>=obj1.x+obj1.all_w&&xspe<0){touch=Action.LTOUCH;}else if(x+hero_w<=obj1.x&&xspe>0){touch=Action.RTOUCH;}else if(y>=obj1.y+obj1.all_h&&yspe<0){touch=Action.BUNT;y=obj1.y+obj1.all_h;}else{touch=Action.UNTOUCH;}
/*			if(touch!=Action.UNTOUCH)System.out.println("��һ�����弴����ײ "+act+" "+touch+" x "+x+" y "+y);*/}else if(obj1!=null&&obj2!=null)//������������mario�Ӵ�ʱ{int ground=0;//�ҳ���Ϊ������������Ϊǽ������if(x+hero_w>=obj1.x&&x<=obj1.x+obj1.all_w&&obj1.y>=y){ground=1;}else if(x+hero_w>=obj2.x&&x<=obj2.x+obj2.all_w&&obj2.y>=y){ground=2;}else{System.out.println("hero����������ײ����������mario��");return ;}//����ǽ����Ĵ���GameObject obj = null;if(ground==1){obj=obj2;}else if(ground==2){obj=obj1;}if(x+hero_w>=obj.x+obj.all_w&&xspe<=0){touch=Action.LTOUCH;}else if(x<=obj.x&&xspe>=0){touch=Action.RTOUCH;}//if(touch!=Action.UNTOUCH)//System.out.println("�����������弴����ײ     "+act+" "+touch+" xspe "+xspe+" yspe "+yspe);}else if(obj1==null&obj2==null){act=Action.UNSTAND;touch=Action.UNTOUCH;//System.out.println("û�����弴����ײ "+act+" "+touch+" x "+x+" y "+y);}}
}

八、联系与交流

q:969060742 完整报告、程序资源、代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能聊天机器人与大型语言模型 (LLM):哪个适合您的业务?

简介&#xff1a;欢迎来到未来 您可能听说过人工智能聊天机器人和大型语言模型 (LLM)&#xff0c;对吧&#xff1f; 这些技术奇迹正在重塑企业的沟通和运营方式。 但是&#xff0c;这是一个价值百万美元的问题&#xff1a;哪一个适合您的业务&#xff1f; 让我们深入了解一下&…

【C++航海王:追寻罗杰的编程之路】queue

目录 1 -> queue的介绍和使用 1.1 -> queue的介绍 1.2 -> queue的使用 1.3 -> queue的模拟实现 1 -> queue的介绍和使用 1.1 -> queue的介绍 queue的文档介绍 1. 队列是一种容器适配器&#xff0c;专门用于在FIFO(先进先出)上下文中操作&#xff0c;其…

力扣刷题31-33(力扣 0024/0070/0053)

今日题目&#xff1a; 24. 两两交换链表中的节点 题目&#xff1a;给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09; 思路&…

Linux离线安装Docker-Oracle_11g

拉取oracle11g镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g创建11g容器 docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g查看容器是否创建成功 docker ps -a导出oracle容器&#xff0c;查看…

深入探索MySQL高阶查询语句的艺术与实践

目录 引言 一、条件查询 &#xff08;一&#xff09;比较运算符查询 1.使用匹配符号查询 2.范围查找 &#xff08;二&#xff09;逻辑运算符 二、关键字排序 三、分组与聚合函数 四、限制查询 五、别名 &#xff08;一&#xff09;设置列别名 &#xff08;二&#x…

YoloV5改进策略:Block改进|ECA-Net:用于深度卷积神经网络的高效通道注意力|ECA+压缩膨胀Block实现涨点(独家原创)

摘要 本文使用ECA-Net注意力机制配合压缩膨胀的Block实现涨点。涨点方法是我自己独创的&#xff0c;改进方法简单易用&#xff0c;方便大家用于论文的改进。 论文&#xff1a;《ECA-Net&#xff1a;用于深度卷积神经网络的高效通道注意力》 arxiv.org/pdf/1910.03151.pdf 最…

后端系统开发之——功能完善

原文地址&#xff1a;https://blog.yiming1234.cn/?p830 下面是正文内容&#xff1a; 前言 通过SpringBoot开发用户模块的部分也就差不多要结束了&#xff0c;这一片文章就主要提一些在系统开发中需要注意到的细节部分和功能&#xff0c;也就是剩余的部分。 但是这个专栏只介…

安达发|电子产品制造企业APS生产排程软件

在电子脉动的世界中&#xff0c;时间是芯片上的电流&#xff0c;效率是电路板上的速度。在这个时代&#xff0c;每一微秒都蕴藏着无限可能&#xff0c;每一决策都关乎着企业的生死存亡。APS生产排程软件&#xff0c;是您的电子制造帝国中的智慧大脑&#xff0c;以卓越的创造力&…

Reactor设计模式和Reactor模型

Reactor设计模式 翻译过来就是反应堆&#xff0c;所以Reactor设计模式本质是基于事件驱动。 角色 Handle&#xff08;事件&#xff09;EventHandler&#xff08;事件处理器&#xff09;ConcreteEventHandler&#xff08;具体事件处理器&#xff09;Synchronous Event Demult…

CTR之Session行为序列建模用户兴趣:DSIN

在前面的文章中&#xff0c;DIN模型 在用户行为序列建模中引入注意力机制来强调加权与target item相关的行为&#xff0c;以实现动态的兴趣表征&#xff1b;而DIEN模型 则在DIN的基础上加入时间性信息&#xff0c;使用注意力机制的GRU来挖掘用户兴趣的演变。 而今天的这篇文章…

jspssm_maven项目——KTV点歌系统

目录 背景 技术简介 系统简介 界面预览 背景 随着互联网的广泛渗透和进步&#xff0c;基于网络技术的KTV点歌系统迅速壮大&#xff0c;其发展始终围绕用户的实际需求展开。通过深入洞察用户的需求&#xff0c;开发出高度定制的管理平台&#xff0c;利用网络的便捷性对系统…

8.软件工程

整个章节偏向于记忆、背诵&#xff1b; 主要议题&#xff1a; 软件体系&#xff1a;3层&#xff1b; UML重点&#xff0c;重点记3要素中的关系、图&#xff1b; 1.软件体系结构 分层 优点&#xff1a;利于软件的重复利用&#xff1b; 缺点&#xff1a;以什么方式分层&#…

使用Urllib库创建第一个爬虫程序

Urllib 是 Python 的标准库&#xff0c;它提供了一系列用于处理 URL 的函数和类&#xff0c;包括发送 HTTP 请求、处理 HTTP 响应、解析 URL 等功能。可以使用 urllib 来编写简单的网络爬虫。 request&#xff1a;它是最基本的HTTP请求模块&#xff0c;可以用来模拟发送请求。只…

【JavaScript 漫游】【044】Web Worker

文章简介 本篇文章为【JavaScript 漫游】专栏的第 044 篇文章&#xff0c;对浏览器模型的 Web Worker 相关知识点进行了总结。 概述 JavaScript 语言采用的是单线程模型&#xff0c;也就是说&#xff0c;所有任务只能在一个线程上完成&#xff0c;一次只能做一件事。前面的任…

MySQL 8.0.35 企业版开启审计audit log功能

一、系统环境和要求 在MySQL中&#xff0c;开启日志审计可以记录数据库的操作日志&#xff0c;包括修改、删除、插入等操作。这对于追踪和分析数据库的使用情况以及排查潜在的安全问题非常有帮助。本文将详细介绍如何开启MySQL的日志审计功能。 操作系统&#xff1a;Ubuntu 20…

人工智能 框架 paddlepaddle 飞桨 使用指南 使用例子 线性回归模型demo 1

安装过程&使用指南&线性回归模型 使用例子 本来预想 是安装 到 conda 版本的 11.7的 但是电脑没有gpu 所以 安装过程稍有变动,下面简单讲下 conda create -n paddle_env117 python=3.9 由于想安装11.7版本 py 是3.9 所以虚拟环境名称也是 paddle_env117 activa…

6 Spring-AOP

文章目录 1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给容器…

常用设计模式介绍

前言 简说设计模式。 文章目录 前言一、设计模式的要素1、设计模式解决的问题2、设计模式分类1&#xff09;创建型设计模式2&#xff09;结构型设计模式3&#xff09;行为型设计模式 二、详细介绍1、创建型设计模式1&#xff09;工厂方法模式2&#xff09;抽象工厂模式3&#x…

基于FPGA的光纤通信系统设计

文章目录 光纤通信系统的组成发送端FPGA端口定义状态机设计代码示例 接收端功能模块端口定义状态机设计 光纤通信系统的组成 发送端FPGA 发送控制逻辑、数据编码、校验码生成、缓存控制、时钟控制 端口定义 状态机设计 代码示例 接收端功能模块 接收端控制逻辑、数据解码、…

谈谈伦敦银投资的价值吗?

白银作为贵金属家族中的一员&#xff0c;当然有着其自身的经济价值和投资价值&#xff0c;尤其是在通货膨胀或货币贬值的时候&#xff0c;伦敦银的价格往往会上涨&#xff0c;投资者参与其中就能起到保值增值的作用。 此外&#xff0c;白银还是一种很好的避险资产&#xff0c;…