《大鱼吃小鱼》这款游戏的历史渊源可以追溯到休闲游戏的兴起和发展。在游戏的早期发展阶段,开发者们开始探索各种简单而有趣的游戏玩法,以吸引玩家的注意力。在这样的背景下,《大鱼吃小鱼》应运而生,它结合了自然界的食物链原理与休闲游戏的轻松氛围,为玩家带来了一种新颖而有趣的游戏体验。
具体来说,这款游戏以神秘的海底世界为背景,让玩家扮演一条小鱼,通过不断吞噬比自己小的鱼类来逐渐成长,最终成为海洋中的霸主。在游戏中,每一关卡都设有玩法提示和海洋鱼类知识学习,使玩家在娱乐的同时也能学习到一些有关海洋生物的知识。
此外,游戏还添加了积分制度和动听愉快的背景音乐,使得整个游戏过程更加有趣和刺激。这种简单而富有挑战性的玩法,使得《大鱼吃小鱼》迅速流行起来,尤其是在白领阶层中,成为了一款广受欢迎的休闲游戏。
综上所述,《大鱼吃小鱼》这款游戏的历史渊源可以归结为休闲游戏的发展和探索,以及自然界食物链原理与游戏玩法的巧妙结合。这些因素共同促成了这款游戏的诞生和流行。
一、Java Swing是什么?
Java Swing是Java平台提供的一套图形用户界面(GUI)工具包,用于构建桌面应用程序的用户界面。Swing是AWT(Abstract Window Toolkit)的扩展和替代,提供了更丰富的组件集和更现代化的外观。Swing组件完全是用Java编写的,因此具有跨平台性,这意味着Swing应用程序在不同的操作系统(如Windows、Linux和macOS)上的外观和行为是一致的。
Swing提供了一系列GUI组件,包括按钮、文本框、列表、表格、滑块、进度条等,以及布局管理器,用于控制这些组件在界面上的排列和布局。它还提供了事件处理机制,允许开发者为组件添加交互行为,如点击事件、键盘事件等。
使用Swing,开发者可以创建复杂的桌面应用程序,包括具有多个窗口、对话框和自定义组件的界面。Swing还支持自定义组件的外观和行为,使开发者能够创建独特的用户界面。
总的来说,Java Swing是Java开发人员在构建桌面应用程序时经常使用的工具包之一,它提供了丰富的组件和灵活的布局管理,使得创建具有吸引力的用户界面变得相对容易。
二、Java Swing有哪些组件
JFrame:JFrame 是 Swing 组件的基础,用于显示程序界面。它是所有 Swing GUI 应用程序的顶层容器。
JPanel:JPanel 是一个容器,用于承载其他组件,如按钮、文本框等。它可以作为 JFrame 的内容面板,也可以作为其他容器的子面板。
JButton:JButton 是最常用的组件之一,用于创建可点击的按钮。
JLabel:JLabel 用于显示文本或图像,但不接受用户输入。
JTextField:JTextField 是一个单行文本框,允许用户输入单行文本。
JTextArea:JTextArea 是一个多行文本框,允许用户输入多行文本。
JComboBox:JComboBox 是一个下拉列表,允许用户从多个选项中选择一个。
JList:JList 用于显示一个可滚动的选项列表,用户可以选择一个或多个项目。
JScrollPane:JScrollPane 提供了滚动功能,可以将大型组件(如 JList 或 JTextArea)嵌入其中,以便在界面上滚动查看。
JMenuBar, JMenu, JMenuItem:这些组件用于创建菜单栏、菜单和菜单项,为用户提供程序功能的快速访问。
JSliderJFrame:JFrame 是 Swing 组件的基础,用于显示程序界面。它是所有 Swing GUI 应用程序的顶层容器。
JPanel:JPanel 是一个容器,用于承载其他组件,如按钮、文本框等。它可以作为 JFrame 的内容面板,也可以作为其他容器的子面板。
三.开始游戏制作
1.项目结构
2.代码如下:
总共设置了五种鱼类:
并对其按照战力 进行了排序(图片素材全都来自网络资源 由作者进行裁剪 如有侵权 敬请告知删除)
主角是懒羊羊
import javax.swing.*;
import java.awt.*;
public class BigEnemy extends Fish{
public BigEnemy()
{
power=3;
int r=(int)(Math.random()*2); //生成0,1两个随机数用来标志向左还是向右
if(r==0)
{
int a=(int)(Math.random()*2)+1;
isMoveLeft=false;
//朝向右 从最左边出来
x=-168;
image=new ImageIcon("image/BigRight"+a+".png").getImage();
}else
{
int a=(int)(Math.random()*2)+1;
isMoveLeft=true;
//朝向左,从最右边出来
x=1080;
image=new ImageIcon("image/BigLeft"+a+".png").getImage();
}
y=(int)(Math.random()*600);
length=250;
height=150;
}
@Override
public void drawFish(Graphics g) {
super.drawFish(g);
if(isMoveLeft) {
g.drawImage(image, x--, y, length, height, null);
}
else
{
g.drawImage(image, x++, y, length, height, null);
}
}
}
import javax.swing.*;
import java.awt.*;
public class BossEnemy extends Fish{
public BossEnemy()
{
power=4;
int r=(int)(Math.random()*4); //生成0,1两个随机数用来标志向左还是向右
if(r==0)
{
isMoveLeft=false;
//朝向右 从最左边出来
x=-400;
image=new ImageIcon("image/BossRight"+1+".png").getImage();
}else
{
int a=(int)(Math.random()*3)+1;
isMoveLeft=true;
//朝向左,从最右边出来
x=1100;
image=new ImageIcon("image/BossLeft"+a+".png").getImage();
}
y=(int)(Math.random()*800);
length=350;
height=250;
}
@Override
public void drawFish(Graphics g) {
super.drawFish(g);
if(isMoveLeft) {
g.drawImage(image, x--, y, length, height, null);
}
else
{
g.drawImage(image, x++, y, length, height, null);
}
}
}
import javax.swing.*;
import java.awt.*;
public class BugEnemy extends Fish{
public BugEnemy()
{
power=5;
int r=(int)(Math.random()*2); //生成0,1两个随机数用来标志向左还是向右
if(r==0)
{
isMoveLeft=false;
//朝向右 从最左边出来
x=-400;
image=new ImageIcon("image/boss1.GIF").getImage();
}else
{
isMoveLeft=true;
//朝向左,从最右边出来
x=1100;
image=new ImageIcon("image/MirenRight.png").getImage();
}
y=(int)(Math.random()*700);
length=350;
height=250;
}
@Override
public void drawFish(Graphics g) {
super.drawFish(g);
if(isMoveLeft) {
g.drawImage(image, x--, y, length, height, null);
}
else
{
g.drawImage(image, x++, y, length, height, null);
}
}
}
import java.awt.*;
public class Fish {
//鱼的属性:初始位置
int power;//战力值
int x;
int y;
int length;
int height;
Image image;
boolean isMoveLeft=true;
//对图片进行裁剪
int x1,x2;
int y1,y2;
public void drawFish(Graphics g){
};
}
import sun.audio.AudioPlayer;
import sun.audio.