java简易小游戏[通俗易懂]

java简易小游戏[通俗易懂]java简易小游戏制作游戏思路:设置人物移动,游戏规则,积分系统,随机移动的怪物,游戏胜负判定,定时器。游戏内容部分package代码部分;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;

大家好,又见面了,我是你们的朋友全栈君。

java简易小游戏制作

游戏思路:设置人物移动,游戏规则,积分系统,随机移动的怪物,游戏胜负判定,定时器。

游戏内容部分

package 代码部分;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

public class TestGamePanel extends JPanel implements KeyListener, ActionListener { 
   

    //初始化人物坐标
    int p1X;
    int p1Y;
    int p2X;
    int p2Y;

    boolean isStart = false;    //游戏是否开始
    boolean p1isFail = false;     //游戏是否失败
    boolean p2isFail = false;
    String fx1;         //左:L, 右:R, 上:U, 下:D
    String fx2;

    Timer timer = new Timer(50,this);//定时器

    //积分
    int p1score = 0;
    int p2score = 0;

    //苹果
    int AppleX;
    int AppleY;

    //怪物
    int monster1X;
    int monster1Y;
    int monster2X;
    int monster2Y;
    int monster3X;
    int monster3Y;
    int monster4X;
    int monster4Y;
    int monster5X;
    int monster5Y;

    //随机积分
    Random random = new Random();


    public TestGamePanel() { 
   
        init();
        this.setFocusable(true);
        this.addKeyListener(this);
        timer.start();
    }


    //初始化
    public void init() { 
   
        p1X = 25;
        p1Y = 150;
        p2X = 700;
        p2Y = 550;
        fx1 = "L";
        fx2 = "R";
        monster1X = 25*random.nextInt(28);
        monster1Y = 100 + 25*random.nextInt(18);
        monster2X = 25*random.nextInt(28);
        monster2Y = 100 + 25*random.nextInt(18);
        monster3X = 25*random.nextInt(28);
        monster3Y = 100 + 25*random.nextInt(18);
        monster4X = 25*random.nextInt(28);
        monster4Y = 100 + 25*random.nextInt(18);
        monster5X = 25*random.nextInt(28);
        monster5Y = 100 + 25*random.nextInt(18);
        AppleX = 25*random.nextInt(28);
        AppleY = 100 + 25*random.nextInt(18);

        add(kaishi);
        add(chongkai);
        guize.addActionListener(new ActionListener() { 
   
            @Override
            public void actionPerformed(ActionEvent e) { 
   
                new TestGameRule();
            }
        });
    }


    //游戏功能按钮
    JButton kaishi = new JButton("开始");
    JButton chongkai = new JButton("重新开始");
    JButton guize = new JButton("游戏规则");

    //画板
    @Override
    protected void paintComponent(Graphics g) { 
   
        super.paintComponent(g);
        TestGameData.header.paintIcon(this,g,0,0);
        g.setColor(Color.CYAN);
        g.fillRect(0,100,780,520);

        //画人物
        TestGameData.p1player1.paintIcon(this,g,p1X,p1Y);
        TestGameData.p2player1.paintIcon(this,g,p2X,p2Y);

        //画得分
        g.setFont(new Font("华文彩云",Font.BOLD,18));  //设置字体
        g.setColor(Color.RED);
        g.drawString("玩家1:" + p1score,20,20 );
        g.drawString("玩家2:" + p2score,680,20);

        //画苹果
        TestGameData.apple.paintIcon(this,g,AppleX,AppleY);

        //画静态怪物
        TestGameData.monster.paintIcon(this,g,monster1X,monster1Y);
        TestGameData.monster.paintIcon(this,g,monster2X,monster2Y);
        TestGameData.monster.paintIcon(this,g,monster3X,monster3Y);
        TestGameData.monster.paintIcon(this,g,monster4X,monster4Y);
        TestGameData.monster.paintIcon(this,g,monster5X,monster5Y);



        //游戏提示,是否开始
        if(!isStart) { 
   
            g.setColor(Color.BLACK);
            g.setFont(new Font("华文彩云",Font.BOLD,30));
            g.drawString("请点击开始游戏",300,300);
        }

        //游戏结束提示,是否重新开始
        if(p2isFail || p1score == 15) { 
   
            g.setColor(Color.RED);
            g.setFont(new Font("华文彩云",Font.BOLD,30));
            g.drawString("玩家一获胜,请点击重新开始游戏",200,300);
        }
        if(p1isFail || p2score == 15) { 
   
            g.setColor(Color.RED);
            g.setFont(new Font("华文彩云",Font.BOLD,30));
            g.drawString("玩家二获胜,请点击重新开始游戏",200,300);
        }
    }

    //键盘监听事件
    @Override
    public void keyPressed(KeyEvent e) { 
   
        //控制人物走动
        //玩家1
        if(isStart == true && (p1isFail == false && p2isFail == false)) { 
   
            if(e.getKeyCode() == KeyEvent.VK_D) { 
   
                fx1 = "R";
                p1X += 25;
                if(p1X >= 750) { 
   p1X = 750;}
            }
            else if(e.getKeyCode() == KeyEvent.VK_A) { 
   
                fx1 = "L";
                p1X -= 25;
                if(p1X <= 0) { 
   p1X = 0;}
            }
            else if(e.getKeyCode() == KeyEvent.VK_W) { 
   
                fx1 = "U";
                p1Y -= 25;
                if(p1Y <= 100) { 
   p1Y = 100;}
            }
            else if(e.getKeyCode() == KeyEvent.VK_S) { 
   
                fx1 = "D";
                p1Y += 25;
                if(p1Y >= 600) { 
   p1Y = 600;}
            }

            //玩家2
            if(e.getKeyCode() == KeyEvent.VK_RIGHT) { 
   
                fx2 = "R";
                p2X += 25;
                if(p2X >= 750) { 
   p2X = 750;}
            }
            else if(e.getKeyCode() == KeyEvent.VK_LEFT) { 
   
                fx2 = "L";
                p2X -= 25;
                if(p2X <= 0) { 
   p2X = 0;}
            }
            else if(e.getKeyCode() == KeyEvent.VK_UP) { 
   
                fx2 = "U";
                p2Y -= 25;
                if(p2Y <= 100) { 
   p2Y = 100;}
            }
            else if(e.getKeyCode() == KeyEvent.VK_DOWN) { 
   
                fx2 = "D";
                p2Y += 25;
                if(p2Y >= 600) { 
   p2Y = 600;}
            }
        }
        repaint();
    }

    @Override
    public void actionPerformed(ActionEvent e) { 
   
        kaishi.addActionListener(new ActionListener() { 
   
            @Override
            public void actionPerformed(ActionEvent e) { 
   
                isStart = true;
            }
        });
        chongkai.addActionListener(new ActionListener() { 
   
            @Override
            public void actionPerformed(ActionEvent e) { 
   
                if(p1isFail) { 
    p1isFail = !p1isFail; init(); }
                if(p2isFail) { 
    p2isFail = !p2isFail; init(); }
            }
        });

        add(kaishi);
        add(chongkai);
        add(guize);

        if(isStart == true && (p1isFail == false && p2isFail == false)) { 
   

            //让人动起来
            if(fx1.equals("R")) { 
   
                p1X += 25;
                if(p1X >= 750) { 
    p1X = 750; }
            }
            if(fx1.equals("L")) { 
   
                p1X -= 25;
                if(p1X <= 0) { 
    p1X = 0; }
            }
            if(fx1.equals("U")) { 
   
                p1Y -= 25;
                if(p1Y <= 100) { 
    p1Y = 100; }
            }
            if(fx1.equals("D")) { 
   
                p1Y += 25;
                if(p1Y >= 600) { 
    p1Y = 600; }
            }

            if(fx2.equals("R")) { 
   
                p2X += 25;
                if(p2X >= 750) { 
    p2X = 750; }
            }
            if(fx2.equals("L")) { 
   
                p2X -= 25;
                if(p2X <= 0) { 
    p2X = 0; }
            }
            if(fx2.equals("U")) { 
   
                p2Y -= 25;
                if(p2Y <= 100) { 
    p2Y = 100; }
            }
            if(fx2.equals("D")) { 
   
                p2Y += 25;
                if(p2Y >= 600) { 
    p2Y = 600; }
            }

            //让怪物动起来
                //怪物1
                int i = random.nextInt(4) + 1;
                if(i == 1) { 
   
                    monster1X += 5;
                    if(monster1X >= 750) { 
   monster1X = 750;}
                }
                if(i == 2) { 
   
                    monster1X -= 5;
                    if(monster1X <= 0) { 
   monster1X = 0;}
                }
                if(i == 3) { 
   
                    monster1Y += 5;
                    if(monster1Y >= 600) { 
   monster1Y = 600;}
                }
                if(i == 4) { 
   
                    monster1Y -= 5;
                    if(monster1Y <= 100) { 
   monster1Y = 100;}
                }
            //怪物2
            int j = random.nextInt(4) + 1;
            if(j == 1) { 
   
                monster2X += 5;
                if(monster2X >= 750) { 
   monster2X = 750;}
            }
            if(j == 2) { 
   
                monster2X -= 5;
                if(monster2X <= 0) { 
   monster2X = 0;}
            }
            if(j == 3) { 
   
                monster2Y += 5;
                if(monster2Y >= 600) { 
   monster2Y = 600;}
            }
            if(j == 4) { 
   
                monster2Y -= 5;
                if(monster2Y <= 100) { 
   monster2Y = 100;}
            }
            //怪物3
            int k = random.nextInt(4) + 1;
            if(k == 1) { 
   
                monster3X += 5;
                if(monster3X >= 750) { 
   monster3X = 750;}
            }
            if(k == 2) { 
   
                monster3X -= 5;
                if(monster3X <= 0) { 
   monster3X = 0;}
            }
            if(k == 3) { 
   
                monster3Y += 5;
                if(monster3Y >= 600) { 
   monster3Y = 600;}
            }
            if(k == 4) { 
   
                monster3Y -= 5;
                if(monster3Y <= 100) { 
   monster3Y = 100;}
            }
            //怪物4
            int n= random.nextInt(4) + 1;
            if(n == 1) { 
   
                monster4X += 5;
                if(monster4X >= 750) { 
   monster4X = 750;}
            }
            if(n == 2) { 
   
                monster4X -= 5;
                if(monster4X <= 0) { 
   monster4X = 0;}
            }
            if(n == 3) { 
   
                monster4Y += 5;
                if(monster4Y >= 600) { 
   monster4Y = 600;}
            }
            if(n == 4) { 
   
                monster4Y -= 5;
                if(monster4Y <= 100) { 
   monster4Y = 100;}
            }
            //怪物5
            int m = random.nextInt(4) + 1;
            if(m == 1) { 
   
                monster5X += 5;
                if(monster5X >= 750) { 
   monster5X = 750;}
            }
            if(m == 2) { 
   
                monster5X -= 5;
                if(monster5X <= 0) { 
   monster5X = 0;}
            }
            if(m == 3) { 
   
                monster5Y += 5;
                if(monster5Y >= 600) { 
   monster5Y = 600;}
            }
            if(m == 4) { 
   
                monster5Y -= 5;
                if(monster5Y <= 100) { 
   monster5Y = 100;}
            }



            //如果有玩家吃到食物
            if(p1X == AppleX && p1Y == AppleY) { 
   
                p1score++;
                AppleX = 25*random.nextInt(28);
                AppleY = 100 + 25*random.nextInt(18);
            } else if(p2X == AppleX && p2Y == AppleY) { 
   
                p2score++;
                AppleX = 25*random.nextInt(28);
                AppleY = 100 + 25*random.nextInt(18);
            }

            //如果有玩家碰到怪物,判定死亡,游戏结束 后续有修改,暂用
            //怪物1死亡
            if(p1X >= monster1X -25 && p1X <= monster1X +25) { 
   
                if(p1Y == monster1Y) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p1Y >= monster1Y -25 && p1Y <= monster1Y +25) { 
   
                if(p1X == monster1X) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p2X >= monster1X -25 && p2X <= monster1X +25) { 
   
                if(p2Y == monster1Y) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            if(p2Y >= monster1Y -25 && p2Y <= monster1Y +25) { 
   
                if(p2X == monster1X) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            //怪物2死亡
            if(p1X >= monster2X -25 && p1X <= monster2X +25) { 
   
                if(p1Y == monster2Y) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p1Y >= monster2Y -25 && p1Y <= monster2Y +25) { 
   
                if(p1X == monster2X) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p2X >= monster2X -25 && p2X <= monster2X +25) { 
   
                if(p2Y == monster2Y) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            if(p2Y >= monster2Y -25 && p2Y <= monster2Y +25) { 
   
                if(p2X == monster2X) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            //怪物3死亡
            if(p1X >= monster3X -25 && p1X <= monster3X +25) { 
   
                if(p1Y == monster3Y) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p1Y >= monster3Y -25 && p1Y <= monster3Y +25) { 
   
                if(p1X == monster3X) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p2X >= monster3X -25 && p2X <= monster3X +25) { 
   
                if(p2Y == monster3Y) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            if(p2Y >= monster3Y -25 && p2Y <= monster3Y +25) { 
   
                if(p2X == monster3X) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            //怪物4死亡
            if(p1X >= monster4X -25 && p1X <= monster4X +25) { 
   
                if(p1Y == monster4Y) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p1Y >= monster4Y -25 && p1Y <= monster4Y +25) { 
   
                if(p1X == monster1X) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p2X >= monster4X -25 && p2X <= monster4X +25) { 
   
                if(p2Y == monster4Y) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            if(p2Y >= monster4Y -25 && p2Y <= monster4Y +25) { 
   
                if(p2X == monster4X) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            //怪物5死亡
            if(p1X >= monster5X -25 && p1X <= monster5X +25) { 
   
                if(p1Y == monster5Y) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p1Y >= monster5Y -25 && p1Y <= monster5Y +25) { 
   
                if(p1X == monster5X) { 
    p1isFail = !p1isFail; p1score = p2score = 0;}
            }
            if(p2X >= monster5X -25 && p2X <= monster5X +25) { 
   
                if(p2Y == monster5Y) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            if(p2Y >= monster5Y -25 && p2Y <= monster5Y+25) { 
   
                if(p2X == monster5X) { 
    p2isFail = !p2isFail; p1score = p2score = 0;}
            }
            //如果有玩家达到指定积分,判定获胜,游戏结束
            if(p1score == 15) { 
    p2isFail = !p2isFail; }
            if(p2score == 15) { 
    p1isFail = !p1isFail; }

            repaint();
        }
        timer.start();
    }



    @Override
    public void keyTyped(KeyEvent e) { 
   

    }

    @Override
    public void keyReleased(KeyEvent e) { 
   

    }
}

游戏规则(使用弹窗)部分

package 代码部分;

import javax.swing.*;
import java.awt.*;

public class TestGameRule extends JDialog { 
   
    private int num = 1;
    public TestGameRule() { 
   
        TextArea textArea = new TextArea(20,10);
        textArea.setText("游戏中有五个怪物随机移动,碰到怪物算死亡\\\n游戏中有随机出现的苹果,碰到一个苹果加一分,\\\n先达到十五分或者对手死亡算游戏胜利!");
        JScrollPane jScrollPane = new JScrollPane(textArea);
        this.add(jScrollPane);
        this.setBounds(200,200,400,400);
        this.setVisible(true);
        textArea.setEditable(false);
        setResizable(false);
        textArea.setBackground(Color.PINK);
    }
}

图片素材

package 代码部分;

import javax.swing.*;
import java.net.URL;

public class TestGameData { 
   
    public static URL headerurl = TestGameData.class.getResource("/图片素材/header.jpg");
    public static URL p1player1url = TestGameData.class.getResource("/图片素材/1.jpg");
    public static URL p2player2url = TestGameData.class.getResource("/图片素材/2.jpg");
    public static URL appleurl = TestGameData.class.getResource("/图片素材/apple.jpg");
    public static URL monsterurl = TestGameData.class.getResource("/图片素材/monster.jpg");

    public static ImageIcon p1player1 = new ImageIcon(p1player1url);
    public static ImageIcon p2player1 = new ImageIcon(p2player2url);
    public static ImageIcon header = new ImageIcon(headerurl);
    public static ImageIcon apple = new ImageIcon(appleurl);
    public static ImageIcon monster = new ImageIcon(monsterurl);
}

主函数

package 代码部分;

import javax.swing.*;

public class TestStartGame { 
   
    public static void main(String[] args) { 
   
        //制作窗口
        JFrame jFrame = new JFrame("2D对战小游戏");
        jFrame.setBounds(10,10,790,660);
        jFrame.setResizable(false);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //添加游戏面板
        jFrame.add(new TestGamePanel());
        //设置可见
        jFrame.setVisible(true);
    }
}

实现效果
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158962.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • VDBENCH 试用

    VDBENCH 试用linux环境首先安装java环境建议直接安装jdk,32或者64,看你linux的版本。vdbench目录下 ./vdbench-t

  • 多线程中 ManualResetEvent 的用法[通俗易懂]

    多线程中 ManualResetEvent 的用法[通俗易懂]///<summary>///手动重启///</summary>privateManualResetEventmanualReset=newManualR

  • 开心娱乐辅助器_快乐西游怎么开内挂

    开心娱乐辅助器_快乐西游怎么开内挂经过前两篇文章,我们已经可以得到了我们的花园的基本信息了,并用xml反序列化来映射到相应的实体类中,有了花园信息,我就就要来研究其一些动作的实现了,比如说:浇水、除草、收获、偷盗等等功能具体是怎么来实现的, 首先还是打开fiddler2抓一下包看看收获:GET/!house/!garden/havest.php?verify=22842320%…

  • m3u8格式视频源列表[通俗易懂]

    m3u8格式视频源列表[通俗易懂]平时,需要测试m3u8格式视频的播放,会使用一些可用的播放源,整理在这里:constsourceList=[{name:’cctv1′,src:’http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8′},{name:’cctv2′,src:’http://ivi.bupt.edu.cn/hls/cc…

  • Tomcat如何打破双亲委派机制实现隔离Web应用的?

    Tomcat通过自定义类加载器WebAppClassLoader打破双亲委托,即重写了JVM的类加载器ClassLoader的findClass方法和loadClass方法,这样做的目的是优先加载Web应用目录下的类。除此之外,你觉得Tomcat的类加载器还需要完成哪些需求呢?或者说在设计上还需要考虑哪些方面?我们知道,Tomcat作为Servlet容器,它负责加载我们的Servlet类,此外它还负责加载Servlet所依赖的JAR包。并且Tomcat本身也是一个Java程序,因此它需要加载自己的类和依赖

  • Linux内核的整体架构

    Linux内核的整体架构1.前言本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。注:本文和其它的“Linux内核分析”文章都基于如下约定:  a)内核版本为Linux3.10.29(该版本是一个longterm的版本,会被Linux社区持续维

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号