精华内容
下载资源
问答
  • java小游戏代码大全
    千次阅读 多人点赞
    2021-04-05 16:29:34

    一、写在前面:

    《飞扬的小鸟》是一款曾经比较火热的小游戏,本文可以带你你从零开始,一步一步的开发出这款小游戏。

    • 语言
      Java

    • 工具
      IntelliJ IDEA,JDK 16

    • 准备工作

    创建好项目后,在正式开始编写代码前,先下载游戏素材放入正确的目录下。开发过程中使用的一些参数,如坐标、尺寸、速度等,你可以直接使用这些参数值,也可以尝试自定义这些参数值。

    二、知识要点

    1. Java的基本语法
    2. Java面向对象的三大特征(封装、继承、多态)
    3. Java Swing中常见API的使用 (Swing 包括了图形用户界面器件如:文本框,按钮,分隔窗格和表。)
    4. 鼠标监听
    5. IO流
    6. 线程

    三、开发步骤简介

    1. 创建项目flappyBird,然后在src目录下创建两个包,分别为game和resources
    2. 将素材文件全部放入resources文件中
    3. 在测试类文件中,制作窗口面板,并将背景图片放入面板中
    4. 设计游戏道具之「地面」,新建地面类,实现游戏背景中地面的移动
    5. 设计游戏道具之「柱子」,新建柱子类,实现游戏背景中柱子的移动
    6. 设计游戏道具之「小鸟」,新建小鸟类,在类中加入小鸟的各种参数,以及飞行、移动、是否撞柱子和地面等相关的方法
    7. 将小鸟也放入面板中,用数组模拟多帧
    8. 鼠标监听控制小鸟的飞行行为
    9. 添加计分和游戏结束游戏开始的画面

    由上述的分析,我们计划创建4个类:

    1. 小鸟类:设置小鸟参数,添加小鸟判断方法
    2. 柱子类:设置柱子参数,添加柱子移动方法
    3. 地面类:设置地面参数,添加地面移动方法
    4. 测试类:绘制游戏界面、添加开始结束、鼠标监听等方法

    四、项目代码

    注: 代码相关的解释都在代码注释中

    1、绘制面板,并将背景图片放置面板中

    在game包下面创建测试类BirdGame,并写入以下代码。
    注:抛出的异常IDEA都可以直接点击加入,而不用自己写。

    package game;
    
    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    
    // 游戏界面
    public class BirdGame extends JPanel {
    
        // 背景图片
        BufferedImage background;
    
        // 初始化游戏
        public BirdGame() throws Exception {
            // 初始化背景图片
            background = ImageIO.read(getClass().getResource("/resources/bg.png"));
        }
    
        // 绘制界面
        public void paint(Graphics g) {
            // 绘制背景
            g.drawImage(background, 0, 0, null);
        }
    
        // 启动方法
        public static void main(String[] args) throws Exception {
            JFrame frame = new JFrame();  // 创建窗口,JFrame是屏幕上window的对象,能放大、缩小、关闭。
            BirdGame game = new BirdGame();
            frame.add(game);
            frame.setSize(440, 670);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置窗口
            frame.setVisible(true);  // 显示窗口
        }
    }
    

    可以运行mian方法,来查看下效果。

    2、设计游戏道具之地面

    在game包下面定义地面类,并写入以下代码:

    package game;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    
    class Ground {
        BufferedImage image;  // 图片
        int x, y;  // 位置
        int width, height;  // 宽和高
    
        // 初始化地面
        public Ground() throws IOException {
            image = ImageIO.read(getClass().getResource("/resources/ground.png"));
            width = image.getWidth();
            height = image.getHeight();
            x = 0;
            y = 500;
        }
    
    	// 地面向左移动
        public void step(){
            x--;
            if(x == -109){
                x = 0;
            }
        }
    }
    

    3、设计游戏道具之柱子

    在game包下面定义柱子类,并写入以下代码:

    package game;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    class Column {
    
        BufferedImage image;  // 图片
        int x, y;  // 位置
        int width, height;  // 宽高
        int gap;  // 柱子之间的缝隙
        int distance;  // 柱子之间的距离
        Random random = new Random();  // 随机数工具
    
        // 初始化第N个柱子
        public Column(int n) throws IOException {
            image = ImageIO.read(getClass().getResource("/resources/column.png"));
            width = image.getWidth();
            height = image.getHeight();
            gap = 144;
            distance = 245;
            x = 550 + (n-1) * distance;
            y = random.nextInt(218) + 132;
        }
    
        // 柱子向左移动一步
        public void step(){
            x--;
            if (x == -width/2){
                x = distance * 2 - width / 2;
                y = random.nextInt(218) + 132;
            }
        }
    }
    

    4、设计游戏道具之小鸟

    在game包下面定义小鸟类,并写入以下代码:

    package game;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    
    class Bird {
    
        BufferedImage image;  // 图片
        int x, y;  // 位置
        int width, height;   // 宽高
        int size;  // 大小(用于碰撞检测)
        double g;  // 重力加速度
        double t;  // 位移的间隔时间
        double v0;  // 最初上抛速度
        double speed;  // 当前上抛速度
        double s;  // 经过t时间之后的位移
        double alpha;  // 小鸟的倾角(弧度)
    
        BufferedImage[] images;  // 一组图片,记录小鸟的动画帧
        int index;  // 动画帧数组的下标
    
        // 初始化小鸟
        public Bird() throws IOException {
            image = ImageIO.read(getClass().getResource("/resources/0.png"));
            width = image.getWidth();
            height = image.getHeight();
            x = 132;
            y = 280;
            size = 40;
    
            // 初始化位移参数
            g = 4;
            v0 = 20;
            t = 0.25;
            speed = v0;
            s = 0;
            alpha = 0;
    
            // 初始化动画帧参数
            images = new BufferedImage[8];
            for(int i=0; i<8; i++){
                images[i] = ImageIO.read(getClass().getResource("/resources/"+ i +".png"));
            }
            index = 0;
        }
    
        // 飞行动作 (变化一帧)
        public void fly(){
            index ++;
            image = images[(index / 12) % 8];
        }
    
        // 移动一步
        public void step(){
            double v0 = speed;
            s = v0 * t + g * t * t /2;  // 计算上抛运动位移
            y = y - (int)s;  // 计算鸟的坐标位置
            double v = v0 -g * t;  // 计算下次移动速度
            speed = v;
            alpha = Math.atan(s / 8);  //计算倾角(反正切函数)
        }
    
        // 向上飞行
        public void flappy(){
            speed = v0;   // 重置速度
        }
    
        // 检测小鸟是否碰撞到地面
        public boolean hit(Ground ground){
            boolean hit = y + size / 2 > ground.y;
            if(hit){
                y = ground.y - size / 2;
                alpha = -3.14159265358979323 / 2;
            }
            return hit;
        }
    
        // 检测小鸟是否撞到柱子
        public boolean hit(Column column){
            // 先检查是否在柱子的范围内
            if (x > column.x - column.width / 2 - size / 2
                    && x < column.x + column.width / 2 + size / 2){
                // 再检查是否在柱子的缝隙中
                if (y > column.y - column.gap / 2 + size / 2
                && y < column.y + column.gap /2 - size / 2){
                    return false;
                }
              return true;
            }
            return false;
        }
    }
    

    5、绘制游戏界面,加入初始化参数、方法、鼠标监听等

    5.1 定义游戏参数

    在BirdGame文件下增加成员变量,写入以下代码:

    // 开始与结束的图片
        BufferedImage startImage;
        BufferedImage gameoverImage;
    
    
        Ground ground;  // 地面
        Column column1, column2; // 柱子,由于同一画面中可能会出现两根柱子,因此我们定义两个柱子对象
        Bird bird;  // 小鸟
    
    
        int score;  // 游戏分数
        int state;   // 游戏状态
        // 状态常量
        public static final int START = 0;  // 开始
        public static final int RUNNING = 1;  // 运行
        public static final int GAME_OVER = 2;  // 结束
    
    5.2 初始化游戏参数

    在BirdGame的构造方法里面,初始化上述成员变量,写入以下代码:

    public BirdGame() throws IOException {
            // 初始化背景、开始和结束的图片
            background = ImageIO.read(getClass().getResource("/resources/bg.png"));
            startImage = ImageIO.read(getClass().getResource("/resources/start.png"));
            gameoverImage = ImageIO.read(getClass().getResource("/resources/gameover.png"));
    
            // 初始化地面、柱子、小鸟
            ground = new Ground();
            column1 = new Column(1);
            column2 = new Column(2);
            bird = new Bird();
    
            score = 0;   // 初始化分数
            state = START;  // 初始化状态
        }
    

    在这里初始化两个柱子是因为一个游戏界面上会出现两个柱子,每当通过一根柱子,分数就加1。

    5.3 绘制游戏界面

    在paint方法里面,绘制地面、柱子、小鸟、分数、开始图片、结束图片,写入以下代码:

    // 绘制界面
        public void paint(Graphics g){
    
            g.drawImage(background, 0, 0, null);  // 绘制背景
            // 注:画柱子的代码要写在画地面的代码之后,否则地面图片将无法将多余的柱子图片覆盖。
            g.drawImage(ground.image, ground.x, ground.y, null);   // 绘制地面
            // 绘制柱子
            g.drawImage(column1.image, column1.x - column1.width / 2, column1.y - column1.height / 2, null);
            g.drawImage(column2.image, column2.x - column2.width / 2, column2.y - column2.height / 2, null);
            // 绘制小鸟 (旋转坐标系)
            Graphics2D g2 = (Graphics2D) g;
            g2.rotate(-bird.alpha, bird.x, bird.y);
            g.drawImage(bird.image, bird.x - bird.width /2, bird.y - bird.height/2,null);
            g2.rotate(bird.alpha,bird.x,bird.y);
    
            // 绘制分数
            Font f = new Font(Font.SANS_SERIF, Font.BOLD, 40);
            g.setFont(f);
            g.drawString("" + score, 40, 60);
            g.setColor(Color.WHITE);
            g.drawString(""+score, 40-3, 60-3);
    
            // 绘制开始与结束界面
            switch (state){
                case START:
                    g.drawImage(startImage, 0, 0, null);
                    break;
                case GAME_OVER:
                    g.drawImage(gameoverImage, 0, 0, null);
                    break;
            }
        }
    

    这个时候运行main方法,就可以看到开始界面的情形了,修改状态state为RUNNING和GAME_OVER还可以看到运行时和结束时的情形。

    6、加入游戏动作

    6.1 定义开始方法

    在BirdGame类中增加开始游戏的方法,并在此方法内编排游戏的动作,写入以下代码:

     public void action() throws InterruptedException {
    		while (true){
                switch (state) {
                    case START:
                        bird.fly();  // 小鸟做出飞行动作
                        ground.step();  // 地面向左移动一步
                        break;
                    case RUNNING:
                        ground.step();   // 地面向左移动一步
                        column1.step();  // 柱子向左移动一步
                        column2.step();
                        bird.fly();   // 小鸟飞行
                        bird.step();  // 小鸟上下移动一步
                        if (bird.x == column1.x || bird.x == column2.x) {
                            score++;  // 计算分数
                        }
                        // 检查是否发生碰撞
                        if (bird.hit(ground) || bird.hit(column1) || bird.hit(column2)) {
                            state = GAME_OVER;
                        }
                        break;
                }
                repaint();   // 重新绘制界面
                Thread.sleep(1000/60);   // 休眠1000/60毫秒
            }
        }
    
    6.2 调用开始方法

    在main方法中调用上述方法,写入以下代码:

    // 启动方法
     public static void main(String[] args) throws IOException, InterruptedException {
            JFrame frame = new JFrame();
            BirdGame game = new BirdGame();
            frame.add(game);
            frame.setSize(440,670);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            game.action();
        }
    

    这时运行main方法,切换状态就能看见运动的地面和小鸟了。

    7、定义操控逻辑

    7.1 增加监听事件
    在action方法中,增加鼠标单击事件的监听器,写入以下代码(注:增加在while循环的前面):

    // 鼠标监听器
            MouseListener l = new MouseListener(){
                @Override
                public void mouseClicked(MouseEvent e) {}
    
                // 鼠标按下事件
                public void mousePressed(MouseEvent e){
                    try{
                        switch (state){
                            case START:
                                // 在开始状态,按下鼠标则为运行状态
                                state = RUNNING;
                                break;
                            case RUNNING:
                                // 在运行状态,按下鼠标则小鸟向上飞行
                                bird.flappy();
                                break;
                            case GAME_OVER:
                                // 在结束状态,按下鼠标则重置数据,再次转为开始状态
                                column1 = new Column(1);
                                column2 = new Column(2);
                                bird = new Bird();
                                score = 0;
                                state = START;
                                break;
                        }
                    }catch(Exception ex){
                       ex.printStackTrace();
                    }
                }
    
                @Override
                public void mouseReleased(MouseEvent e) {
                }
    
                @Override
                public void mouseEntered(MouseEvent e) {
                }
    
                @Override
                public void mouseExited(MouseEvent e) {
                }
            };
            // 将监听器添加到当前的面板上
            addMouseListener(l);
    

    这时运行main方法,就可以开始玩游戏啦,用鼠标来控制小鸟的运动。

    以上就是本次的全部代码啦~代码完整且可以运行,有问题可以评论区留言~记得点个赞哦

    更多相关内容
  • 包括以下游戏的源码:沙漠阻击手,3D魔方游戏,财富城市,贪吃蛇,俄罗斯方块,麻将,三维迷宫,扫雷,推箱子,算卦游戏和简单回合游戏11个游戏的源码,欢迎下载,供学习与交流。
  • java贪吃蛇小游戏代码java小游戏源码
  • java小游戏源码,亲测可用。内含 推箱子,坦克大战,俄罗斯方块,贪吃蛇,扫雷。好玩不贵,值得一探。
  • java小游戏开发代码

    2017-10-07 15:21:31
    java窗口小游戏开发,可作为java初级入门者学习使用。直接运行src\cn\zlr\game包下的MyFrame这个类可看到其中一个小游戏的运行。其他小游戏可能存在不完整的情况,读者可自行拓展
  • 求一个简单的Java小游戏代码

    万次阅读 2021-02-12 10:21:10
    展开全部连连看的源码package Lianliankan;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class lianliankan implements ActionListener{JFrame mainFrame; //主面...

    展开全部

    连连看的小源码

    package Lianliankan;

    import javax.swing.*;

    import java.awt.*;

    import java.awt.event.*;

    public class lianliankan implements ActionListener

    {

    JFrame mainFrame; //主面32313133353236313431303231363533e58685e5aeb931333335326239板

    Container thisContainer;

    JPanel centerPanel,southPanel,northPanel; //子面板

    JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组

    JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮

    JLabel fractionLable=new JLabel("0"); //分数标签

    JButton firstButton,secondButton; //分别记录两次被选中的按钮

    int grid[][] = new int[8][7];//储存游戏按钮位置

    static boolean pressInformation=false; //判断是否有按钮被选中

    int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标

    int i,j,k,n;//消除方法控制

    public void init(){

    mainFrame=new JFrame("JKJ连连看");

    thisContainer = mainFrame.getContentPane();

    thisContainer.setLayout(new BorderLayout());

    centerPanel=new JPanel();

    southPanel=new JPanel();

    northPanel=new JPanel();

    thisContainer.add(centerPanel,"Center");

    thisContainer.add(southPanel,"South");

    thisContainer.add(northPanel,"North");

    centerPanel.setLayout(new GridLayout(6,5));

    for(int cols = 0;cols < 6;cols++){

    for(int rows = 0;rows < 5;rows++ ){

    diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]));

    diamondsButton[cols][rows].addActionListener(this);

    centerPanel.add(diamondsButton[cols][rows]);

    }

    }

    exitButton=new JButton("退出");

    exitButton.addActionListener(this);

    resetButton=new JButton("重列");

    resetButton.addActionListener(this);

    newlyButton=new JButton("再来一局");

    newlyButton.addActionListener(this);

    southPanel.add(exitButton);

    southPanel.add(resetButton);

    southPanel.add(newlyButton);

    fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));

    northPanel.add(fractionLable);

    mainFrame.setBounds(280,100,500,450);

    mainFrame.setVisible(true);

    }

    public void randomBuild() {

    int randoms,cols,rows;

    for(int twins=1;twins<=15;twins++) {

    randoms=(int)(Math.random()*25+1);

    for(int alike=1;alike<=2;alike++) {

    cols=(int)(Math.random()*6+1);

    rows=(int)(Math.random()*5+1);

    while(grid[cols][rows]!=0) {

    cols=(int)(Math.random()*6+1);

    rows=(int)(Math.random()*5+1);

    }

    this.grid[cols][rows]=randoms;

    }

    }

    }

    public void fraction(){

    fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));

    }

    public void reload() {

    int save[] = new int[30];

    int n=0,cols,rows;

    int grid[][]= new int[8][7];

    for(int i=0;i<=6;i++) {

    for(int j=0;j<=5;j++) {

    if(this.grid[i][j]!=0) {

    save[n]=this.grid[i][j];

    n++;

    }

    }

    }

    n=n-1;

    this.grid=grid;

    while(n>=0) {

    cols=(int)(Math.random()*6+1);

    rows=(int)(Math.random()*5+1);

    while(grid[cols][rows]!=0) {

    cols=(int)(Math.random()*6+1);

    rows=(int)(Math.random()*5+1);

    }

    this.grid[cols][rows]=save[n];

    n--;

    }

    mainFrame.setVisible(false);

    pressInformation=false; //这里一定要将按钮点击信息归为初始

    init();

    for(int i = 0;i < 6;i++){

    for(int j = 0;j < 5;j++ ){

    if(grid[i+1][j+1]==0)

    diamondsButton[i][j].setVisible(false);

    }

    }

    }

    public void estimateEven(int placeX,int placeY,JButton bz) {

    if(pressInformation==false) {

    x=placeX;

    y=placeY;

    secondMsg=grid[x][y];

    secondButton=bz;

    pressInformation=true;

    }

    else {

    x0=x;

    y0=y;

    fristMsg=secondMsg;

    firstButton=secondButton;

    x=placeX;

    y=placeY;

    secondMsg=grid[x][y];

    secondButton=bz;

    if(fristMsg==secondMsg && secondButton!=firstButton){

    xiao();

    }

    }

    }

    public void xiao() { //相同的情况下能不能消去。仔细分析,不一条条注释

    if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){ //判断是否相邻

    remove();

    }

    else{

    for (j=0;j<7;j++ ) {

    if (grid[x0][j]==0){ //判断第一个按钮同行哪个按钮为空

    if (y>j) { //如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边

    for (i=y-1;i>=j;i-- ){ //判断第二按钮左侧直到第一按钮中间有没有按钮

    if (grid[x][i]!=0) {

    k=0;

    break;

    }

    else{ k=1; } //K=1说明通过了第一次验证

    }

    if (k==1) {

    linePassOne();

    }

    }

    if (y

    for (i=y+1;i<=j ;i++ ){ //判断第二按钮左侧直到第一按钮中间有没有按钮

    if (grid[x][i]!=0){

    k=0;

    break;

    }

    else { k=1; }

    }

    if (k==1){

    linePassOne();

    }

    }

    if (y==j ) {

    linePassOne();

    }

    }

    if (k==2) {

    if (x0==x) {

    remove();

    }

    if (x0

    for (n=x0;n<=x-1;n++ ) {

    if (grid[n][j]!=0) {

    k=0;

    break;

    }

    if(grid[n][j]==0 && n==x-1) {

    remove();

    }

    }

    }

    if (x0>x) {

    for (n=x0;n>=x+1 ;n-- ) {

    if (grid[n][j]!=0) {

    k=0;

    break;

    }

    if(grid[n][j]==0 && n==x+1) {

    remove();

    }

    }

    }

    }

    }

    for (i=0;i<8;i++ ) { //列

    if (grid[i][y0]==0) {

    if (x>i) {

    for (j=x-1;j>=i ;j-- ) {

    if (grid[j][y]!=0) {

    k=0;

    break;

    }

    else { k=1; }

    }

    if (k==1) {

    rowPassOne();

    }

    }

    if (x

    for (j=x+1;j<=i;j++ ) {

    if (grid[j][y]!=0) {

    k=0;

    break;

    }

    else { k=1; }

    }

    if (k==1) {

    rowPassOne();

    }

    }

    if (x==i) {

    rowPassOne();

    }

    }

    if (k==2){

    if (y0==y) {

    remove();

    }

    if (y0

    for (n=y0;n<=y-1 ;n++ ) {

    if (grid[i][n]!=0) {

    k=0;

    break;

    }

    if(grid[i][n]==0 && n==y-1) {

    remove();

    }

    }

    }

    if (y0>y) {

    for (n=y0;n>=y+1 ;n--) {

    if (grid[i][n]!=0) {

    k=0;

    break;

    }

    if(grid[i][n]==0 && n==y+1) {

    remove();

    }

    }

    }

    }

    }

    }

    }

    public void linePassOne(){

    if (y0>j){ //第一按钮同行空按钮在左边

    for (i=y0-1;i>=j ;i-- ){ //判断第一按钮同左侧空按钮之间有没按钮

    if (grid[x0][i]!=0) {

    k=0;

    break;

    }

    else { k=2; } //K=2说明通过了第二次验证

    }

    }

    if (y0

    for (i=y0+1;i<=j ;i++){

    if (grid[x0][i]!=0) {

    k=0;

    break;

    }

    else{ k=2; }

    }

    }

    }

    public void rowPassOne(){

    if (x0>i) {

    for (j=x0-1;j>=i ;j-- ) {

    if (grid[j][y0]!=0) {

    k=0;

    break;

    }

    else { k=2; }

    }

    }

    if (x0

    for (j=x0+1;j<=i ;j++ ) {

    if (grid[j][y0]!=0) {

    k=0;

    break;

    }

    else { k=2; }

    }

    }

    }

    public void remove(){

    firstButton.setVisible(false);

    secondButton.setVisible(false);

    fraction();

    pressInformation=false;

    k=0;

    grid[x0][y0]=0;

    grid[x][y]=0;

    }

    public void actionPerformed(ActionEvent e) {

    if(e.getSource()==newlyButton){

    int grid[][] = new int[8][7];

    this.grid = grid;

    randomBuild();

    mainFrame.setVisible(false);

    pressInformation=false;

    init();

    }

    if(e.getSource()==exitButton)

    System.exit(0);

    if(e.getSource()==resetButton)

    reload();

    for(int cols = 0;cols < 6;cols++){

    for(int rows = 0;rows < 5;rows++ ){

    if(e.getSource()==diamondsButton[cols][rows])

    estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);

    }

    }

    }

    public static void main(String[] args) {

    lianliankan llk = new lianliankan();

    llk.randomBuild();

    llk.init();

    }

    }

    //old 998 lines

    //new 318 lines

    更多追问追答

    追问

    有错误

    追答

    你要新建java工程 上网搜下java小游戏源码 自己好好看看

    追问

    好吧,我用的是文本

    本回答被提问者和网友采纳

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • java小游戏代码

    2018-07-09 16:30:47
    该内容为java代码,其中包含有java的一些小游戏(24点图形版、Flying Bird、java通讯录官吏系统源码、连连看等游戏。)希望对大家能有所帮助。
  • 使用JAVA编程语言实现贪吃蛇小游戏。JAVA的GUI界面编程的第一步!JAVA实现贪吃蛇小游戏代码包。三个类即可轻松实现。
  • 15个java小游戏源码合集:Java打猎射击游戏,Java对对碰按钮版(最终版),Java俄罗斯方块2,Java飞行射击类游戏,Java推箱子2,Java网络五子棋2等等15个Java小游戏源码。
  • Java源码包实例源码JAVA开发...Java坦克大战网络对战版源代码.rar Java声音播放程序源代码.rar JAVA实现CLDC与MIDP底层编程的代码.rar Java实现HTTP连接与浏览,Java源码下载.rar Java实现的FTP连接与数据浏览程序.rar
  • java小游戏代码可复制

    千次阅读 2021-06-19 10:59:29
    笔者面的是阿里的Java研发工程师岗,面试流程是4轮技术面+1轮hr。 文末可以获取面试资料参考 阿里巴巴Java岗面试题分享 1.HashMap 的内部结构?内部原理?和 HashTable 的区别,假如发⽣了 hash 碰撞,如何设计能让...

    前言

    由于作者面试过程中高度紧张,本文中只列出了自己还记得的部分题目。

    经历了漫长一个月的等待,终于在前几天通过面试官获悉已被蚂蚁金服录取,这期间的焦虑、痛苦自不必说,知道被录取的那一刻,一整年的阴霾都一扫而空了。

    笔者面的是阿里的Java研发工程师岗,面试流程是4轮技术面+1轮hr。

    文末可以获取面试资料参考

    阿里巴巴Java岗面试题分享

    1.HashMap 的内部结构?内部原理?和 HashTable 的区别,假如发⽣了 hash 碰撞,如何设计能让遍历效率⾼?

    2.讲一讲讲讲 ConcurrentHashMap吧。

    3.讲一下JVM虚拟机内存结构,以及它们的作⽤。

    4.讲讲JVM的类加载过程&&双亲委派模型。

    5.谈谈Java的垃圾回收算法。

    6.谈谈Java垃圾回收的触发条件。

    7.synchronized和Lock的区别。

    8.volatile的作⽤,为什么会出现变量读取不⼀致的情况,与 synchronized 的区别?

    9.++i 在多线程环境下是否存在问题,怎么解决?

    10.讲一讲Thread.sleep() 和 Thread.yield() 区别?

    11.讲讲常⽤的容器类?

    12.如何去除 ArrayList 的重复元素?

    • 直接采⽤ HashSet 即可。作为它的参数,然后再 addAll。但这种⽅式不能保证原来的顺序,如果要求顺序,可以使⽤ LinkedHashSet 即可。

    13.讲讲 Java 的泛型擦除,泛型主要是为了解决什么问题?如何⽤泛型做 Json 的解析的?

    14.谈谈 Java 的 Error 和 Exception 的区别联系。

    • Error 和 Exception 均集成⾃ Throwable,但 Error ⼀般指的是和虚拟机相关的问题,⽐如系统崩溃,虚拟机错误,OOM 等,遇到这样的错误,程序应该被终⽌。⽽ Exception 表示程序可以处理的异常,可以捕获并且可能恢复。

    15.说一下软引⽤和弱引⽤的区别?

    16.成员变量和静态⽅法可以被重写么?重写的规则是怎样的?

    17.内部类访问局部变量的时候,为什么变量必须加上fifinal修饰符?

    • 因为⽣命周期不同。

    18.什么情况会造成内存泄漏?

    19.什么是线程死锁,如何解决?

    20.十亿条淘宝购买记录,怎么获取出现最多的前十个 ?

    • 这是一道典型的有限内存的海量数据处理的题目。一般这类题目的解答无非是以下几种:
    • 分治,hash映射,堆排序,双层桶划分,Bloom Filter,bitmap,数据库索引,mapreduce等。
    • 具体情形都有很多不同的方案。这类题目可以到网上搜索一下,了解下套路,后面就基本都会了。

    21.说一下Innodb和MySIAM的区别

    22.说一下jvm内存模型,介绍一下你了解的垃圾收集器

    • 其实并没有jvm内存模型的概念。应该是Java内存模型或者jvm内存结构,这里面试者一定要听清楚问的是哪个,再回答。

    23.如何访问链表中间节点

    • 对于这个问题,我们首先能够想到的就是先遍历一遍整个的链表,然后计算出链表的长度,进而遍历第二遍找出中间位置的数据。这种方式非常简单。
    • 若题目要求只能遍历一次链表,那又当如何解决问题?
    • 可以采取建立两个指针,一个指针一次遍历两个节点,另一个节点一次遍历一个节点,当快指针遍历到空节点时,慢指针指向的位置为链表的中间位置,这种解决问题的方法称为快慢指针方法。

    23.HR问

    • 从技术角度来说,你觉得你跟前同事比怎么样?
    • 说一下自己的个人优势。
    • 工作中觉得哪方面欠缺?
    • 为什么想来阿里?阿里的什么方面吸引了你?

    最后

    小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

    关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

    image

    这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)可以直接【点击 “性能调优”】免费下载!

    的性能调优笔记(MySQL+Tomcat+JVM)可以直接【点击 “性能调优”】免费下载!**

    展开全文
  • 附件是几十个java游戏源代码打包,仅供学习使用。 1、纯java编写 2、主流小游戏
  • Java简单小游戏代码

    2017-11-03 11:34:19
    简单的java小游戏 适合初学者 具有启蒙的作用 初学者可以来看看
  • Java超级玛丽源代码,带背景音效,学习java编写游戏时可好好参考下,如果要运行看效果,需要在JAVA虚拟机情况下,运行编译生成的Mario.jar文件。
  • java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源...
  • java飞机大战的代码以及相应的各种素材,帮助新手入手java
  • java代码-使用java制作雷霆战机小游戏的的源代码 ——学习参考资料:仅用于个人学习使用!
  • 包含Java桌球小游戏源码及相关素材
  • 7个Java小游戏代码

    千次下载 热门讨论 2007-11-10 17:34:03
    7个Java小游戏代码 解压密码是:yykings
  • Java实现windows自带小游戏,蜘蛛纸牌小游戏源码
  • java图形界雷霆飞机射击大战小游戏代码(可直接运行).7zjava图形界雷霆飞机射击大战小游戏代码(可直接运行).7zjava图形界雷霆飞机射击大战小游戏代码(可直接运行).7zjava图形界雷霆飞机射击大战小游戏源...
  • 该资源包含5个JAVA小游戏源码,并且附有说明文档,需要的童鞋可以下载哦!
  • JAVA贪吃蛇小游戏代码系列

    万次阅读 多人点赞 2018-12-15 11:00:15
    Java贪吃蛇小游戏元源代码

    欢迎关注公众号:

    在这里插入图片描述

    获取贪吃蛇小游戏的源代码。

    贪吃蛇小游戏运行结果如下:
    启动界面:
    在这里插入图片描述
    运行界面:
    在这里插入图片描述
    重启界面:
    在这里插入图片描述
    源代码框架如下:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190505112628451.pn

    注:在运行程序的时候,得重新设计窗体的大小,以适合自己的电脑,其次,图片类和音乐类都保存在我自己电脑的F盘的相应路径下,在运行程序的时候需要将图片类和音乐类保存到自己的本地磁盘路径中,然后在程序中改变路径。

    package snakeGame;/*
     * @project project
     * @author liyongping
     * @creed: just do it
     * @ date 2021/12/21 17:43
     * @ version 1.0
     */
    
    //设置类,定义游戏中的各个参数,
    
    public class Setting {
        //图片路径
        String background="src/snakeGame/image/timg.jpg";
        String restartPicture="src/snakeGame/image/restartPicture.jpg";
        String background1="src/snakeGame/image/background1.jpg";
        String up="src/snakeGame/image/up.png";
        String down="src/snakeGame/image/down.png";
        String left="src/snakeGame/image/left.png";
        String right="src/snakeGame/image/right.png";
        String food="src/snakeGame/image/food.png";
        String body="src/snakeGame/image/body.png";
    
        //音乐路径
        String applauseMusic="src/snakeGame/music/applauseMusic.wav";
        String eatFoodMusic="src/snakeGame/music/eatFoodMusic.wav";
        String DeadMusic="src/snakeGame/music/DeadMusic.wav";
        String pushButtonMusic="src/snakeGame/music/pushButtonMusic.wav";
        String encouragMusic="src/snakeGame/music/encouragMusic.wav";
        String backgroundMusic="src/snakeGame/music/backgroundMusic.wav";
    
    }
    
    
    package snakeGame;
    
    /* Test类的主要任务是设计程序运行后的界面,包括 程序启动的界面和游戏运行界面。
     * 程序启动的界面包括背景图片和进入运行界面的Button,点击按钮之后程序关闭启动界面进入到运行界面,
     * 运行界面设置在SnakeGame类中,Test类大体设置了运行界面的大小可见与否等。
     */
    
    import com.sun.deploy.panel.RuleSetViewerDialog;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class Start    extends JFrame implements ActionListener  {
    	public static RuleSetViewerDialog frame1;
    	static  JFrame frame = new  JFrame( );
        Setting setting =new Setting();
    	public  Start(){                                                 //设置启动界面
    		addFrame();//添加框架
    		AddButton();//添加按钮
    		AddPicture();//添加图片
    	}
    	public void addFrame(){
    		frame.setUndecorated(true);                                //用于取消边框背景
    		frame.setLayout (null);
    		frame.setSize(1000,600);//定义游戏边框大小
    		frame.setLocation(100, 200);//定义游戏边框位置
    		frame.setLocationRelativeTo (null);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}
    
    	//定义进入游戏按钮
    	public  void  AddButton() {
    		RButton  enterButton =new RButton("进入游戏");
    		enterButton.setFont(new Font("华文行楷", Font.BOLD, 35));//定义字体
    		enterButton.setForeground(Color.red);
    		enterButton.setBounds (450,  450 , 200, 100);
    		enterButton.setBackground(Color.white);
    		frame.add(enterButton);
    		enterButton.addActionListener(this);//添加按键响应事件
    	}
    	//加入背景图片
    	public  void  AddPicture() {
    		ImageIcon img = new ImageIcon(setting.background);
    		JLabel Label= new JLabel(img);
    		Label.setBounds(0,0,1000,600);            //设置大小
    		frame.getLayeredPane().add(Label,new Integer(Integer.MIN_VALUE));      //设置图片底层和按钮在容器中的顺序
    		JPanel  jp  =(JPanel)frame.getContentPane();
    		jp.setOpaque(false);                                                   //设置透明与否
    	}
    
    	/*设置按钮的监听器事件
    	 * 进入按钮的监听器事件的主要功能是当点击按钮以后,程序关掉启动界面,并转入运行界面。
    	 * 主要实现原理是定义一个新界面的类,作为运行界面,然后定义一个关掉启动界面的方法,然后在监听器事件中,
    	 * 调用关掉界面的方法,实例化运行界面
    	 */
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		new music(setting.pushButtonMusic);
    		// TODO 自动生成的方法存根
    		closeThis();		   //关掉当前界面
    		new snakeGameFrame ();//实例化运行界面
    	}
    	private void closeThis() {
    		// TODO 自动生成的方法存根
    		frame.dispose();
    		frame.setVisible(false);
    	}
    }
    
    package snakeGame;
    /*
     * 定义一个类,用来描述贪吃蛇游戏中的蛇,蛇身上的每一个点,通过建立snakeNode的对象,指定不同的X轴和Y轴的值,就能组成一个蛇身。
     * 同时可以获得蛇身上的x和y点坐标,和颜色
     */
    import java.awt.Color;
    
    public class SnakeNode {    //定义蛇身集合中的各个元素点,x,y。以及颜色三个蛇的关键组成
        private int x;
        private int y;
        private Color color;//定义颜色
    	public int setX=20;//定义蛇身每个点的大小
    	public int setY=20;//定义蛇身每个点的大小
        public SnakeNode() {
            super();
        }
        public SnakeNode(int x, int y, Color color) {
            super();
            this.x = x;
            this.y = y;
            this.color = color;
        }
        public int getX() {
            return x;
        }
        public void setX(int x) {
            this.x = x;
        }
        public int getY() {
            return y;
        }
        public void setY(int y) {
            this.y = y;
        }
        public Color getColor() {
            return color;
        }
        public void setColor(Color color) {
            this.color = color;
        }
    }
    
    展开全文
  • java编程小游戏

    2018-12-10 19:31:39
    一款利用java编写的简易小游戏,将解压后的文件夹和源代码放入一个项目下即可成功运行
  • 触屏Java游戏 触打倒日本.jar(含截图+源代码 )触屏Java游戏 触打倒日本.jar(含截图+源代码 )触屏Java游戏 触打倒日本.jar(含截图+源代码 )触屏Java游戏 触打倒日本.jar(含截图+源代码 )触屏Java游戏...
  • 20款java小游戏源码Zip

    2017-06-05 23:38:12
    包含20款java小游戏源码,帮助你更好的学习java
  • 选中src Mark Directory as — Souces 把src添加为根目录 在这里插入图片描述 3.2.2 页面设计 创建java Class 文件 Snake - new - java class SnakeName 接下来的时候会对这个SnakeName.java里面的代码不停完善 ...
  • java桌球游戏代码

    2018-04-20 12:53:39
    java桌球游戏java桌球游戏java桌球游戏java桌球游戏 (this is a very good play game!!!!!!)
  • 50个java游戏代码

    2020-08-25 16:01:35
    50个java游戏源代码。50个java游戏源代码,包括斗地主,黄金矿工,等50个经典小游戏的源码,非常值得学习

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 146,410
精华内容 58,564
关键字:

java小游戏代码大全