精华内容
下载资源
问答
  • java编写的小游戏源代码分析
    千次阅读
    2021-03-13 02:43:36

    用java编写的小游戏源代码分析

    1/5/2008人气:12951

    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    import java.util.*;

    public class GreedSnake implements KeyListener{

    JFrame mainFrame;

    Canvas paintCanvas;

    JLabel labelScore;

    SnakeModel snakeModel = null;

    public static final int canvasWidth = 200;

    public static final int canvasHeight = 300;

    public static final int nodeWidth = 10;

    public static final int nodeHeight = 10;

    public GreedSnake() {

    mainFrame = new JFrame("GreedSnake");

    Container cp = mainFrame.getContentPane();

    labelScore = new JLabel("Score:");

    cp.add(labelScore, BorderLayout.NORTH);

    paintCanvas = new Canvas();

    paintCanvas.setSize(canvasWidth+1,canvasHeight+1);

    paintCanvas.addKeyListener(this);

    cp.add(paintCanvas, BorderLayout.CENTER);

    JPanel panelButtom = new JPanel();

    panelButtom.setLayout(new BorderLayout());

    JLabel labelHelp;

    labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

    panelButtom.add(labelHelp, BorderLayout.NORTH);

    labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);

    panelButtom.add(labelHelp, BorderLayout.CENTER);

    labelHelp = new JLabel("SPACE or P for pause",JLabel.CENTER);

    panelButtom.add(labelHelp, BorderLayout.SOUTH);

    cp.add(panelButtom,BorderLayout.SOUTH);

    mainFrame.addKeyListener(this);

    mainFrame.pack();

    mainFrame.setResizable(false);

    mainFrame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

    mainFrame.setVisible(true);

    begin();

    }

    public void keyPRessed(KeyEvent e){

    int keyCode = e.getKeyCode();

    if (snakeModel.running)

    switch(keyCode){

    case KeyEvent.VK_UP:

    snakeModel.changeDirection(SnakeModel.UP);

    break;

    case KeyEvent.VK_DOWN:

    snakeModel.changeDirection(SnakeModel.DOWN);

    break;

    case KeyEvent.VK_LEFT:

    snakeModel.changeDirection(SnakeModel.LEFT);

    break;

    case KeyEvent.VK_RIGHT:

    snakeModel.changeDirection(SnakeModel.RIGHT);

    break;

    case KeyEvent.VK_ADD:

    case KeyEvent.VK_PAGE_UP:

    snakeModel.speedUp();

    break;

    case KeyEvent.VK_SUBTRACT:

    case KeyEvent.VK_PAGE_DOWN:

    snakeModel.speedDown();

    break;

    case KeyEvent.VK_SPACE:

    case KeyEvent.VK_P:

    snakeModel.changePauseState();

    break;

    default:

    }

    if (keyCode == KeyEvent.VK_R

    keyCode == KeyEvent.VK_S

    keyCode == KeyEvent.VK_ENTER){

    snakeModel.running = false;

    begin();

    }

    }

    public void keyReleased(KeyEvent e){

    }

    public void keyTyped(KeyEvent e){

    }

    void repaint(){

    Graphics g = paintCanvas.getGraphics();

    //draw background

    g.setColor(Color.WHITE);

    g.fillRect(0,0,canvasWidth,canvasHeight);

    // draw the snake

    g.setColor(Color.BLACK);

    LinkedList na = snakeModel.nodeArray;

    Iterator it = na.iterator();

    while(it.hasNext()){

    Node n = (Node)it.next();

    drawNode(g,n);

    }

    // draw the food

    g.setColor(Color.RED);

    Node n = snakeModel.food;

    drawNode(g,n);

    updateScore();

    }

    private void drawNode(Graphics g, Node n){

    g.fillRect(n.x*nodeWidth,

    n.y*nodeHeight,

    nodeWidth-1,

    nodeHeight-1);

    }

    public void updateScore(){

    String s = "Score: " + snakeModel.score;

    labelScore.setText(s);

    }

    void begin(){

    if (snakeModel == null !snakeModel.running){

    snakeModel = new SnakeModel(this,

    canvasWidth/nodeWidth,

    canvasHeight/nodeHeight);

    (new Thread(snakeModel)).start();

    }

    }

    public static void main(String[] args){

    GreedSnake gs = new GreedSnake();

    }

    }

    ///

    // 文件2

    ///

    import java.util.*;

    import javax.swing.*;

    class SnakeModel implements Runnable{

    GreedSnake gs;

    boolean[][] matrix;

    LinkedList nodeArray = new LinkedList();

    Node food;

    int maxX;

    int maxY;

    int direction = 2;

    boolean running = false;

    int timeInterval = 200;

    double speedChangeRate = 0.75;

    boolean paused = false;

    int score = 0;

    int countMove = 0;

    // UP and DOWN should be even

    // RIGHT and LEFT should be odd

    public static final int UP = 2;

    public static final int DOWN = 4;

    public static final int LEFT = 1;

    public static final int RIGHT = 3;

    public SnakeModel(GreedSnake gs, int maxX, int maxY){

    this.gs = gs;

    this.maxX = maxX;

    this.maxY = maxY;

    // initial matirx

    matrix = new boolean[maxX][];

    for(int i=0; i

    matrix[i] = new boolean[maxY];

    Arrays.fill(matrix[i],false);

    }

    // initial the snake

    int initArrayLength = maxX > 20 ? 10 : maxX/2;

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

    int x = maxX/2+i;

    int y = maxY/2;

    nodeArray.addLast(new Node(x, y));

    matrix[x][y] = true;

    }

    food = createFood();

    matrix[food.x][food.y] = true;

    }

    public void changeDirection(int newDirection){

    if (direction % 2 != newDirection % 2){

    direction = newDirection;

    }

    }

    public boolean moveOn(){

    Node n = (Node)nodeArray.getFirst();

    int x = n.x;

    int y = n.y;

    switch(direction){

    case UP:

    y--;

    break;

    case DOWN:

    y++;

    break;

    case LEFT:

    x--;

    break;

    case RIGHT:

    x++;

    break;

    }

    if ((0 <= x && x < maxX) && (0 <= y && y < maxY)){

    if (matrix[x][y]){

    if(x == food.x && y == food.y){

    nodeArray.addFirst(food);

    int scoreGet = (10000 - 200 * countMove) / timeInterval;

    score += scoreGet > 0? scoreGet : 10;

    countMove = 0;

    food = createFood();

    matrix[food.x][food.y] = true;

    return true;

    }

    else

    return false;

    }

    else{

    nodeArray.addFirst(new Node(x,y));

    matrix[x][y] = true;

    n = (Node)nodeArray.removeLast();

    matrix[n.x][n.y] = false;

    countMove++;

    return true;

    更多相关内容
  • JAVA小游戏编程-源代码

    千次阅读 2021-03-04 08:05:59
    我空间还有很多..import java.applet.Applet;import java.applet.AudioClip;import java.awt.Dimension;import java.awt.Font;import java.awt.Toolkit;import javax.sound.sampled.AudioFileFormat;import j...

    展开全部

    介绍这个给你把...我空间还有很多..

    import java.applet.Applet;

    import java.applet.AudioClip;

    import java.awt.Dimension;

    import java.awt.Font;

    import java.awt.Toolkit;

    import javax.sound.sampled.AudioFileFormat;

    import javax.sound.sampled.AudioSystem;

    import javax.swing.JFrame;

    import javax.swing.JPanel;

    import java.awt.Rectangle;

    import javax.swing.BorderFactory;

    import javax.swing.JButton;

    import javax.swing.JOptionPane;

    import javax.swing.JSlider;

    import javax.swing.JLabel;

    import javax.swing.SwingUtilities;

    import javax.swing.UIManager;

    import javax.swing.event.ChangeEvent;

    import javax.swing.event.ChangeListener;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.event.KeyAdapter;

    import java.awt.event.KeyEvent;

    import java.io.File;

    import java.util.Vector;

    public class Frame extends JFrame implements Runnable {

    JPanel contentPane;

    JPanel jPanel1 = new JPanel();

    JButton jButton1 = new JButton();

    JSlider jSlider1 = new JSlider();

    JLabel jLabel1 = new JLabel();

    JButton jButton2 = new JButton();

    JLabel jLabel2 = new JLabel();

    int count = 1, rapidity = 80; // count 当前进行的个数e5a48de588b63231313335323631343130323136353331333264653463, rapidity 游标的位置

    int zhengque = 0, cuowu = 0;

    int rush[] = ; //游戏每关的个数 可以自由添加.列

    int rush_count = 0; //记录关数

    char list[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',

    'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',

    'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; //随机出现的数字 可以自由添加

    Vector number = new Vector();

    String paiduan = "true";

    AudioClip Musci_anjian, Music_shibai, Music_chenggong;

    public Frame() {

    try {

    setDefaultCloseOperation(EXIT_ON_CLOSE);

    //-----------------声音文件---------------------

    Musci_anjian = Applet.newAudioClip(new File("sounds//anjian.wav")

    .toURL());

    Music_shibai = Applet.newAudioClip(new File("sounds//shibai.wav")

    .toURL());

    Music_chenggong = Applet.newAudioClip(new File(

    "sounds//chenggong.wav").toURL());

    //---------------------------------------

    jbInit();

    } catch (Exception exception) {

    exception.printStackTrace();

    }

    }

    /**

    * Component initialization.

    *

    * @throws java.lang.Exception

    */

    private void jbInit() throws Exception {

    contentPane = (JPanel) getContentPane();

    contentPane.setLayout(null);

    setSize(new Dimension(588, 530));

    setTitle("Frame Title");

    jPanel1.setBorder(BorderFactory.createEtchedBorder());

    jPanel1.setBounds(new Rectangle(4, 4, 573, 419));

    jPanel1.setLayout(null);

    jButton1.setBounds(new Rectangle(277, 442, 89, 31));

    jButton1.setText("开始");

    jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));

    jSlider1.setBounds(new Rectangle(83, 448, 164, 21));

    jSlider1.setMaximum(100);

    jSlider1.setMinimum(1);

    jSlider1.setValue(50);

    jLabel1.setText("速度");

    jLabel1.setBounds(new Rectangle(35, 451, 39, 18));

    jButton2.setBounds(new Rectangle(408, 442, 89, 31));

    jButton2.setText("结束");

    jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));

    jLabel2.setText("第一关:100个");

    jLabel2.setBounds(new Rectangle(414, 473, 171, 21));

    contentPane.add(jPanel1);

    contentPane.add(jButton2);

    contentPane.add(jButton1);

    contentPane.add(jSlider1);

    contentPane.add(jLabel1);

    contentPane.add(jLabel2);

    this.addKeyListener(new MyListener());

    jButton1.addKeyListener(new MyListener());

    jSlider1.addKeyListener(new MyListener());

    jSlider1.addChangeListener(new ChangeListener() {

    public void stateChanged(ChangeEvent e) {

    rapidity = jSlider1.getValue();

    }

    });

    }

    public void run() {

    number.clear();

    zhengque = 0;

    cuowu = 0;

    paiduan = "true";

    while (count <= rush[rush_count]) {

    try {

    Thread t = new Thread(new Tthread());

    t.start();

    count += 1;

    Thread.sleep(1000 + (int) (Math.random() * 2000)); // 生产下组停顿时间

    // 最快1快.最慢2秒

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    }

    while (true) { // 等待最后一个字符消失

    if (number.size() == 0) {

    break;

    }

    }

    if (zhengque == 0) { // 为了以后相除..如果全部正确或者错误就会出现错误. 所以..

    zhengque = 1;

    }

    if (cuowu == 0) {

    cuowu = 1;

    }

    if (paiduan.equals("true")) { // 判断是否是自然结束

    if (zhengque / cuowu >= 2) {

    JOptionPane.showMessageDialog(null, "恭喜你过关了");

    rush_count += 1; // 自动加1关

    if (rush_count < rush.length) {

    if (rapidity > 10) { // 当速度大于10的时候在-5提加速度.怕速度太快

    rapidity -= 5; // 速度自动减10毫秒

    jSlider1.setValue(rapidity); // 选择位置

    }

    Thread t = new Thread(this);

    t.start();

    } else {

    JOptionPane.showMessageDialog(null, "牛B...你通关了..");

    rush_count = 0;

    count = 0;

    }

    } else {

    JOptionPane.showMessageDialog(null, "请再接再励");

    rush_count = 0;

    count = 0;

    }

    } else {

    rush_count = 0;

    count = 0;

    }

    }

    public void jButton1_actionPerformed(ActionEvent e) {

    Thread t = new Thread(this);

    t.start();

    }

    public void jButton2_actionPerformed(ActionEvent e) {

    count = rush[rush_count] + 1;

    paiduan = "flase";

    }

    class Tthread implements Runnable {

    public void run() {

    boolean fo = true;

    int Y = 0, X = 0;

    JLabel show = new JLabel();

    show.setFont(new java.awt.Font("宋体", Font.PLAIN, 33));

    jPanel1.add(show);

    X = 10 + (int) (Math.random() * 400);

    String parameter = list[(int) (Math.random() * list.length)] + "";

    Bean bean = new Bean();

    bean.setParameter(parameter);

    bean.setShow(show);

    number.add(bean);

    show.setText(parameter);

    while (fo) {

    // ---------------------数字下移--------------------

    show.setBounds(new Rectangle(X, Y += 2, 33, 33));

    try {

    Thread.sleep(rapidity);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    if (Y >= 419) {

    fo = false;

    for (int i = number.size() - 1; i >= 0; i--) {

    Bean bn = ((Bean) number.get(i));

    if (parameter.equalsIgnoreCase(bn.getParameter())) {

    cuowu += 1;

    jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu

    + "个");

    number.removeElementAt(i);

    Music_shibai.play();

    break;

    }

    }

    }

    }

    }

    }

    class MyListener extends KeyAdapter {

    public void keyPressed(KeyEvent e) {

    String uu = e.getKeyChar() + "";

    for (int i = 0; i < number.size(); i++) {

    Bean bean = ((Bean) number.get(i));

    if (uu.equalsIgnoreCase(bean.getParameter())) {

    zhengque += 1;

    number.removeElementAt(i);

    bean.getShow().setVisible(false);

    jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu + "个");

    Music_chenggong.play();

    break;

    }

    }

    Musci_anjian.play();

    }

    }

    public static void main(String[] args) {

    try {

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

    } catch (Exception exception) {

    exception.printStackTrace();

    }

    Frame frame = new Frame();

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

    Dimension frameSize = frame.getSize();

    if (frameSize.height > screenSize.height) {

    frameSize.height = screenSize.height;

    }

    if (frameSize.width > screenSize.width) {

    frameSize.width = screenSize.width;

    }

    frame.setLocation((screenSize.width - frameSize.width) / 2,

    (screenSize.height - frameSize.height) / 2);

    frame.setVisible(true);

    }

    }

    class Frame1_jButton2_actionAdapter implements ActionListener {

    private Frame adaptee;

    Frame1_jButton2_actionAdapter(Frame adaptee) {

    this.adaptee = adaptee;

    }

    public void actionPerformed(ActionEvent e) {

    adaptee.jButton2_actionPerformed(e);

    }

    }

    class Frame1_jButton1_actionAdapter implements ActionListener {

    private Frame adaptee;

    Frame1_jButton1_actionAdapter(Frame adaptee) {

    this.adaptee = adaptee;

    }

    public void actionPerformed(ActionEvent e) {

    adaptee.jButton1_actionPerformed(e);

    }

    }

    class Bean {

    String parameter = null;

    JLabel show = null;

    public JLabel getShow() {

    return show;

    }

    public void setShow(JLabel show) {

    this.show = show;

    }

    public String getParameter() {

    return parameter;

    }

    public void setParameter(String parameter) {

    this.parameter = parameter;

    }

    }

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • 15个java小游戏源码合集:Java打猎射击游戏,Java对对碰按钮版(最终版),Java俄罗斯方块2,Java飞行射击类游戏,Java推箱子2,Java网络五子棋2等等15个Java小游戏源码。
  • java小游戏实例源代码

    2018-08-19 09:25:28
    有关一个小型游戏java源代码,适合刚学习java的程序猿研究
  • 该资源包含5个JAVA小游戏源码,并且附有说明文档,需要的童鞋可以下载哦!
  • 再次分享一个Java贪吃蛇游戏源代码,包括了doc文档,详细介绍了编写贪吃蛇游戏所需要的类的用途,是学习Java小游戏编写的良好范例。这个版本运行于j2me环境。贪吃蛇的活动场所、蛇、蛋(食物)、蛇的运行方向都定义...
  • 包括以下游戏的源码:沙漠阻击手,3D魔方游戏,财富城市,贪吃蛇,俄罗斯方块,麻将,三维迷宫,扫雷,推箱子,算卦游戏和简单回合游戏11个游戏的源码,欢迎下载,供学习与交流。
  • Java五子棋游戏完整源代码 界面美观 详细注释【适合初学者】 java 五子棋游戏源码 java初学者 java游戏源码 java入门 【特点】界面美观 详细注释 【推荐】java初学者参考学习之用 Java五子棋游戏完整源代码 界面...
  • 160个项目开发实例,聊天项目,小游戏适和新手学习(项目采用GBK编码)。 import java.util.*; import java.io.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*;...
  • 摘要:JAVA源码,游戏娱乐,贪吃蛇 Java贪吃蛇小游戏源代码,非Android源码,当然Android中也是可以运行的,同是基于Java平台,不过修改运行方式。这是运行于Java手机的J2ME游戏源码,也是挺基础的,学习Android游戏...
  • java小游戏源代码

    2012-01-02 16:57:20
    一个原始的java小游戏源代码,有兴趣的看一看
  • java编程小游戏贪吃蛇

    2018-12-10 19:33:25
    一款利用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;
        }
    }
    
    展开全文
  • 45个java游戏源代码.rar

    2018-01-30 01:46:49
    java手机游戏在智能机出现之前可谓红极一时,只要是支持java程序的手机都可以安装,众多手机小游戏都由java开发。由于java手机游戏的通用性太强,在智能机普及之前,是否支持java成为顾客选择手机的一个重要因素。...
  • java编程小游戏

    2018-12-10 19:31:39
    一款利用java编写的简易小游戏,将解压后的文件夹和源代码放入一个项目下即可成功运行
  • 在DOS下实现的小游戏---推箱子,是用纯Java代码编写的,有各种类,用到了Java里面全面的知识,供大家下载,会GEICO你带来很大帮助的,很有用
  • 在此介绍下本资源,本次资源是有视频教学的并配合源代码的,但我设置的资源分只有2分,网友上传的五子棋大部分是没有视频教学的,对此不利于学习者的学习,这个五子棋项目训练的是java各知识点,主要有awt、swing...
  • java源代码 马里奥 不需要密码 下载后评分返还分数
  • java实现贪吃蛇小游戏(源码+注释)

    万次阅读 多人点赞 2021-04-22 17:11:57
    二.Main.java package com.company; import javax.swing.*; public class Main { public static void main(String[] args) { //创建窗体对象 JFrame frame = new JFrame(); //创建窗体参数() frame....

    一.工程文件

    在这里插入图片描述

    二.Main.java

    package com.company;
    
    import javax.swing.*;
    
    public class Main {
    
        public static void main(String[] args) {
            //创建窗体对象
            JFrame frame = new JFrame();
            //创建窗体参数()
            frame.setBounds(10,10,900,720);
            //设置不允许更改大小
            //frame.setResizable(false);
            //设置关闭方式
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //添加主题逻辑框架
            frame.add(new Mpanel());
            //设置窗体可见
            frame.setVisible(true);
        }
    }
    

    三.Mpanel.java

    package com.company;
    
    import javax.imageio.ImageIO;
    import javax.sound.sampled.*;
    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.io.BufferedInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Random;
    
    //基本套路,继承JPanel,实现KeyListener, ActionListener接口
    public class Mpanel extends JPanel implements KeyListener, ActionListener {
        //定义所需要的图片元素
        //标题
        ImageIcon title;
        //蛇的身体部位
        ImageIcon body;
        //蛇向上方向的头
        ImageIcon up;
        //蛇向下方向的头
        ImageIcon down;
        //蛇向左方向的头
        ImageIcon left;
        //蛇向右方向的头
        ImageIcon right;
        //食物元素
        ImageIcon food;
    
        //定义初始长度
        int len = 3;
        //定义初始分数
        int score = 0;
        //存放蛇位置坐标的数组
        int[] snakex = new int[750];
        int[] snakey = new int[750];
        //定义方向
        String fx = "R";
        //定义游戏是否开始
        Boolean isStart = false;
        //定义游戏是否失败
        Boolean isFailed = false;
        //定义游戏时钟,在此可以设置蛇移动速度,默认100ms
        Timer timer = new Timer(100,this);
        //定义食物的坐标
        int foodx;
        int foody;
        //引入随机数,用于生成食物的随机位置
        Random random = new Random();
        //定义背景音乐
        Clip bgm;
    
        //构造方法
        public Mpanel(){
            //加载图片元素
            loadImages();
            //初始化数据
            initSnake();
            //设置聚焦
            this.setFocusable(true);
            //设置键盘监听
            this.addKeyListener(this);
            //开始计时
            timer.start();
            //加载背景音乐
            loadBGM();
        }
    
        //设置绘图元素
        public void paintComponent(Graphics g){
            //调用父类方法
            super.paintComponent(g);
            //设置背景颜色为白色
            this.setBackground(Color.white);
            //设置标题元素位置
            title.paintIcon(this,g,25,11);
            //设置白色背景填充位置
            g.fillRect(25,75,850,600);
            //设置画笔颜色为白色
            g.setColor(Color.white);
            //设置长度显示
            g.drawString("Len: " + len,750,35);
            //设置分数显示
            g.drawString("Score: " + score,750,50);
    
            //根据方向调用相应的蛇头元素
            if(fx == "R"){
                right.paintIcon(this,g,snakex[0],snakey[0]);
            }
            else if(fx == "L"){
                left.paintIcon(this,g,snakex[0],snakey[0]);
            }
            else if(fx == "U"){
                up.paintIcon(this,g,snakex[0],snakey[0]);
            }
            else if(fx == "D"){
                down.paintIcon(this,g,snakex[0],snakey[0]);
            }
            for(int i=1;i<len;i++){
                body.paintIcon(this,g,snakex[i],snakey[i]);
            }
    
            //调用食物元素
            food.paintIcon(this,g,foodx,foody);
    
            //游戏开始的处理
            if(isStart == false){
                //设置画笔颜色
                g.setColor(Color.white);
                //设置字体
                g.setFont(new Font("arial",Font.BOLD,40));
                //设置具体文字
                g.drawString("Press Space To Start",250,300);
            }
    
            //游戏失败的处理
            if(isFailed){
                //设置画笔颜色
                g.setColor(Color.red);
                //设置字体
                g.setFont(new Font("arial",Font.BOLD,40));
                //设置具体文字
                g.drawString("Failed: Press Space To Start",250,300);
            }
        }
    
        //初始化数据
        public void initSnake(){
            len = 3;
            snakex[0] = 100;
            snakey[0] = 100;
            snakex[1] = 75;
            snakey[1] = 100;
            snakex[2] = 50;
            snakey[2] = 100;
            //设置食物的初始随机生成位置
            foodx = 25 + 25 * random.nextInt(34);
            foody = 75 + 25 * random.nextInt(24);
            //设置初始值
            fx = "R";
            score = 0;
        }
    
        //接口要求的实现方法
        @Override
        public void keyTyped(KeyEvent e) {
    
        }
    
        @Override
        public void keyPressed(KeyEvent e) {
            //获取键盘监听
            int keyCode = e.getKeyCode();
            //空格
            if(keyCode == KeyEvent.VK_SPACE){
                //如果失败则重置信息
                if(isFailed){
                    isFailed = !isFailed;
                    //重新开始
                    initSnake();
                }
                //设置开始
                else {
                    isStart = !isStart;
                }
    
                //判断开始后循环播放背景音乐
                if(isStart){
                    bgm.loop(Clip.LOOP_CONTINUOUSLY);
                }
                //未开始和暂停则不播放背景音乐
                else {
                    bgm.stop();
                }
                //重新绘图
                repaint();
            }
            //右键处理并设置不能回头
            else if(keyCode == KeyEvent.VK_LEFT && fx != "R"){
                fx = "L";
            }
            //左键
            else if(keyCode == KeyEvent.VK_RIGHT && fx != "L"){
                fx = "R";
            }
            //上键
            else if(keyCode == KeyEvent.VK_UP && fx != "D"){
                fx = "U";
            }
            //下键
            else if(keyCode == KeyEvent.VK_DOWN && fx != "U"){
                fx = "D";
            }
    
        }
    
        //接口要求的实现方法
        @Override
        public void keyReleased(KeyEvent e) {
    
        }
    
        //事件监听
        @Override
        public void actionPerformed(ActionEvent e) {
            //开始且没有失败的情况
            if(isStart && !isFailed){
                //循环移动蛇身
                for(int i=len-1;i>0;i--){
                    snakex[i]=snakex[i-1];
                    snakey[i]=snakey[i-1];
                }
                //向右移动并判断是否撞墙,撞墙则失败
                if(fx == "R"){
                    snakex[0]=snakex[0]+25;
                    if(snakex[0]>825)isFailed=true;
                }
                //向左移动并判断是否撞墙,撞墙则失败
                else if(fx == "L"){
                    snakex[0]=snakex[0]-25;
                    if(snakex[0]<50)isFailed=true;
                }
                //向上移动并判断是否撞墙,撞墙则失败
                else if(fx == "U"){
                    snakey[0]=snakey[0]-25;
                    if(snakey[0]<100)isFailed=true;
                }
                //向下移动并判断是否撞墙,撞墙则失败
                else if(fx == "D"){
                    snakey[0]=snakey[0]+25;
                    if(snakey[0]>625)isFailed=true;
                }
    
                //吃到食物的判断
                if(snakex[0]==foodx&&snakey[0]==foody){
                    //身体加长,分加多,并且随机生成新食物
                    len++;
                    score += 10;
                    foodx = 25 + 25 * random.nextInt(34);
                    foody = 75 + 25 * random.nextInt(24);
                }
    
                //撞到自身的处理
                for(int i=1;i<len;i++){
                    if(snakex[i]==snakex[0] && snakey[i]==snakey[0]){
                        isFailed = true;
                    }
                }
    
                //重新绘图
                repaint();
            }
            //事件刷新
            timer.start();
        }
    
        //加载背景音乐
        public void loadBGM(){
            try {
                //从类所在文件引入
                bgm = AudioSystem.getClip();
                InputStream is = this.getClass().getClassLoader().getResourceAsStream("com/company/sound/bgm.wav");
                AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(is));
                bgm.open(ais);
                //bgm.loop(Clip.LOOP_CONTINUOUSLY);
            }
            //相应的异常处理
            catch (LineUnavailableException e) {
                e.printStackTrace();
            }
            catch (UnsupportedAudioFileException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //加载图片
        public void loadImages(){
            InputStream is;
            try {
                //依次添加响应元素
                is = getClass().getClassLoader().getResourceAsStream("com/company/img/title.jpg");
                title = new ImageIcon(ImageIO.read(is));
                is = getClass().getClassLoader().getResourceAsStream("com/company/img/body.png");
                body = new ImageIcon(ImageIO.read(is));
                is = getClass().getClassLoader().getResourceAsStream("com/company/img/up.png");
                up = new ImageIcon(ImageIO.read(is));
                is = getClass().getClassLoader().getResourceAsStream("com/company/img/down.png");
                down = new ImageIcon(ImageIO.read(is));
                is = getClass().getClassLoader().getResourceAsStream("com/company/img/left.png");
                left = new ImageIcon(ImageIO.read(is));
                is = getClass().getClassLoader().getResourceAsStream("com/company/img/right.png");
                right = new ImageIcon(ImageIO.read(is));
                is = getClass().getClassLoader().getResourceAsStream("com/company/img/food.png");
                food = new ImageIcon(ImageIO.read(is));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    四.效果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 模拟双人单机版赛车小游戏,适合初学者,用到的都是基础知识,其中包括给赛车添加图片,添加背景音乐,可以练练手,只是实现简单功能,可以自己再续拓展
  • 通过该项目,可以学会并熟悉Java界面设计、网络编程、五子棋逻辑代码实现、异常处理、多线程编程、输入输出流控制等等Java基础技术。 本项目一共分为客户端和服务器端,一般来说是一台机子作为服务器,另外两台作为...
  • 主要为大家详细介绍了Java Swing实现扫雷小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用JAVA编程语言实现贪吃蛇小游戏JAVA的GUI界面编程的第一步!JAVA实现贪吃蛇小游戏代码包。三个类即可轻松实现。
  • Java经典小游戏——贪吃蛇简单实现(附源码)

    万次阅读 多人点赞 2020-07-27 23:22:43
    在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇。 文章目录一、使用知识二、使用工具三、开发过程3.1素材准备3.2 开发...
  • 50个java游戏源代码

    千次下载 热门讨论 2013-06-06 10:50:19
    50个java游戏源代码。50个java游戏源代码,包括斗地主,黄金矿工,等50个经典小游戏的源码,非常值得学习
  • 在百科里搜索“Java游戏编程” (http://baike.baidu.com/view/647813.htm),就能发现一部好书——《Java游戏编程》,是深入学习java可望而不可求(难买)的好书
  • java开发的小游戏源码

    2019-03-05 13:04:57
    java开发的小游戏源码注意是纯java开发的游戏
  • 简单的java小游戏源码 Simple JavaScript Games A repo with source codes used for practicing programming skills. with jQuery in p5.js

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,437
精华内容 13,774
关键字:

java小游戏编程源代码

java 订阅