贪吃蛇小游戏 java双缓冲防闪屏

吃豆豆--Java小游戏 吃豆豆 项目总结,要求用Java做一个小游戏 不想用网上现成的代码,也想做的有新意一点 什么贪吃蛇啊飞机大战啊超级玛丽啊…… 之前有人写过或者有人在写,所有并不想做(@我东东哥) 打了3天4399吧,想到一个比较不错的游戏:吃豆豆 黄色的为我方小豆人,粉色红色橙色为小怪兽 可以通过键盘上下左右来控制小豆人运动,每次移动5个像素 小怪兽可以自行运动,每 阅读详情

最近跟着b站视频手敲了一遍贪吃蛇小游戏的代码,虽然简单但是写完运行出来还是挺有成就感的,而且里面还涉及到有个jframe重绘闪动的问题,对遇到该问题的朋友或许有帮助。

游戏界面截图:

 代码目录结构

 代码简单讲解:

1、GameWin.java :继承JFrame,用于布局游戏界面,作为游戏启动的入口

ps:刚做完的时候界面一直频繁闪动,查了很多方法都没有处理好,最后才注意到在重写paint方法时,没有注释掉super.paint(g)

当然只注释掉这个还是不够的,还需要增加一个参数(Image offScreenImage = null;)来将界面上的小元素整合到一张图片上,实现双缓冲防止闪屏。

具体实现逻辑在paint方法中:注意了,后续的g都要替换成gImage,也就是咱们新生成的图片缓存

 代码如下

package com.example.snake;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

/**
 * Author: wangwang
 * Date: 2022/11/1
 */
public class GameWin extends JFrame {

    //游戏状态 0:未开始 1:游戏中 2:暂停 3:失败 4:通关 5:失败后重新开始 6:下一关
    public static int state = 0;

    public int score = 0;
    int winWidth = 800;
    int winHeight = 600;



    HeadObj headObj = new HeadObj(GameUtils.rightImg,60,570,this);

    public List<BodyObj> bodyObjList = new ArrayList<>();

    public FoodObj foodObj = new FoodObj().getFood();

    Image offScreenImage = null;

    public void launch(){
        this.setVisible(true);
        this.setSize(winWidth,winHeight);
        this.setLocationRelativeTo(null);
        this.setTitle("snake");

        bodyObjList.add(new BodyObj(GameUtils.bodyImg,30,570,this));
        bodyObjList.add(new BodyObj(GameUtils.bodyImg,0,570,this));

        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_SPACE){
                    switch (state){
                        case 0:
                        case 2:
                            state = 1;
                            break;
                        case 1:
                            state = 2;
                            repaint();
                            break;
                        case 3:
                            state = 5;
                            break;
                        case 4:
                            state = 6;
                            break;
                        default:
                            break;
                    }
                }
            }
        });

        while (true){
            if(state == 1){
                repaint();
            }
            if(state == 5){
                state = 0;
                resetGame();
            }
            if(state == 6 && GameUtils.level != 3){
                state = 1;
                GameUtils.level++;
                resetGame();
            }
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void paint(Graphics g) {
        if(offScreenImage == null){
            offScreenImage = this.createImage(winWidth,winHeight);
        }
        Graphics gImage = offScreenImage.getGraphics();
        gImage.setColor(Color.gray);
        gImage.fillRect(0,0,winWidth,winHeight);
        gImage.setColor(Color.black);
        for (int i = 0; i <= 20; i++) {
            gImage.drawLine(0,i * 30,600,i * 30);
            gImage.drawLine(i * 30,0,i * 30,600);
        }
        for (int i = bodyObjList.size() - 1 ; i >= 0; i--){
            bodyObjList.get(i).paintSelf(gImage);
        }
        headObj.paintSelf(gImage);

        foodObj.paintSelf(gImage);

        GameUtils.drawWord(gImage,"第"+GameUtils.level+"关",Color.orange,40,650,260);

        GameUtils.drawWord(gImage,score+"分",Color.blue,50,650,330);

        gImage.setColor(Color.GRAY);
        prompt(gImage);

        g.drawImage(offScreenImage,0,0,null);
    }

    void prompt(Graphics g){
        if(state == 0){
            g.fillRect(120,240,400,70);
            GameUtils.drawWord(g,"按下空格开始游戏",Color.yellow,35,150,290);
        }
        if(state == 2){
            g.fillRect(120,240,400,70);
            GameUtils.drawWord(g,"按下空格继续游戏",Color.yellow,35,150,290);
        }
        if(state == 3){
            g.fillRect(120,240,400,70);
            GameUtils.drawWord(g,"游戏失败!按下空格重新进入游戏",Color.red,35,150,290);
        }
        if(state == 4){
            g.fillRect(120,240,400,70);
            if(GameUtils.level == 3){
                GameUtils.drawWord(g,"恭喜通关!",Color.GREEN,35,150,290);
            }else {
                GameUtils.drawWord(g,"恭喜!按下空格进入下一关",Color.GREEN,35,150,290);
            }

        }
    }

    //游戏重置
    void resetGame(){
        //关闭当前窗口
        this.dispose();
        //开启新窗口
        String[] args = {};
        main(args);
    }
    public static void main(String[] args) {
        GameWin gameWin = new GameWin();
        gameWin.launch();
    }
}

2、GameObj.java:游戏中所有物体的父类,例如蛇头,蛇身体、食物,其中对应HeadObj.java、BodyObj.java、FoodObj.java,这三个类都继承GameObj。

详细代码如下:

package com.example.snake;

import java.awt.*;

/**
 * Author: wangwang
 * Date: 2022/11/1
 */
public class GameObj {

    Image img;

    int x;
    int y;

    int width = 30;
    int height = 30;

    GameWin frame;

    public Image getImg() {
        return img;
    }

    public void setImg(Image img) {
        this.img = img;
    }

    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 int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public GameWin getFrame() {
        return frame;
    }

    public void setFrame(GameWin frame) {
        this.frame = frame;
    }

    public GameObj() {
    }

    public GameObj(Image img, int x, int y, GameWin frame) {
        this.img = img;
        this.x = x;
        this.y = y;
        this.frame = frame;
    }

    public GameObj(Image img, int x, int y, int width, int height, GameWin frame) {
        this.img = img;
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.frame = frame;
    }

    public void paintSelf(Graphics g){
        g.drawImage(img,x,y,width,height,null);
    }
}
package com.example.snake;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.List;

/**
 * Author: wangwang
 * Date: 2022/11/1
 */
public class HeadObj extends GameObj{

    //方向
    private String direction = "right";

    public String getDirection() {
        return direction;
    }

    public void setDirection(String direction) {
        this.direction = direction;
    }

    public HeadObj(Image img, int x, int y, GameWin frame) {
        super(img, x, y, frame);
        this.frame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                changeDirection(e);
            }
        });
    }

    public void changeDirection(KeyEvent e){
        switch (e.getKeyCode()){
            case KeyEvent.VK_A:
                if(!"right".equals(direction)){
                    direction = "left";
                    img = GameUtils.leftImg;
                }
                break;
            case KeyEvent.VK_D:
                if(!"left".equals(direction)){
                    direction = "right";
                    img = GameUtils.rightImg;
                }
                break;
            case KeyEvent.VK_W:
                if(!"down".equals(direction)){
                    direction = "up";
                    img = GameUtils.upImg;
                }
                break;
            case KeyEvent.VK_S:
                if(!"up".equals(direction)){
                    direction = "down";
                    img = GameUtils.downImg;
                }
                break;
            default:
                break;
        }
    }
    public void move(){

        List<BodyObj> bodyObjList = this.frame.bodyObjList;
        for(int i = bodyObjList.size() - 1; i >= 1; i--){
            bodyObjList.get(i).x = bodyObjList.get(i-1).x;
            bodyObjList.get(i).y = bodyObjList.get(i-1).y;
            if(this.x == bodyObjList.get(i).x && this.y == bodyObjList.get(i).y){
                //失败
                GameWin.state = 3;
            }
        }
        bodyObjList.get(0).x = this.x;
        bodyObjList.get(0).y = this.y;

        switch (direction){
            case "up":
                y -= height;
                break;
            case "down":
                y +=height;
                break;
            case "left":
                x -= width;
                break;
            case "right":
                x += width;
                break;
            default:
                break;

        }
    }
    @Override
    public void paintSelf(Graphics g) {
        super.paintSelf(g);

        FoodObj foodObj = this.frame.foodObj;

        Integer newX = null;
        Integer newY = null;
        if(this.x == foodObj.x && this.y == foodObj.y){
            this.frame.foodObj = foodObj.getFood();
            BodyObj lastBody = this.frame.bodyObjList.get(this.frame.bodyObjList.size() -1);
            newX = lastBody.x;
            newY = lastBody.y;
            this.frame.score++;
        }

        if(this.frame.score >= 3){
            GameWin.state = 4;
        }
        move();

        if(newX != null && newY != null){
            this.frame.bodyObjList.add(new BodyObj(GameUtils.bodyImg,newX,newY,this.frame));
        }

        //越界处理
        if(x < 0){
            x = 570;
        }else if(x >570){
            x = 0;
        }
        if(y < 30){
            y = 570;
        }else if(y > 570){
            y = 30;
        }
    }
}
package com.example.snake;

import java.awt.*;

/**
 * Author: wangwang
 * Date: 2022/11/1
 */
public class BodyObj extends GameObj{

    public BodyObj(Image img, int x, int y, GameWin frame) {
        super(img, x, y, frame);
    }

    @Override
    public void paintSelf(Graphics g) {
        super.paintSelf(g);
    }
}
package com.example.snake;

import java.awt.*;
import java.util.Random;

/**
 * Author: wangwang
 * Date: 2022/11/2
 */
public class FoodObj extends GameObj{

    Random r = new Random();

    public FoodObj() {
        super();
    }

    public FoodObj(Image img, int x, int y, GameWin frame) {
        super(img, x, y, frame);
    }

    public FoodObj getFood(){
        return new FoodObj(GameUtils.foodImg,r.nextInt(20)*30,(r.nextInt(19)+1)*30,this.frame);
    }
    @Override
    public void paintSelf(Graphics g) {
        super.paintSelf(g);
    }
}

3、GameUtils.java是工具类,主要用来获取界面内物品的图片,生成界面内文字

package com.example.snake;

import java.awt.*;

/**
 * Author: wangwang
 * Date: 2022/11/1
 */
public class GameUtils {

    public static Image upImg = Toolkit.getDefaultToolkit().getImage("img/up.png");
    public static Image downImg = Toolkit.getDefaultToolkit().getImage("img/down.png");
    public static Image leftImg = Toolkit.getDefaultToolkit().getImage("img/left.png");
    public static Image rightImg = Toolkit.getDefaultToolkit().getImage("img/right.png");

    public static Image bodyImg = Toolkit.getDefaultToolkit().getImage("img/body.png");

    public static Image foodImg = Toolkit.getDefaultToolkit().getImage("img/food.png");

    public static int level = 1;

    public static void  drawWord(Graphics g, String str, Color color, int fontSize, int x, int y){
        g.setColor(color);
        g.setFont(new Font("仿宋",Font.BOLD,fontSize));
        g.drawString(str,x,y);

    }
}

4、界面静态资源存放在img下,大家也可以去我的资源列表下载完整代码,也可以自己找图片代替。

【JAVA】-- 绘图技术(paint()、Graphics类、双缓冲技术、addWindowListener()) JAVA坐标系中,x表示水平方向,距离坐标原点x个像素;y表示垂直方向,距离坐标原点y个像素。需要类继承JFrame或JPanel类来画窗口。 前序:设置窗口 setTitle(String s) //设置窗口标题setLocation(int x,int y) //设置窗口位置setSize(int width,int height) //设置窗口宽和高setVisible(true) //设置窗口可见,默认为false1、paint(Grap 阅读详情

相关推荐

C++写的贪吃蛇(含源代码和注释,采用了双缓冲)

C++写的贪吃蛇小游戏 里面采用了双缓冲技术。。对初学着有帮助!

java 滚屏,Java仿游戏滚屏

其实人物不动的,背景图片反方向移动,所以就看起来像人在移动本例通过按键实现的 import javax.imageio.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.io.*;import java.util.*;public class Hu...

weixin_35344136的博客 200

java双缓冲消除闪烁

Java的强大特性让其在游戏编程和多媒体动画处理方面也毫不逊色。在Java游戏编程和动画编程中最常见的就是对于屏幕闪烁的处理。本文从J2SE的一个再现了屏幕闪烁的Java Appilication简单动画实例展开,对屏幕闪烁的原因进行了分析,找出了闪烁成因的关键:update(Graphics g)函数对于前端屏幕的清屏。由此引出消除闪烁的方法——双缓冲

贪吃蛇解决闪烁的方法

贪吃蛇是我做的第一个小程序,这里分享一下大一上学期做的几个版本的控制台贪吃蛇程序。 目录运行结果不同之处解析链接 运行结果 snake1 snake2 snake3 4 .snake4(使用了双缓冲) snake(加了音乐的) 可以发现从刚开始很闪烁到后来几乎不闪烁,体验也变好了。 不同之处 snake1程序使用的双重for循环打印的地图 snake2程序使用了...

c++小白的博客 6573

ACM论文LaTeX模板解析(三)| 文章顶部信息(Top matter))Part 1

文章顶部信息(Top matter))Part 1,文章类型、作者信息等

FreshManInC的博客 4853

用友u8服务器优化,用友U8erp软件运行的性能优化方案图文教程

今天一定要给大家分享一下用友U8erp软件运行的性能优化方案图文教程,以下方案来自用友软件官方维护工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如用友U8服务器效率低下的问题。比如用友U8运行慢,卡住等,我们暂先不提用友U8软件代码、脚本层面本身的性能提升问题,我们只是基于现有用友U8软件版本,在客户现有环境下排查用友U8软件运行的性能瓶颈,并采取一定的技术手段进行性能调校。本文将推...

weixin_39882870的博客 5306

javaGUI游戏教程--人物控制

java游戏

小马哥的博客 1966

用PY32F003F18的PWM互补输出驱动无刷电机,保姆级配置流程(含代码)

本文详细介绍了如何利用PY32F003F18微控制器的TIM1定时器配置PWM互补输出功能来驱动三相无刷电机,涵盖硬件设计、代码实现及六步换相算法。通过保姆级配置流程和实用代码示例,帮助开发者快速掌握无刷电机驱动技术,适用于工业自动化和消费电子等领域。

weixin_26905487的博客 379

java游戏程序界面_Java解决游戏界面闪屏

一、问题描述我们在做有关于图形绘制方面的问题非常之多。比如,有时我们用普通的方法去绘制图形,会产生闪屏的现象,导致我们所做的游戏或者是别的项目效果非常差,这完全不是我们想要的结果。那么,有没有一种技术,实现不闪屏的效果,特别是在多线程环境下。答案是有的,这就是Java的什么技术——双缓冲技术。 图1 双缓冲技术效果图二、实现方法1、首先,我们定义一个类继承JFrame,要自定义绘图,我们就要实现J...

weixin_39928017的博客 405

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1363

2026年华为OD机试真题 新系统【点亮战争迷雾】

华为OD机试真题 8月18号 新系统【点亮战争迷雾】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【点亮战争迷雾】多语言题解。

qq_45776114的博客 496

JAVA中的双缓冲问题

/** *//** *双缓冲 *什么是重量级,轻量级 *轻量级在这里指用纯java实现的。重量级指和其他语言混合编程,这样耗用的资源多系统触发的绘画操作 *绘画操作的分类 *系统触发的和程序触发的绘画操作 *AWT的绘制与界面更新使用了一个单独的线程,称为AWT线程。这个线程可以在两种情形下更新显示。 *一种情况是界面“显露”,这可能会发生在界面首次显示时,或者界面某一部分由于被其它窗口遮盖后

Phoenix Nirvana 4049

Xiaojie雷达之路---手把手教你从串口获取雷达原始数据(一)---新建工程(开始)

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章---利用串口获取毫米波雷达中的原始数据,本系列文章将从新建工程到最后原始数据显示到PC上进行逐步介绍,这个系列的文章大约是一个4-5篇左右。本篇文章呢,主要讲的是如何新建一个毫米波雷达的工程。

XiaoJie的博客 5810

java双缓冲

import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;     public class TankClie

sk_Overlord_knife的博客 679

【YOLO目标检测全栈实战】68 模型量化:从FP32到INT8,精度不掉,速度翻倍

摘要: 模型量化能显著提升推理速度(如YOLOv5s帧率从15FPS提升至38FPS),但需避免三大误区:1)校准集需覆盖实际场景,而非随机采样;2)敏感层(如检测头)应保留FP32精度;3)预处理必须与量化前后一致。通过混合精度量化(Backbone用INT8,检测头用FP32)和逐通道量化,可实现<1%的mAP损失。关键步骤包括校准数据准备、量化感知训练及逐层精度评估,最终在Jetson Nano等边缘设备上实现速度与精度的平衡。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 146

Raspberry Pi 4 ARM Trusted Firmware 技术解析

摘要: 本文详细介绍了在树莓派4(Raspberry Pi 4)上移植ARM可信固件(TF-A)的实现方案与安全考量。该移植专注于BL31功能,作为非安全世界(如Linux内核)的启动桥梁,支持加载EL2级别程序。文章分析了启动流程、内存映射设计,并对比了RPi3与RPi4的关键差异,指出当前版本缺乏硬件级安全内存保护的局限性。此外,提供了构建指南、配置说明及设备树自动修补的实现细节,强调通过config.txt简单配置即可启动64位内核。该方案充分利用树莓派原有GPU固件流程,兼顾兼容性与简易性。

Linux内核架构师 932

【java】java使用双缓冲技术解决JFrame的的闪烁问题的两种方法

【java】java使用双缓冲技术解决JFrame的的闪烁问题的两种方法 为解决这一问题可以采用双缓冲技术。可以通过截取上述过程,覆盖update函数,在内存中创建一个与窗口大小相同的图形。用Update调用drawImage函数将创建的图形直接画在窗口上。 方法一: 直接放到窗口类中使用即可 private Image offScreenImage=null; @Over...

男人的小心思 1942

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java贪吃蛇小游戏

头部:HeadObj。

cubexx的博客 260

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

基于链表完成的控制台贪吃蛇小游戏(无闪烁并加入一些趣味玩法)

基于链表完成的控制台贪吃蛇小游戏(无闪烁并加入一些趣味玩法)

KeNanKN的博客 457

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java中JFrame出现闪烁用双缓存解决方法

Java中JFrame出现闪烁用双缓存解决方法问题原因解决方法小记 问题原因 在写Java小游戏时,我使用继承了JFrame public class flyView extends JFrame { ..................................................................................... } 在下面的代码中,写paint进行绘制 public void paint(Graphics graphics){

BIgbossyii的博客 2009

双缓冲技术

利用双缓冲的解决JAVA窗口闪烁问题 private Image offScreenImage=null; public void update(Graphics g) {//update自动调用 if (offScreenImage==null) { offScreenImage=this.createImage(Constant.GAME_WEIGHT,Constant.GAME_HEIGHT); } Graphics gOffGraphics=offScreenImage.getGraphi

weixin_47660203的博客 167

java双缓冲解决屏幕闪烁

今天做实验,发现了屏幕闪烁问题,网上找到解决方法,在此谢谢原作者 转自http://blog.sina.com.cn/s/blog_611ca6300100ezfx.html Java的强大特性让其在游戏编程和多媒体动画处理方面也毫不逊色。在Java游戏编程和动画编程中最常见的就是对于屏幕闪烁的处理。本文从J2SE的一个再现了屏幕闪烁的Java Appilication简单动画实例展开,对屏幕闪...

weixin_30904593的博客 293

java双缓冲_java 双缓冲技术

1.java双缓冲技术是一种解决闪屏的技术,我们首先来看看闪屏是因为什么产生的?图像画到屏幕上的过程是:AWT->update()->paint(),有时候我们通过repaint()来调用paint(),其实也是产生了一个 AWT线程,然后通过AWT线程来调用update(),再由update()来调用paint()。我们再来看看update()的源代码:public void upd...

weixin_29699727的博客 1796

idea学习第二天

添加背景 public class GameWin extends JFrame { //创建窗口 bg bg=new bg(); void launch(){ this.setVisible(true); //设置窗口是否可见 this.setSize(768,1000); //直接输入数字即可 this.setLocationRelativeTo(null); //窗口居中

m0_47380257的博客 646

java小游戏-贪吃蛇

在HeadObj类中修改printSelf方法和move方法。在HeadObj类printSelf方法添加吃食物代码。在GameWin类launch方法中添加暂停的键盘事件。在HeadObj类printSelf方法添加越界处理。在HeadObj类printSelf方法添加通关分数。在GameWin类prompt方法添加绘制通关语。在GameWin类prompt方法添加失败语绘制。在GameWin类launch方法添加循环绘制。在GameWin类中添加游戏重置方法。在HeadObj类添加move方法。

weixin_42469070的博客 564

贪吃蛇(双缓冲版)

写在前面 首先,从准备到搜集各种资料再到自己动手写出来,确实花了不少时间,其间有过很多的疑惑,bug等,但是最开心的还是游戏运行出来的那一刻。我最开始还是用的定时器来控制的(借鉴自B站的某个视频,这是我在网上找到的比较好理解的)然后在网上又了解到双缓冲(消除闪烁),感觉有必要学一下,就又着手找网上的资料,然后在图书馆找到一本比较有好的书(陈锐等主编的《Java游戏编程原理与实践教程》),里面有关双...

weixin_42190209的博客 628
上一篇: ssh连接VM中的虚拟机失败问题处理
下一篇: JVM初学 GC
knowwait
博客等级 码龄9年 34粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值