自定义博客皮肤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

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

原创 freemarker 替换字符串,模板,可以用来动态生成代码

freemarker 通过字符串模板生成,会把map中 name 对应的变量替换字符串模板中的${name}package com.thinkgem.jeesite.test.test;import java.io.IOException;import java.io.StringReader;import java.io.StringWriter;import java.util.

2016-09-29 15:01:45 18652 1

原创 python 文本聚类

excel 格式读取excelexcel.py# -*- coding: utf-8 -*-import xdrlib ,sysimport xlrdimport jsondef open_excel(file= '/home/lhy/data/data.xlsx'): try: data = xlrd.open_workbook(file

2016-09-28 18:12:46 14667 1

原创 python 分词工具 jieba

jieba知识全几天看到高手下了个jieba分词快速入门的东西 ,希望关注我博客的人也能看得到https://github.com/SalutLyndon/hello-world/blob/master/中文自然语言处理基本流# coding: utf-8# ###jieba特性介绍# 支持三种分词模式:

2016-09-28 18:05:03 16123 1

原创 python scikit-learn计算tf-idf词语权重

Python的scikit-learn包下有计算tf-idf的api,研究了下做个笔记1 安装scikit-learn包[python]view plaincopysudopipinstallscikit-learn2 中文分词采用的jieba分词,安装jieba分词包

2016-09-28 17:57:56 3144

原创 java 调用 python(使用jpython)

mavan 本人测试使用以下可用 org.python jython-standalone 2.7.0注意使用下面的maven下的包会有问题,不要使用这个 org.python jython 2.7.01.在Java类中直接执行Python语句view plain

2016-09-28 17:49:50 19866

原创 TF-IDF与余弦相似性的应用(二):找出相似文章

今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供多条相似的新闻。为了找出相似的文章,需要用到"余弦相似性"(cosine similiarity)。下面,我举一个例子来说明,什么是"余弦相似性"。为了简单起见,我们先从句子着手。  句子A:我喜欢看电视,不喜欢看电影

2016-09-28 09:25:38 8032

原创 文本聚类总结

摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的。这里会用到TF/IDF权重,用余弦夹角计算文本相似度,用方差计算两个数据间欧式距离,用k-means进行数据聚类等数学和统计知识。关于这些概念可以去google,或者参考文本后的参考链接。思路:计算两篇文档的相似度,最简单

2016-09-28 09:23:45 10229

原创 TF-IDF与余弦相似性的应用(一):自动提取关键词

这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通

2016-09-28 09:22:14 10367

原创 jeesite 目录结构

源码目录src/main/javacom.thinkgem.jeesite├common公共模块存放目录│├beanvalidator实体Bean验证相关类│├log日志工具相关类│├mapper各种Objec

2016-09-23 15:25:52 12462

原创 jeesite 框架搭建与配置

一、搭建环境:1、这是我的Eclipse、Maven等环境,此步骤略过。 注意:以前试过jdk1.6以上都可以使用jeesite2、下载最新版本jeesite源码:下载地址:[GitHub/jeesite]https://github.com/thinkgem/jeesite下载时注意jeesite的版本,以前先下了一个比较老的版本,结果

2016-09-18 20:20:49 54405 5

原创 知识——————1

PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL和 Firebird),和专有系统(比如 Oracle、Sybase、IBM的 DB2和 Microsoft SQL Server)之外的另一种选择。Docker 是一个开源的应用容器引擎,让开发者可以打包他

2016-09-17 18:50:05 1767

原创 java 实现 mysql 数据库导出与导入(适合linux和windows)

备份import java.io.BufferedReader;import java.io.FileOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class DataBackup { publ

2016-09-17 14:25:58 15641 1

原创 EM算法之一 ———— EM算法描述与推论,应用

机器学习十大算法之一:EM算法。能评得上十大之一,让人听起来觉得挺NB的。什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题。神为什么是神,因为神能做很多人做不了的事。那么EM算法能解决什么问题呢?或者说EM算法是因为什么而来到这个世界上,还吸引了那么多世人的目光。 我希望自己能通俗地把它理解或者说明白,但是,EM这个问题感觉真的不太好用通俗的语言去说明

2016-09-16 14:45:39 10178

原创 EM 算法之二—————高斯混合模型与 EM

EM算法(Expection-Maximizationalgorithm,EM)是一种迭代算法,通过E步和M步两大迭代步骤,每次迭代都使极大似然函数增加。但是,由于初始值的不同,可能会使似然函数陷入局部最优。辜丽川老师和其夫人发表的论文:基于分裂EM算法的GMM参数估计(提取码:77c0)改进了这一缺陷。下面来谈谈EM算法以及其在求解高斯混合模型中的作用。一、高斯混合模型(Gauss

2016-09-16 14:44:18 10387

原创 lpa 半监督学习 之--标签传播算法

众所周知,机器学习可以大体分为三大类:监督学习、非监督学习和半监督学习。监督学习可以认为是我们有非常多的labeled标注数据来train一个模型,期待这个模型能学习到数据的分布,以期对未来没有见到的样本做预测。那这个性能的源头--训练数据,就显得非常感觉。你必须有足够的训练数据,以覆盖真正现实数据中的样本分布才可以,这样学习到的模型才有意义。那非监督学习就是没有任何的labeled数据,就是平时

2016-09-15 20:34:35 25192 2

原创 谱聚类

摘要度矩阵邻接矩阵度矩阵为对角矩阵,度为与节点的相连的个数特征值 与 特征向量设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是A的一个特征值(characteristic value)或本征值,x 称为特征向量拉普拉斯矩阵图论的数学领域中的拉普拉斯矩阵(也被称为导纳矩阵,吉

2016-09-15 19:23:10 13172

原创 k-d tree树 近邻算法

k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。应用背景  SIFT算法中做特征点匹配的时候就会利用到k-d树。而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题。针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中

2016-09-08 17:26:38 13578

原创 LSH 位置敏感哈希算法

原始链接--http://www.jiahenglu.net/NSFC/LSH.htmlLSH(Location Sensitive Hash),即位置敏感哈希函数。与一般哈希函数不同的是位置敏感性,也就是散列前的相似点经过哈希之后,也能够在一定程度上相似,并且具有一定的概率保证。形式化定义:对于任意q,p属于S,若从集合S到U的函数族H={h1,h2...hn}对距离函数

2016-09-08 17:00:39 16766

转载 文件压缩算法

gzip 、zlib以及图形格式png,使用的压缩算法都是deflate算法。从gzip的源码中,我们了解到了defalte算法的原理和实现。我阅读的gzip版本为 gzip-1.2.4。下面我们将要对deflate算法做一个分析和说明。首先简单介绍一下基本原理,然后详细的介绍实现。1 gzip 所使用压缩算法的基本原理gzip 对于要压缩的文件,首先使用LZ77算法的一个变种进行

2016-09-08 10:19:43 3610

转载 机器学习中用到的数学知识

原文 http://www.cnblogs.com/dudi00/p/4056451.html本文主要介绍学习机器学习过程中涉及到的一些微积分的基本概念,也包括部分数值分析,优化求解的概念。极限(limit)直观定义当函数 y=f(x)y=f(x) 在 x0x0 的某个去心邻域内有定义,若当 xx “无限趋近于” x0x0 时,其对应的函数值 f(x)f(x) “无

2016-09-07 19:43:06 8216

原创 技术——1

PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL和 Firebird),和专有系统(比如 Oracle、Sybase、IBM的 DB2和 Microsoft SQL Server)之外的另一种选择。Docker 是一个开源的应用容器引擎,让开发者可以打包他

2016-09-07 10:13:37 11549

原创 Scala 简介 优点 及 用途

介绍:Scala 是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃 Java 这个强大的平台,它运行在 Java 虚拟机 (Java Virtual Machine) 之上,轻松实现和丰富的 Java 类库互联互通。它既支持面向对象的编程方式,又支持函数式编程。它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。Scala 就像一位武林中的集大

2016-09-06 13:46:56 27683

原创 Scala 语法

下面的代码包含了基本的Scala的语法内容。包括:判断,循环代码片段,方法定义,调用。 虚拟类,继承,接口,case,package,单例模式[java] view plain copy package org.exinglo.scala    class LearnScala {    }    obje

2016-09-06 13:24:58 9050

转载 HBase 列族数据库

一、   简介history started by chad walters and jim2006.11 G release paper on BigTable2007.2 inital HBase prototype created as Hadoop contrib2007.10 First useable Hbase2008.1 Hado

2016-09-05 18:47:38 26126

原创 netty 实现 服务器 客户端通信

客户端——服务器连接先啰嗦两句,如果你还不知道Netty是做什么的能做什么。那可以先简单的搜索了解一下。我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序。具体能做什么,各位可以尽量发挥想象。技术,是服务于人而不是局限住人的。如果你已经万事具备,那么我们先从一段代码开始。程序员们习惯的上手第一步,自然是"Hello world",不过Netty官网的例子却偏偏抛

2016-09-05 18:35:03 15928

转载 Netty------对于Netty的十一个疑问

1.Netty 是什么?  Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。  2.使用 Netty 能够做什么?开发异步、非阻塞的 TCP 网络应用程序;开发异步、非阻塞的 UDP 网络应用程序;开发异步文件传输应用程序;开发异步 HTTP 服

2016-09-05 18:29:33 11859

转载 函数式编程

诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang、clojure、Scala、F#等等。目前最当红的Python、Ruby、Javascript,对函数式编程的支持都很强,就连老牌的面向对象的Java、面向过程的PHP,都忙不迭地加入对匿名函数的支持。越来

2016-09-05 16:32:20 960

转载 go 语言 优势及 主要用途

1、Go有什么优势可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。语言层面支持并发,这个就是Go最大的特色,天生的支持并发,我曾经说过一句话,天生的基因和整容是有区别的,大家一样美丽,但是你喜欢

2016-09-05 13:35:53 43749

原创 go 语言的web 框架

Golang被称为云计算时代的C语言,它以其独特的优势逐渐被越来越多的公司所关注和使用。为了充分利用Golang的Web开发优势,有必要熟悉一下Go语言的web框架。1  Beego (http://beego.me/)     Beego是一个完全的MVC框架,你可以使用你的Go语言专业技术构建你的web应用程序。Beego框架下,你可以自

2016-09-05 13:30:09 10531

转载 go 语言实现一个简单的 web 服务器

学习Go语言的一些感受,不一定准确。假如发生战争,JAVA一般都是充当航母战斗群的角色。一旦出动,就是护卫舰、巡洋舰、航母舰载机、预警机、电子战飞机、潜艇等等浩浩荡荡,杀将过去。(JVM,数十个JAR包,Tomcat中间件,SSH框架,各种配置文件...天生就是重量级的,专为大规模作战)而GO语言更像F35战斗轰炸机单枪匹马,悄无声息,投下炸弹然后走人。专属轰炸

2016-09-05 13:26:15 17553

转载 Perl

perl 和 Ruby 的语法很像perl 正则表达式 强大,文本处理能力强,现在主要用于文本处理,可调用shell脚本perl 语法怪异,很难记住所有的符号Perl语言是一门高级解释型动态语言,它的许多数据类型是运行时才确定的,并且经常和PHP和 Python相提并论。Perl从古老的Shell脚本语言中借鉴了许多语法特性,因为被过度使用的各种奇怪符号而声名狼藉,而且许多代码即使

2016-09-05 13:10:19 11245

原创 ruby 用途 与优势

ruby 主要用于做web,如使用 Ruby on Rails 优点:1 采用虚拟机实现跨平台2 支持垃圾回收3 脚本语言,灵活,容易扩展4 支持面向对象5 基于脚本语言,易于同Linux Shell进行交互6 拥有功能强大和完善的标准类库7 拥有良好的交互式运行环境:IRB,方便进行开发和调试8 语言内置对规则表达式(Regular Express)的

2016-09-05 12:00:35 26247

转载 Ruby on Rails 开发 web

Ruby on Rails 正在令整个 Web 开发领域受到震憾。让我们首先了解底层的技术:Ruby 是一门免费的、简单的、直观的、可扩展的、可移植的、解释的脚本语言,用于快速而简单的面向对象编程。类似于 Perl,它支持 处理文本文件和执行系统管理任务的很多特性。Rails 是用 Ruby 编写的一款完整的、开放源代码的 Web 框架,目的是使用更简单而且更少的代码编写实际使用的

2016-09-05 11:56:33 11311 1

转载 不懂Ruby的程序员,如何快速读懂Ruby代码

本问答的目标读者是不了解Ruby语言、但有别的编程语言经验的人。  Ruby语言的代码可读性是很强的。本问答只把一些语法特点、以及别的语言中可能没有或不同的东西展现出来,目的在于让有别的编程语言经验的人能快速读懂Ruby代码。  注意本问答讲的是Ruby语言本身(基于版本1.9),而不是Ruby on Rails,后者是Ruby的一种DSL,语言面貌上和Ruby有一定差异。

2016-09-05 11:47:03 11528

转载 R 语言 语法特点

R语言基础之语法分支结构Ifelse和 Ifelse函数循环结构for循环while循环repeat循环breaknext函数和包1函数1创建2查看函数代码3导入R文件2包的安装和加载1包的安装2包的加载向量化计算1普通的加减乘除2apply家族1 applyxMARGIN22 lapply列表函数名函数其他参数3 sappl

2016-09-05 11:40:39 7074

原创 R 语言 用途 与优势

(1)R 语言主要用来 对 数据进行分析(2)R语言可以针对数据 进行绘图 其高级功能如下R语言饼图图表R语言条形图(柱状图)R语言箱线图R语言柱状图R语言线型图R语言散点图R语言均值,中位数和模式R语言线性回归R语言多元回归R语言逻辑回归R语言正态分布R语言二项分布R语言泊松回归R语言协方差分析R语言时间序列分析R语言非线性最小二乘R语言决策树R语言随机森林R语言生存分析

2016-09-05 11:37:22 11806 2

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

本人代码win_win.pro 文件#-------------------------------------------------## Project created by QtCreator 2016-09-04T13:33:26##-------------------------------------------------QT += core gui

2016-09-04 14:27:14 26789 1

原创 qt ui设计界面 创建信号与槽 原理,

在ui设计界面,设计信号和槽时,会把信息存在ui文件中,在编译时会在成成的头文件**.h 中把连接代码加上。ui界面添加信号和槽有两种方法第一种: 在界面选择操作对象-》右键-》转到槽-》选择信号-》qtCreator 自动生成 槽方法-》编写槽方法。此方法在ui文件中并不会保存响应信号与槽信息,因为它生成的槽格式固定,如on_countBtn_clicked。在编译时加入QMetaObj

2016-09-04 13:29:11 28873

原创 Qt 自定义信号与槽

本文所示代码在windows xp + MingW3.4.2+ eclipse3.4+CDT5.0版本中调试通过    QT系统为我们提供功能非常全面信号处理机制,它的内制信号和槽已经非常全面,因此大多数情况下,我们不需要自己设计信号和槽,但是有些时候,我们可能需要设计一些独特的信号和槽,来满足程序的需求。QT的核心机制信号和槽是独立于C++的,一般C++设计处理如按钮点击等方法,多采用回调函

2016-09-04 12:33:57 20652 1

原创 gcc/g++编译 cpp/c文件 生成可执行文件

g++编辑cpp生成exe编译重命名等:g++ –c Hello.cc  编译文件,生成目标文件 Hello.og++ Hello.o –o abc  连接 并重命名为可执行文件 abcg++ Hello.cc    编译连接一起,生成a.outg++ Hello.cc –o hello 生成a.out并命名为hello多文件编译

2016-09-03 19:07:56 51257 1

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关注的人

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