自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

FREEDOM

hello world

  • 博客(40)
  • 资源 (29)
  • 收藏
  • 关注

原创 Qt 打包依赖 及发布安装程序

1、打包依赖Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行。因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe。以官方 Qt 5.4.0+MinGW 开发环境为例,从开始菜单--》Qt 5.4.0--》5.4--》MinGW 4.9 (32-

2016-08-30 13:50:22 16171

原创 qt quick 入门编程

注:本代码只是 qml 语言代码import QtQuick 2.4import QtQuick.Window 2.2/* ggg */Window { visible: true; width:10*100; Text { id:hello; //anchors.fill: parent; colo

2016-08-29 17:18:21 10264

原创 qt quick 项目创建

打开 qt creator

2016-08-29 17:15:48 11741

原创 qt5.0 以上 环境搭建

qt所有免费版下载地址:http://download.qt.io/archive/qt/(1)5.*版本安装下载好后,解压安装,安装途中会让选择安装插件,注意要安装mingw,然后一直next。此安装包自带gt creator。在安装后的Tools目录下。无需任何配置即可。(2)5.*以下版本安装配置从QT官网可以得知其支持

2016-08-29 17:08:42 15899

转载 在Windows中安装配置Qt

在Windows中安装配置Qt当前修订版本Qt是很好的跨平台开发环境,本文介绍在Windows中配置Qt的方法。MinGW环境与MinGW环境配合是GPL版Qt在Windows中惟一支持的解决方案。配置也并不复杂。准备安装程序到Qt下载页面下载Qt的exe格式的安装包(约七十多兆),如http://ftp.ntua.gr/pub/X11/Qt/qt/so

2016-08-29 09:11:10 10291

原创 web在线编辑word,excel,pdf插件-----WebOffice 文档控件API

目    录   一、工作原理...51.1         开发流程... 51.2         WEB页面调用控件:. 6二、接口说明...72.1         接口... 72.1.1     AboutBox. 72.1.2     AcceptAllRevisions. 72.1.3     CloseD

2016-08-28 20:16:17 44733 4

原创 在线编辑office插件(weboffice)使用

步骤:(1)在html中引入main.js,loadweboffice.js,style.css即可       注意:loadweboffice.js或html中节点object的codebase='weboffice/WebOffice.ocx' 是必须    的,改成自己WebOffice.ocx的路径问题:(1)IE支持所有原生方法,因为它和word是一家的

2016-08-28 20:14:17 36099 5

转载 pentaho Report Designer 入门教程(三)

采用Pentaho Report Designer5.1版本,也是最新的版本。一、       安装和介绍介绍部分内容略,首先安装jdk,并配置java相关环境变量,下载pentaho report并解压,直接运行即可。二、       第一个示例三、在Swing程序中集成四、在j2ee程序中集成Ø  新建web项目Ø  编写ant脚

2016-08-28 11:26:57 12484

转载 pentaho Report Designer 入门教程(二)

采用Pentaho Report Designer5.1版本,也是最新的版本。一、       安装和介绍介绍部分内容略,首先安装jdk,并配置java相关环境变量,下载pentaho report并解压,直接运行即可。二、       第一个示例三、在Swing程序中集成示例程序主要有三个部分,程序目录如下图:1、 构建简单的Swing程序

2016-08-28 11:26:01 13658

转载 PentahoReport Designer 入门教程 (一)

采用Pentaho Report Designer5.1版本,也是最新的版本。一、       安装和介绍介绍部分内容略,首先安装jdk,并配置java相关环境变量,下载pentaho report并解压,直接运行即可。二、       第一个示例本示例是《Pentaho Reporting 3.5 for Java Developers》第二章中的例子,比较容易上

2016-08-28 11:24:31 14024

原创 ETL工具 kettle

Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。Kettle中有两种脚

2016-08-28 11:22:26 12678

转载 Rss订阅

一、自从我发现很多人不知道什么是RSS以后,我就一直想向大家介绍它,因为它太有用了,将来会和电子邮件一样重要。不懂得RSS,上网的效率和乐趣都要大打折扣。我在网上找不到简明易懂的介绍文章,只好下决心自己来写。虽然我不是这方面的专业人士,但是我相信你只要耐心读完这篇文章,你就会基本搞懂RSS以及它的使用方法。二、在解释RSS是什么之前,让我先来打一个比方。

2016-08-28 11:20:10 12338

转载 搜索引擎---倒排索引

1.单词——文档矩阵       单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。                                                                                       

2016-08-21 17:50:27 9088

原创 多源最短路径算法---Floyd-Warshall

暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。上图中有4个城市8条公路,公路上的数字表示这条公路的长短。请注意这些公路是单向的。我们现在需要求任意两个城市之间的最短路程,也就是求任意两个点之间的最短路径。这个问题这也被称为“多源最短路径”问题。现在需要一个数据

2016-08-21 12:34:37 15261 2

原创 单源最短路径算法-Dijkstra

描述:Dijkstra算法:用于计算图中某一点到其他各点的最短路径。关于Dijkstra算法的说明可以参考 数据结构相关书籍。为Dijkstra算法设计的类:1. Node        节点类2. Edge        边类3. Graph       图类4. Dijkstra     Dijkstra算法类--------------

2016-08-21 11:52:29 7732

转载 图片相似算法(1)

灰度了解:灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图象,它的象素值只能为0或1,我们说它的灰度级为2。用个例子来说明吧:一个256级灰度的图象,如果RGB三个量相同时,如:RGB(100,100,100)就代表灰度为100,RGB(50,50,50)代表灰度为50。彩色图象的灰度其实在转化为黑白图像后的像素值(是一种广义的提法),转化的方法看应用的领域而定,一般按加权的

2016-08-21 11:36:14 13265

转载 常用推荐算法

推荐系统的出现  随着互联网的发展,人们正处于一个信息爆炸的时代。相比于过去的信息匮乏,面对现阶段海量的信息数据,对信息的筛选和过滤成为了衡量一个系统好坏的重要指标。一个具有良好用户体验的系统,会将海量信息进行筛选、过滤,将用户最关注最感兴趣的信息展现在用户面前。这大大增加了系统工作的效率,也节省了用户筛选信息的时间。  搜索引擎的出现在一定程度上解决了信息筛选问题,但还远远不够。

2016-08-21 10:29:55 14873

转载 推荐算法---协同过滤推荐算法

基于用户的协同过滤推荐算法原理和实现      在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单。该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤。一直到2000年,该算法都是推荐系统领域最著名的算法。      本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注

2016-08-21 10:27:27 12495

转载 反向传播算法

原文:http://www.zhihu.com/question/27239198/answer/89853077BackPropagation算法是多层神经网络的训练中举足轻重的算法。简单的理解,它的确就是复合函数的链式法则,但其在实际运算中的意义比链式法则要大的多。要回答题主这个问题“如何直观的解释back propagation算法?” 需要先直观理解多层神经网络的训练。

2016-08-20 11:49:48 2390

转载 深度学习-神经网络 历史

一  2016 年一月底,人工智能的研究领域,发生了两件大事。  先是一月二十四号,MIT 的教授,人工智能研究的先驱者,Marvin Minsky 去世,享年89 岁。  三天之后,谷歌在自然杂志上正式公开发表论文,宣布其以深度学习技术为基础的电脑程序 AlphaGo, 在 2015年 十月,连续五局击败欧洲冠军、职业二段樊辉。  这是第一次机器击败职业围棋选手。

2016-08-20 11:32:13 15097

转载 svm 支持向量机

通俗解释:超级通俗的解释:支持向量机是用来解决分类问题的。先考虑最简单的情况,豌豆和米粒,用晒子很快可以分开,小颗粒漏下去,大颗粒保留。用一个函数来表示就是当直径d大于某个值D,就判定为豌豆,小于某个值就是米粒。d>D, 豌豆d<D,米粒在数轴上就是在d左边就是米粒,右边就是绿豆,这是一维的情况。但是实际问题没这么简单,考虑的问题不单单是尺寸,一个花的两个品种,怎么分类?

2016-08-20 10:24:14 13622

转载 K-means聚类算法

K-means聚类算法     K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般。最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用。看了Andrew Ng的这个讲义后才有些明白K-means后面包含的EM思想。     聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚

2016-08-19 21:11:06 11173

转载 监督学习和无监督学习

机器学习的常用方法,主要分为有监督学习(supervised learning)和无监督学习(unsupervised learning)。监督学习,就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有

2016-08-19 20:53:48 10659

转载 支持向量机

原文:http://www.cnblogs.com/jerrylead1 简介支持向量机基本上是最好的有监督学习算法了。最开始接触SVM是去年暑假的时候,老师要求交《统计学习理论》的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相关概念。这次斯坦福提供的学习材料,让我重新学习了一些SVM知识。我看很多正统的讲法都是从VC 维理论和结构风险最小原理出发,然后

2016-08-19 20:50:28 9740

转载 Logistic 回归

Logistic 回归:从入门到进阶(之一)——如何理解Logistic回归我们在做统计分析之前,往往会做个散点图,以对数据有直观的了解。今天,我们就从散点图入手,来探究Logistic回归的奥秘。如下,分别是连续型因变量和二分类因变量的散点图。很直观的,我们会想到用一条直线来代表左图中两个变量的关系。那么右图中,用一条什么样的线来代表呢?

2016-08-19 20:47:52 11828

转载 决策树

名词说明:熵:表示随机变量的不确定性。条件熵:在一个条件下,随机变量的不确定性。信息增益:熵 - 条件熵在一个条件下,信息不确定性减少的程度!通俗地讲,X(明天下雨)是一个随机变量,X的熵可以算出来, Y(明天阴天)也是随机变量,在阴天情况下下雨的信息熵我们如果也知道的话(此处需要知道其联合概率分布或是通过数据估计)即是条件熵。两者相减就是信息增益!

2016-08-19 19:55:35 10461

转载 贝叶斯算法的应用

简介学过概率理论的人都知道条件概率的公式:P(AB)=P(A)P(B|A)=P(B)P(A|B);即事件A和事件B同时发生的概率等于在发生A的条件下B发生的概率乘以A的概率。由条件概率公式推导出贝叶斯公式:P(B|A)=P(A|B)P(B)/P(A);即,已知P(A|B),P(A)和P(B)可以计算出P(B|A)。假设B是由相互独立的事件组成的概率空间{B1,b2,...bn}。则

2016-08-19 18:40:56 20892 2

转载 贝叶斯算法

2010-09-17 13:09 by T2噬菌体, 154746 阅读, 49 评论, 收藏, 编辑0、写在前面的话      我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比的美感。而每次将学过的算法应用到实际中,并解决了实际问题后,那种快感更是我在其它地方体会不到的。      一直想写关于算法的博文,也曾写过零散的两篇,但也许是相比于

2016-08-19 18:39:06 13417

原创 spring mybatis 的注解事务

首先要在 spring-mybatis的配置文件添加 事务支持,和事务annotation支持注意:如果是mysql请使用innodb innodb 支持事务功能,myisam 不支持。 注解直接在类上面写注解表示整个类的方法都支持事务@Transactional@Componentpublic class UserSerImpl exte

2016-08-12 18:42:20 5598

原创 spring 操作elasticsearch

package com.gooddeep.dev.elasticsearch.commons.dao;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.elasticsearch.action.ActionFuture;import org.elasticsearch.ac

2016-08-11 17:50:31 26266 14

原创 ehcache +mybatis+spring 自定义缓存策略

从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对

2016-08-10 09:56:14 13935

原创 spring 实现数据库读写分离

1.Spring实现数据库的读写分离现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库。Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验。我们

2016-08-10 09:25:19 10710 1

原创 maven 打包 常见错误问题

1、web.xml 位置问题mvn install一个web项目时,报错如下:Error assembling WAR:webxml attribute is required[plain] view plain copy [ERROR] Failed to execute goal org.apache.maven.

2016-08-04 20:25:32 3811

原创 maven 打包,打包依赖,并只打某个包下的依赖

1、先导出一个个maven项目下的某些包的源文件到target下的dubbo目录注意:maven-jar-plugin插件智能打包本项目下的代码(自己写的代码) maven-jar-plugin dubbo-service-model-export jar package

2016-08-04 20:24:31 23600 1

原创 Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解

Quartz是一个基于Java的作业调度管理的轻量级框架,目前在很多企业应用中被使用,它的作用类似于java.util中的Timer和TimeTask、数据库中的job等,但Quartz的功能更强大、更灵活。从Quartz2开始,你可以使用POJO作为一个任务(Job),这种开发方式进一步降低了代码的耦合度,如果跟Spring进行整合,使用起来将更加方便简单。整合开发需要使用的jar如下所

2016-08-03 13:51:01 3786

原创 spring-junit中使用 log4j或者logback 打印spring日志

package com.gooddeep.elasticsearch;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.collections.map.HashedMap;import org.apache.log4j.PropertyConf

2016-08-03 13:05:37 21457

原创 logback.xml 配置

一:根节点包含的属性: scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug:当此属性设置为true时,将打印出logback内部日志信

2016-08-03 13:00:08 8844

原创 spring 中使用 logback打印日志,替换其他日志如log4j,commons-logging

1.  Spring MVC集成slf4j-log4j关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logback的,尤其是Spring MVC集成logback的,就相对少一些了,而且其中一些也有着这样那样的问题。进入正题之前先简单介绍下Spring MVC集成slf4j-log4j的过程,如下:1)      在pom.xml文件中添加slf4j-

2016-08-03 12:59:37 4110 1

原创 spring-data-elasticsearch api

/* * Copyright 2014-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * Y

2016-08-02 15:32:35 20268 1

原创 logback slf4j管理 日志

注:使用logback和log4j十分相似, log4j的属性配置文件可以通过工具http://logback.qos.ch/translator/转换为logback的配置文件放到类路径里面去,另外再将logback的类库logback-core,logback-classic加入到类路径中去就搞定了。一、下载组件:slf4j:http://www.slf4j.org/downl

2016-08-02 13:45:41 9882

S3 java sdk 文档-使用手册.pdf

AmazonS3 sdk中文文档

2021-11-03

图像标注-labelImg_windows_v1.7

图像标注-labelImg_windows_v1.7 图像标注-labelImg_windows_v1.7 图像标注-labelImg_windows_v1.7

2020-10-25

xgboost.pmml

sklearn 鸢尾花训练后的pmml模型文件 ,sklearn 鸢尾花训练后的pmml模型文件

2020-10-23

iris.csv

iris.csv

2020-10-23

汉语 词频 标注 语料

汉语 词频 标注 语料 汉语 词频 标注 语料 汉语 词频 标注 语料

2018-07-20

centos win7双系统安装,在win7已经安装的基础上

centos win7双系统安装,在win7已经安装的基础上。

2018-07-20

nlp工具 word2vec nltk textblob crf++ 机器人 中文翻译 繁体转简体 关键词 主题 命名体识别 分词 聚类 词性标注 词向量

本资源属于代码类,是一些nlp工具的使用 nlp 工具 word2vec nltk textblob crf++ (1)机器人 (2)中文翻译,及繁体转简体 (3)关键词提取,主题提取,摘要提取 (4)命名体识别 (5)分词 (6)情感分析,正负类分析 (7)近义词,同义词,句子相似性 (8)聚类,监督,无监督 (9)词性标注 (10)词向量提取

2018-07-20

pcm 静默分析

pcm 静默分析pcm 静默分析pcm 静默分析pcm 静默分析pcm 静默分析pcm 静默分析pcm 静默分析

2017-12-27

nltk python 中文版 pdf

nltk python 中文版 pdf

2017-02-17

CRF++ 训练中文分词

CRF++ 训练中文分词,文件后缀有3标示3列的语料,文件后缀有2,表示2列的语料训练

2017-02-08

springboot

springboot-mybatis demo

2017-01-23

CRF++ 0.58.tar.gz源文件for linux和.zip for windows

CRF++ 目前最新版,包括CRF++ 0.58.tar.gz源文件for linux和.zip for windows 另外,包括一个介绍使用的下载网页文件。

2017-01-18

angular 路由,传值,http

angular 路由,传值,http

2016-11-03

opencv 人脸识别 代码

opencv 人脸识别

2016-10-18

qt 页面切换 与传值

qt 页面切换 与传值

2016-09-05

Qt 子窗口父窗口切换,窗口间传值

Qt 子窗口父窗口切换,窗口间传值

2016-09-04

spring-mvc-jasperReports

spring-mvc-jasperReports

2016-09-03

jasperReports spring mvc 整合代码

2016-09-02

python2.7.6+python for eclipse

python2.7.6+python for eclipse

2016-01-03

MyBatis Generator.

MyBatis Generator

2015-12-20

hibernate3-log4j-slf4j所有包

hibernate3 日志配置所需的三个包 log4j-slf4j

2015-10-07

jstl包

jstl包

2015-09-10

mina2 cs 客户端服务器通信 已经实现完整通信代码

mina2 cs 客户端服务器通信 已经实现完整通信代码

2015-05-31

网页,html5,canvas,js 动态绘制柱形图

网页,html5,canvas,js 动态绘制柱形图

2015-05-31

微信网站模板

微信网站模板

2015-03-04

java二维码制作源码

二维码二维码二维码erweima

2015-03-04

phpmyadmin修改密码

phpmyadmin修改密码,自己总结的,很好用

2014-03-31

俄罗斯方块

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.*; import javax.swing.Timer; public class Tetris extends JFrame { public Tetris() { Tetrisblok a = new Tetrisblok(); addKeyListener(a); add(a); } public static void main(String[] args) { Tetris frame = new Tetris(); JMenuBar menu = new JMenuBar(); frame.setJMenuBar(menu); JMenu game = new JMenu("游戏"); JMenuItem newgame = game.add("新游戏"); JMenuItem pause = game.add("暂停"); JMenuItem goon = game.add("继续"); JMenuItem exit = game.add("退出"); JMenu help = new JMenu("帮助"); JMenuItem about = help.add("关于"); menu.add(game); menu.add(help); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(220, 275); frame.setTitle("Tetris内测版"); // frame.setUndecorated(true); frame.setVisible(true); frame.setResizable(false); } } // 创建一个俄罗斯方块类 class Tetrisblok extends JPanel implements KeyListener { // blockType 代表方块类型 // turnState代表方块状态 private int blockType; private int score = 0; private int turnState; private int x; private int y; private int i = 0; int j = 0; int flag = 0; // 定义已经放下的方块x=0-11,y=0-21; int[][] map = new int[13][23]; // 方块的形状 第一组代表方块类型有S、Z、L、J、I、O、T 7种 第二组 代表旋转几次 第三四组为 方块矩阵 private final int shapes[][][] = new int[][][] { // i { { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } }, // s { { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }, // z { { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }, // j { { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // o { { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // l { { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, // t { { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } } }; // 生成新方块的方法 public void newblock() { blockType = (int) (Math.random() * 1000) % 7; turnState = (int) (Math.random() * 1000) % 4; x = 4; y = 0; if (gameover(x, y) == 1) { newmap(); drawwall(); score = 0; JOptionPane.showMessageDialog(null, "GAME OVER"); } } // 画围墙 public void drawwall() { for (i = 0; i < 12; i++) { map[i][21] = 2; } for (j = 0; j < 22; j++) { map[11][j] = 2; map[0][j] = 2; } } // 初始化地图 public void newmap() { for (i = 0; i < 12; i++) { for (j = 0; j < 22; j++) { map[i][j] = 0; } } } // 初始化构造方法 Tetrisblok() { newblock(); newmap(); drawwall(); Timer timer = new Timer(1000, new TimerListener()); timer.start(); } // 旋转的方法 public void turn() { int tempturnState = turnState; turnState = (turnState + 1) % 4; if (blow(x, y, blockType, turnState) == 1) { } if (blow(x, y, blockType, turnState) == 0) { turnState = tempturnState; } repaint(); } // 左移的方法 public void left() { if (blow(x - 1, y, blockType, turnState) == 1) { x = x - 1; } ; repaint(); } // 右移的方法 public void right() { if (blow(x + 1, y, blockType, turnState) == 1) { x = x + 1; } ; repaint(); } // 下落的方法 public void down() { if (blow(x, y + 1, blockType, turnState) == 1) { y = y + 1; delline(); } ; if (blow(x, y + 1, blockType, turnState) == 0) { add(x, y, blockType, turnState); newblock(); delline(); } ; repaint(); } // 是否合法的方法 public int blow(int x, int y, int blockType, int turnState) { for (int a = 0; a < 4; a++) { for (int b = 0; b < 4; b++) { if (((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x + b + 1][y + a] == 1)) || ((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x + b + 1][y + a] == 2))) { return 0; } } } return 1; } // 消行的方法 public void delline() { int c = 0; for (int b = 0; b < 22; b++) { for (int a = 0; a < 12; a++) { if (map[a][b] == 1) { c = c + 1; if (c == 10) { score += 10; for (int d = b; d > 0; d--) { for (int e = 0; e < 11; e++) { map[e][d] = map[e][d - 1]; } } } } } c = 0; } } // 判断你挂的方法 public int gameover(int x, int y) { if (blow(x, y, blockType, turnState) == 0) { return 1; } return 0; } // 把当前添加map public void add(int x, int y, int blockType, int turnState) { int j = 0; for (int a = 0; a < 4; a++) { for (int b = 0; b < 4; b++) { if (map[x + b + 1][y + a] == 0) { map[x + b + 1][y + a] = shapes[blockType][turnState][j]; } ; j++; } } } // 画方块的的方法 public void paintComponent(Graphics g) { super.paintComponent(g); // 画当前方块 for (j = 0; j < 16; j++) { if (shapes[blockType][turnState][j] == 1) { g.fillRect((j % 4 + x + 1) * 10, (j / 4 + y) * 10, 10, 10); } } // 画已经固定的方块 for (j = 0; j < 22; j++) { for (i = 0; i < 12; i++) { if (map[i][j] == 1) { g.fillRect(i * 10, j * 10, 10, 10); } if (map[i][j] == 2) { g.drawRect(i * 10, j * 10, 10, 10); } } } g.drawString("score=" + score, 125, 10); g.drawString("抵制不良游戏,", 125, 50); g.drawString("拒绝盗版游戏。", 125, 70); g.drawString("注意自我保护,", 125, 90); g.drawString("谨防受骗上当。", 125, 110); g.drawString("适度游戏益脑,", 125, 130); g.drawString("沉迷游戏伤身。", 125, 150); g.drawString("合理安排时间,", 125, 170); g.drawString("享受健康生活。", 125, 190); } // 键盘监听 public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_DOWN: down(); break; case KeyEvent.VK_UP: turn(); break; case KeyEvent.VK_RIGHT: right(); break; case KeyEvent.VK_LEFT: left(); break; } } // 无用 public void keyReleased(KeyEvent e) { } // 无用 public void keyTyped(KeyEvent e) { } // 定时器监听 class TimerListener implements ActionListener { public void actionPerformed(ActionEvent e) { repaint(); if (blow(x, y + 1, blockType, turnState) == 1) { y = y + 1; delline(); } ; if (blow(x, y + 1, blockType, turnState) == 0) { if (flag == 1) { add(x, y, blockType, turnState); delline(); newblock(); flag = 0; } flag = 1; } ; } } }

2014-01-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除